2

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

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

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

编辑:

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

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

我一直在研究 Redis 来完成这样的任务,因为它看起来非常易于管理 - 但是它完全在 RAM 中运行,因此需要小数据块,或者多个服务器同时运行多个实例。这是我不知道的可使用。

4

1 回答 1

1

首先,我认为当您说大多数您所见过的将数据存储在 RAM 中时,您指的是内存中的 Key/Value 数据存储,例如 Redis 或 Memcached。但不止于此。在结束关于内存中 NoSQL 选项的讨论之前,我应该说你是对的。内存很容易填满,根据您的要求,您将需要大量内存。所以应该丢弃内存中的选项(不是它们没有用,但在这种特定情况下不是)。

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

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

回到读取速度,我一直在寻找半并发查询,它可以为大约 100 个并发用户提供低于 50 毫秒的读取时间。

在 MongoDb 团队的帮助下,我设法接近了那个时代,但后来我开始做别的事情,不得不放弃我的研究(暂时,我希望能尽快恢复)。还有更多的事情需要研究,例如聚合速度、map/reduce 等。我可以说服务器上的查询时间非常快,所有开销都是由 BSON 序列化/反序列化和网络传输增加的。

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

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

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

于 2012-06-16T11:05:30.583 回答