【问题标题】:Backend technology for high volume data for web application用于 Web 应用程序的大量数据的后端技术
【发布时间】:2014-07-30 06:13:01
【问题描述】:

我正在开发一个应用程序来为大约 50,000 个对象提供每日动态信息,例如价格、可用性等。我需要存储大约未来 200 天的数据。这意味着总共有 1000 万行。价格将批量更新,新数据将每天添加一次。让我说大约 10,000 现有行得到更新,每天插入 50,000 行。我可以使用的最好的后端框架是什么。

MySQL 能否在有限的硬件能力下进行扩展。还是 NoSQL 数据库要走的路?如果是,那么哪个 NoSQL 数据库最适合快速获取和更新数据。

【问题讨论】:

  • 您的 50,000 次插入是每天一次发生,还是一天中一点一点发生?此外,每个对象将存储多少信息?您要为每个对象存储的不同信息的列表是否可能会发生变化(例如,您决定在几个月后添加 RRP)?
  • 另外,请更具体地说明您可用的硬件以及您提到的限制。
  • @Alex 插入会每天同时发生。每个对象将存储大约 100 个文本字段。但最有可能改变的只有价格和可用性。
  • 如果价格和可用性是您希望定期更改的唯一字段,我建议单独存储其他字段的修订(如果您需要存储它们的修订历史),而不是而不是每天复制 40,000 多行数据。假设采用这种方法,我会说 MySQL 在体面的硬件上可以应付得很好。我对 NoSQL 数据库的了解还不够,无法告诉您它们的性能。

标签: mysql mongodb cassandra nosql


【解决方案1】:

我建议您使用 Cassandra,因为您需要写入多于读取,并且 Cassandra 针对写入时的高吞吐量进行了优化。 它提供可扩展性、无单点故障和高吞吐量。您还可以更新记录。
Cassandra 还支持 DML(数据操作语言)的批处理操作,即写入、更新和删除。 Cassandra 的批处理操作也提供了原子性。

【讨论】:

    【解决方案2】:

    这种类型的卷完全在传统 RDBMS 的能力范围内。我想说的是,如果您熟悉 MySQL,那么坚持使用它是安全的。很大程度上还取决于您要运行哪种查询。通过正确结构化、非规范化的设置,您可以在 RDBMS 中运行即席查询,而对于文档存储,您需要非常仔细地预先考虑结构——嵌入与引用,请参阅:MongoDB relationships: embed or reference?。 MongoDB 添加了一个非常好的聚合框架,这对于能够像在 RDBMS 中那样查询数据大有帮助,但在许多其他 NoSQL 系统中,查询本质上是 map-reduce 作业,并且连接要么很痛苦,要么不可能。

    听起来您的数据是围绕日期/日期构建的。您可以做的一件事是partitioning by date ranges. 可以显着提高查询速度,我在 MySQL 中处理了超过 1 亿行的 dbs,其中必须保留历史数据以进行审计,但大部分读/写都在当前数据上,和分区带来了真正显着的读取查询改进。

    您可能会对这个链接感兴趣,该链接显示了一些非常大容量的网站正在使用什么:What databases do the World Wide Web's biggest sites run on? 有趣的是,我知道 Facebook 在它们开始遇到真正的瓶颈之前在 MySQL 中有数万亿行跨越各种集群,但事实并非如此令人惊讶的是,Cassandra 最终脱离了 Facebook 工程,考虑到他们现在处理的真正庞大的数据量。

    Cassandra、Riak、CouchDB、MongoDB 等都是为了解决非常实际的问题而出现的,但这些都伴随着权衡,无论是在 CAP 定理方面,还是在即席查询方面比在 RDBMS 中更困难。话虽如此,MongoDB 和 Cassandra(我最有经验)易于设置且使用起来很有趣,所以如果你想试一试,我相信你不会有任何问题,但我会说您的使用要求完全在 MySQL 的能力范围内。只是我的 2c。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 2011-11-13
      相关资源
      最近更新 更多