我应该使用什么NoSQL数据库?

时间:2012-06-16 10:28:32

标签: database nosql

好的,所以我一直在研究NoSQL数据库,它们似乎是我需要的正确选择。但问题是,很多这些数据库,如果不是大多数数据库,都是从RAM读取/写入,而不是磁盘。当你有足够的服务器资源或不期望大量的数据块时,这很好 - 但我认为我应该为最坏的情况做好准备。

我期望从这些数据源收到的信息是每个查询25KB到150KB - 是 - 单个密钥值高达150KB。普通用户将生产500到5000个这些键的任何地方,并且它们可以无限增长(但可能会在5000范围内停留)。如果你快速进行计算(大多数数据将在25-150的较高端,所以我将使用100KB作为“平均”,大多数用户可能会产生2000-3000个查询):100KB * 3000 - 这是每位用户300MB!当您开始获得合适的用户群时,疯狂数据量。所以,最终我可能会丢弃查询中的大部分数据,因此它不超过1KB左右,但这仍然远远超过大多数RAM功能。

所以我认为我正在寻找的解决方案是将数据存储到磁盘,并将对象缓存在RAM中。但我对所有解决方案都持开放态度!让我知道你们的想法。我很乐意让这件事快速 ...

编辑:

措辞略有不同,对路人有用:

如果想要在NoSQL数据库中最大限度地提高性能但处理大型数据记录,那么推荐的NoSQL数据库是什么?我认为它会将数据存储到磁盘,但这会严重影响性能。那里有“两全其美”的解决方案吗?重要的是要注意我假设,这些记录一旦提交就不会被修改,只能从​​中读取(但可能不经常读取)。

我一直在研究Redis的这项任务,因为它看起来很干净 - 但是它完全在RAM中运行,因此需要小型数据块,或者同时运行多个实例的多个服务器。这是我的事情无法访问。

1 个答案:

答案 0 :(得分:1)

首先,我想当你说大多数时候你已经在RAM中看过商店数据时,你会在内存中找到像Redis或Memcached这样的Key / Value数据存储。 但还有更多。在结束关于内存中NoSQL选项的讨论之前,我应该说你是对的。记忆很容易填满,根据你的要求,你需要大量的记忆。因此应该放弃内存中的选项(不是它们没有用,但在这种特定情况下也不是这样)。

我的建议是MongoDb。你需要的是:将数据存储在磁盘上,缓存内存中的内容(尽可能多)。 但是,您需要一些强大的数据存储选项(SSD是您应该考虑的),因此它可以处理您的数据吞吐量需求。我测试了Mongo,但数据要少得多。 我正在寻找超过100万个元素集合,价值大小从5Kb到50Kb不等。

我最感兴趣的是阅读速度。我还应该提一下我测试的写入速度,并且必须说它们令人印象深刻。几分钟就有100万个20Kb插件(在小型服务器上 - 四核,8GB内存,VMware VM)。

回到读取速度,我正在寻找半并发查询,这将使我在大约100个并发用户的读取时间不到50毫秒。

在MongoDb团队的帮助下,我设法接近那些时间,但后来我又陷入了其他困境并不得不放弃我的研究(暂时,我希望很快恢复)。还有很多东西需要关注,比如聚合速度,地图/缩小等等。 我可以说服务器上的查询时间非常快,所有开销都是通过BSON序列化/反序列化和网络传输添加的。

所以,对你来说Mongo是合适的,但是你必须用一些好的硬件备份它。 您应该真正安装它并在特定情况下进行测试,并从您自己的测试中得出结论。

如果您打算这样做并且您的客户端是.NET,那么您应该使用他们的官方驱动程序。否则,此处列出了很多其他内容:http://www.mongodb.org/display/DOCS/Drivers

可以在此处找到有关Mongo功能以及如何使用它们的简介:http://www.mongodb.org/display/DOCS/Developer+Zone。当然,他们的文档不如RavenDb(我测试过的另一个NOSQL解决方案,但速度不是很快),但是你可以在这里或Google网上获得很好的支持。