应该使用啥类型的数据库来存储数百万家餐馆并查询它们[关闭]
Posted
技术标签:
【中文标题】应该使用啥类型的数据库来存储数百万家餐馆并查询它们[关闭]【英文标题】:what type of database should be used to store millions of restaurants and query them [closed]应该使用什么类型的数据库来存储数百万家餐馆并查询它们[关闭] 【发布时间】:2015-04-23 12:16:25 【问题描述】:我正在设计一个系统,它将存储世界上所有可用的餐厅,然后用户应该能够以非常低的延迟对如此大的数据集执行通用搜索。普通的 RDBMS 就足够了,还是我应该选择像 cassandra 这样的大数据框架。我应该使用什么来使通用搜索有效。为每家餐厅存储 cmets 的最佳方式是什么。
【问题讨论】:
很多数据库和技术都适合你描述的问题。但是,Stack Overflow 不是推荐特定软件解决方案的网站。请查看提问指南。这是一个开始的地方:***.com/help/how-to-ask. 我看到的统计数据表明,在全球范围内,平均每 1000 人就有 2 家餐厅。这是一个粗略的概括,因为像俄罗斯这样的国家有一个温和的餐厅文化,而像日本和韩国这样的国家有一个巨大的餐厅文化。然而,如果我们从表面上看这个数字,那么它相当于全球有 14-1500 万家餐厅。允许 20% 的误差幅度,你就有 1800 万家餐厅。通过适当的分区,根据您管理历史数据的方式,普通的 RDBMS 几乎可以应付。 “世界上所有可用的餐厅”...鉴于填充数据集将花费数百万美元,我建议现在留出一些资金来建立一个称职的开发团队并支付适当的设计工作费用。 【参考方案1】:您可以使用任何 RDBMS 来存储您的数据。但是对于快速搜索,请使用像 lucene 这样的搜索引擎,它提供各种快速搜索和聚合。
直接使用 lucene 可能需要更多的努力,因此您可以使用围绕 lucene 构建的现有工具,例如 solr 和 elasticsearch。
【讨论】:
【参考方案2】:所以第一个问题是:您认为会有多少数据? 大数据方法更适合数十亿条记录,但当然,如果您没有适当的硬件和数据库设计,例如,几百万条记录可能会导致 mysql 服务器的性能非常差。
NoSQL 更适合不相关的数据,我认为在你的情况下,表之间会有很多关系(例如,你可以让餐厅表与 restaurant_comments
表有直接关系(例如与外键) .
在这种情况下,使用 MySQL(innoDB 引擎)将非常有用,例如,当您删除一家餐厅时 - 它的所有 cmets 都可以随之删除,从而节省磁盘空间和时间。
如果您计划拥有不超过 100-2 亿家餐厅并配备适当的硬件(专用 MySQL 服务器或具有负载平衡器的多台服务器),并且您将数据库(表、关系、数据类型和索引)设计为好的方法,那么你将有出色的表现。
如果您计划拥有更多数据并且很多用户经常查询这些数据,那么您可能应该考虑使用 Apache Hadoop(使用 HBase 或 Cassandra)。
【讨论】:
以上是关于应该使用啥类型的数据库来存储数百万家餐馆并查询它们[关闭]的主要内容,如果未能解决你的问题,请参考以下文章