2

我们遇到的情况是我们存储在 memcache 上的值大于 1MB。

不可能使这些值更小,即使有办法,我们也需要将它们持久化到磁盘。

一种解决方案是重新编译 memcache 服务器以允许说 2MB 值,但这既不干净也不是完整的解决方案(同样,我们需要保留这些值)。

好消息是

  1. 我们可以非常准确地预测我们将拥有多少键/值对
  2. 我们还可以预测我们需要的总大小。

对我们来说,一个关键特性是 memcache 的速度。

所以问题是:是否有任何 noSQL 替代 memcache 可以让我们拥有超过 1MB 的值并将它们存储在磁盘中而不损失速度?

过去我使用过 tokyotyrant/cabinet,但现在似乎已被弃用。

任何的想法?

4

5 回答 5

3

我会使用redis。

Redis 解决了您列出的问题,支持高达 512Mb 的键和高达 2Gb 的值。

您可以使用给定频率、1 秒、5 秒等的 AOF 快照将数据持久化到磁盘,尽管在大多数情况下,RDB持久性提供了 AOF 的最大性能。

我们使用 redis 来缓存 json 文档。我们了解到,为了获得最佳性能,如果可以的话,请在物理硬件上部署 redis;虚拟机极大地影响了 Redis网络性能。

于 2013-10-25T04:06:33.357 回答
2

您还拥有与 Memcache API 兼容的 Couchbase,它允许您仅将数据存储在 Memcache 或持久化集群中。

于 2013-10-25T08:27:08.473 回答
1

如果您的数据总量不超过您的物理内存大小,Redis 就可以了。如果您的数据总量太大而无法容纳内存,您将需要在不同的服务器上安装更多的 Redis 实例。

或者你可以试试 SSDB(https://github.com/ideawu/ssdb),它会自动将冷数据迁移到磁盘中,这样你会得到更多的 SSDB 存储容量。

于 2013-10-30T03:52:14.337 回答
0

任何键/值存储都可以,真的。例如,请参阅此列表:http ://www.metabrew.com/article/anti-rdbms-a-list-of-distributed-key-value-stores

还要看看 MongoDB——持久性对你来说似乎不是问题,这基本上就是 Mongo 很糟糕的地方,所以你可以免费获得快速的文档数据库(基本上是类固醇上的键/值存储)和索引。至少在你变得太大之前。

于 2013-10-25T11:52:26.093 回答
0

我会选择 couchbase,它最多可以支持 20mb 的文档,可以将存储桶作为 memcache 或 couchbase 协议运行,后者提供持久性。

在此处查看键/元数据的其他限制:http: //www.couchbase.com/docs/couchbase-manual-2.0/couchbase-server-limits.html

以及关于 mongodb/cassandra 和 couchbase 如何在吞吐量/操作上叠加的演示文稿。http://www.slideshare.net/renatko/couchbase-performance-benchmarking

我在生产环境中同时使用了 redis 和 couchbase,因为要使用持久性来替代 memcache,因此很难反对基于该协议构建的 nosql 数据库。

于 2013-10-25T23:05:08.950 回答