【问题标题】:Best (NoSQL?) DB for small docs/records, unchanging data, lots of writes, quick reads?小型文档/记录、不变数据、大量写入、快速读取的最佳(NoSQL?)数据库?
【发布时间】:2012-05-16 00:31:50
【问题描述】:

我发现了一些与此相同的问题,但它们没有详细说明所存储数据的性质、如何查询数据等......所以我认为这值得发布。

我的数据很简单,三个字段: - “日期时间戳”值(日期/时间) - 两个字符串,“A”和“B”,都

我的应用程序的写入量很大(每秒数百次)。所有写入都是新记录;一旦插入,数据永远不会被修改。

定期读取每隔几秒发生一次,用于填充一些近乎实时的仪表板。我查询日期/时间值和字符串值之一。例如获取日期时间戳在特定范围内且字段“B”等于特定搜索值的所有记录。这些查询通常每个返回几千条记录。

最后,我的数据库不需要无限增长;如果数据库支持,我会通过手动删除或使用缓存过期技术来清除 10 天以上的记录。

我最初在 MongoDB 中实现了这一点,没有意识到它处理锁定的方式(写入块读取)。随着我的扩展,我的查询花费的时间越来越长(现在 30 多秒,即使有正确的索引)。现在,根据我所学到的,我相信大量的写入正在耗尽我的阅读。

我已经阅读了kkovacs.eu 比较各种 NoSQL 选项的帖子,虽然我学到了很多东西,但我不知道我的用例是否有明显的赢家。非常感谢熟悉这些选项的人的推荐。

提前致谢!

【问题讨论】:

  • 您在记录什么需要每秒数百次写入才能为实时仪表板填充数据库?
  • @eaolson 我正在记录发生的事件,我无法控制向我输入的内容。这两个字符串标识“what”和“where”。查询主要是“选择过去 5 分钟内位置 [x] 处的所有事件”之类的内容。结果被缓存并与先前查询的结果(来自先前的时间片)相结合,并绘制在仪表板上。
  • 我建议您重新考虑是否需要将所有这些数据记录在数据库中。您能否汇总 100 毫秒的数据并仅存储汇总数据?根据@ValBakhtin,我相信 SQLite 在写入时会锁定整个数据库文件,这听起来使它不适合这个应用程序。
  • 您是同时查询 A 和 B 还是只查询 B?时间是否始终是查询的一部分,即您可以有一个没有时间的查询吗?同样,是否有只有时间的查询? A/B 可以采用的值是固定的吗?
  • 好的,到目前为止,我知道您需要非常快速地写入数据 选择查询的执行频率如何?就像在一些刷新计时器/每天/每周的飞行中,...?

标签: sql nosql


【解决方案1】:

我以前在记录过程控制测量的系统中遇到过这样的问题。这是使用 5 MHz IBM PC 完成的,因此绝对有可能。用例更加多样化——按分钟、小时、八小时班次、日、周、月或年进行汇总——因此系统记录了所有原始数据,但也针对最常见的查询动态汇总(这是五分钟的平均值)。就您的仪表板而言,五分钟聚合似乎也是一个主要目标。

也许这可以通过为每个输入流编写一对文本文件来解决:一个包含所有原始数据;另一个与多分钟聚合。仪表板将忽略原始数据。当然,可以使用数据库来做同样的事情。但是简化应用程序可能意味着不需要 RDB。设计和维护更简单,更易于安装在微控制器、嵌入式系统等上,或者是共享主机上更友好的邻居。

【讨论】:

    【解决方案2】:

    确定合适的 NoSQL 产品并非易事。我建议你在做出选择之前了解更多关于 NoSQL 的知识,如果你真的想确保你最终不会相信别人的建议或收藏夹。

    有一本很好的书,它提供了关于 NoSQL 的非常好的背景知识,任何开始使用 NoSQL 的人都应该阅读这本书。

    http://www.amazon.com/Professional-NoSQL-Wrox-Programmer/dp/047094224X

    我希望阅读本书中的一些章节能对你有所帮助。有比较和解释什么对什么工作有好处等等。

    祝你好运。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-19
      • 1970-01-01
      • 2011-07-30
      相关资源
      最近更新 更多