我们遇到的情况是,我们存储在memcache上的值大于1MB。
不可能使这些值变小,即使有办法,我们需要将它们保存到磁盘。
一种解决方案是重新编译memcache服务器以允许说2MB值,但这不是干净的也不是完整的解决方案(同样,我们需要保留值)。
好消息是
我们的一个关键功能是记忆缓存的速度。
所以问题是:是否有任何noSQL替代memcache,这将允许我们有超过1MB的值并将它们存储在磁盘而不会失去速度?
过去我曾使用过tokyotyrant / cabinet但现在似乎已被弃用了。
有什么想法吗?
答案 0 :(得分:3)
我会用redis。
Redis解决了您列出的问题,supports密钥最高可达512Mb,值最高可达2Gb。
在给定频率,1s,5s等的情况下,您可以使用AOF快照将数据保存到光盘,尽管在大多数情况下RDB persistence提供的性能优于AOF。
我们使用redis来缓存json文档。我们已经了解到,为了获得最佳性能,请在物理硬件上部署redis,如果可以的话;虚拟机会极大地影响redis network性能。
答案 1 :(得分:2)
您还拥有与Memcache API兼容的Couchbase,并允许您仅将数据存储在Memcache或持久群集中。
答案 2 :(得分:1)
如果数据的总数不会超过物理内存的大小,则Redis很好。如果您的数据总量太大而无法满足内存,则需要在不同的服务器上安装更多Redis实例。
或者您可以尝试SSDB(https://github.com/ideawu/ssdb),它会自动将冷数据迁移到磁盘中,因此您将通过SSDB获得更多存储容量。
答案 3 :(得分:0)
任何键/值存储都会这样做。请参阅此列表,例如:http://www.metabrew.com/article/anti-rdbms-a-list-of-distributed-key-value-stores
另外看一下MongoDB - 持久性对你来说似乎不是一个问题,而且这基本上是Mongo很糟糕的地方,所以你可以获得快速的文档数据库(类似于类固醇的键/值存储),索引为自由。至少在你变得太大之前。
答案 4 :(得分: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,因为对于基于协议构建的nosql数据库而言,它很难与memcache取代。