我发现了一些与此相同的问题,但是他们没有详细说明存储数据的性质,查询方式等等......所以我认为这是值得发布的。
我的数据非常简单,有三个字段: - “datetimestamp”值(日期/时间) - 两个字符串,“A”和“B”,两者都是< 20个字符
我的应用程序非常庞大(每秒数百个)。所有写入都是新记录;插入后,数据永远不会被修改。
每隔几秒就会进行常规读取,并用于填充一些近实时的仪表板。我查询日期/时间值和其中一个字符串值。例如获取datetimestamp在特定范围内的所有记录,字段“B”等于特定搜索值。这些查询通常每个都返回几千条记录。
最后,我的数据库不需要无限增长;我会考虑通过手动删除它们或使用缓存过期技术来清除10天以上的记录,如果数据库支持的话。
我最初在MongoDB中实现了这个,但没有意识到它处理锁定的方式(写入块读取)。随着我的扩展,我的查询花费的时间越来越长(现在30秒以上,即使使用正确的索引)。现在,凭借我所学到的知识,我相信大量的写作都会使我的读数匮乏。
我已经阅读了比较各种NoSQL选项的kkovacs.eu帖子,虽然我学到了很多东西,但我不知道我的用例是否有明显的胜利者。我非常感谢熟悉这些选项的人的推荐。
提前致谢!
答案 0 :(得分:1)
我在系统录制过程控制测量之前遇到过这样的问题。这是用5 MHz IBM PC完成的,所以绝对可以。用例更加多样化 - 按分钟,小时,八小时轮班,日,周,月或年进行汇总 - 因此系统记录了所有原始数据,但也会针对最常见的查询进行汇总(这是五分钟的平均值)。对于仪表板,似乎五分钟聚合也是一个主要目标。
也许这可以通过为每个输入流编写一对文本文件来解决:一个包含所有原始数据;另一种是多分钟聚合。仪表板将忽略原始数据。当然,可以使用数据库来做同样的事情。但是简化应用程序可能意味着不需要RDB。更易于设计和维护,更易于安装在微控制器,嵌入式系统等上,或者在共享主机上更友好的邻居。
答案 1 :(得分:0)
确定合适的NoSQL产品并非易事。我建议你在做出选择之前了解更多有关NoSQL的信息,如果你真的想确保你最终不相信别人的建议或收藏。
有一本很好的书可以提供关于NoSQL的非常好的背景知识,任何正在使用NoSQL的人都应该阅读这篇文章。
http://www.amazon.com/Professional-NoSQL-Wrox-Programmer/dp/047094224X
我希望阅读本书中的一些章节对你有所帮助。关于什么对什么工作以及更多工作有益的比较和解释。
祝你好运。