memcached就像带有磁盘持久性的软件一样

时间:2012-07-15 12:10:09

标签: nosql memcached couchdb redis ehcache

我有一个在Ubuntu Linux 12.04上运行的应用程序,它需要存储和检索大量的大型序列化对象。目前,通过简单地将序列化流保存为文件来实现存储,其中文件名等于序列化对象的md5散列。但是,我想加快将文件存储库替换为最近读取/写入的对象的内存缓存,并且最好为我进行散列处理。

我的应用程序的设计不应该变得更复杂。因此,优选地是存储后端,其以抽象且有效的方式管理键值数据库和高速缓存。我对所有的关键/价值商店感到有点失落,而且很多主题/信息似乎已经过时了。我最初看的是像memcached + membase这样的东西,但也许有更好的解决方案。我查看了redis,mongodb,couchdb,但是如果它们符合我的需要,我不太清楚。

我最重要的要求:

  • 通过自动将内存缓存在内存中,以最近编写/读取的对象快速可用的方式透明保存到持久性存储。
  • 商店应该能够在重启后继续存在。因此在内存中对象应该尽快保存在磁盘上。
  • 目前我手动计算md5。如果后端为我做这件事实际上会更好。因此能够在存储对象时获取哈希键,并且能够稍后使用哈希键检索该对象。
  • 如果有可用于Ubuntu 12.04的软件包,无论是在Universe中,还是通过启动板或其他方式,都可以使用。
  • 除此之外,软件应该最好不要比必要的复杂(我不需要分布式地图减少工作等)

感谢您的任何建议!

2 个答案:

答案 0 :(得分:1)

我通常会建议使用Redis,因为它会在asynch持久存储中快速且内存。另外,您会发现可以将其不同的数据类型用于其他目的,因此不像memcached那样单一用途。至于自动散列,我不认为它是这样做的,因为你在存储对象时定义自己的键(就像在大多数中一样)。

Redis的一个缺点是,如果你要存储TON的二进制对象,你将被限制在RAM中的可用内存(除非分片),因此可能会达到性能限制。在这种情况下,您可以将对象存储在文件系统上,对它们进行哈希处理,并在Redis中存储密钥,并将其与存储在文件服务器上的文件名进行匹配,您就可以了。

-

另一种选择是检查ElasticSearch,它就像Mongo一样,它存储本机为JSON的对象,但它包含Lucene搜索引擎,顶部带有RESTful API接口。它可以“加热”内存中的数据以实现快速响应,但也是一个持久存储,最好的部分是使用多播自动分片和自动群集来查找其他节点。

-

希望有所帮助,如果有,请分享爱! ; - )

答案 1 :(得分:0)

我会看MongoDB。它使用您的操作系统有效地缓存数据来进行数据输入和输出,并且设置起来非常简单。 Redis和Memcached对你来说不是很好的解决方案,因为它们可以将所有内容保存在RAM中。其他更简单的解决方案,如LevelDB或BDB也可能是合适的。我不认为任何数据库会自动为您计算哈希值。听起来你已经有了这个代码。