Nosql 具有磁盘持久性的memcached类软件

Nosql 具有磁盘持久性的memcached类软件,nosql,memcached,couchdb,redis,ehcache,Nosql,Memcached,Couchdb,Redis,Ehcache,我有一个在Ubuntu Linux 12.04上运行的应用程序,它需要存储和检索大量大型序列化对象。目前,存储是通过简单地将序列化流保存为文件来实现的,其中文件名等于序列化对象的md5哈希。但是,我希望加快速度,将文件存储替换为对最近读/写的对象进行内存缓存的文件存储,最好为我进行哈希运算 我的应用程序的设计不应该变得更复杂。因此,最好是以抽象和高效的方式管理键值数据库和缓存的存储后端。我对所有的键/值存储都有点不知所措,而且很多主题/信息似乎都过时了。我最初考虑的是memcached+memb

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

我的应用程序的设计不应该变得更复杂。因此,最好是以抽象和高效的方式管理键值数据库和缓存的存储后端。我对所有的键/值存储都有点不知所措,而且很多主题/信息似乎都过时了。我最初考虑的是memcached+membase,但也许有更好的解决方案。我查看了redis、mongodb和couchdb,但我不太清楚它们是否适合我的需要

我最重要的要求是:

  • 透明地保存到持久性存储中,通过在内存中自动缓存最近写入/读取的对象,可以快速获得这些对象
  • 存储应该能够在重新启动后生存。因此,内存中的对象应尽快保存在磁盘上
  • 目前我正在手动计算md5。如果后端能为我这样做,那就更好了。因此,能够在存储对象时获取哈希键,并且能够在以后使用哈希键检索对象
  • 最大的好处是,如果Ubuntu12.04有可用的软件包,无论是在universe中,还是通过launchpad或其他任何东西
  • 除此之外,软件最好是轻量级的,不要过于复杂(我不需要分布式地图缩减作业等)

谢谢你的建议

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

Redis的一个缺点是,如果要存储大量二进制对象,RAM中的可用内存会受到限制(除非进行切分),因此可能会达到性能限制。在这种情况下,您可以将对象存储在文件系统上,对它们进行散列,并将密钥存储在Redis中,然后将其与存储在文件服务器上的文件名进行匹配,这样就可以了

--

另一种选择是查看ElasticSearch,它与Mongo类似,它将对象存储为JSON本机,但它在顶部包含Lucene搜索引擎和RESTful API接口。它“预热”内存中的数据以实现快速响应,但它也是一个持久存储,最棒的部分是它使用多播自动碎片和自动集群来查找其他节点

--


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

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

顺便说一下,对于ElasticSearch,您需要将Java添加到堆栈中。有一些RPM可以在ES的站点上引用,为ES构建。对象非常大,它们的集合将很快超过RAM。此外,存储应该能够在重新启动后生存。Redis是否能够很好地将所有内容卸载到磁盘上,或者只是内存中的存储?Redis使用快照或重做日志记录将数据持久保存到磁盘上,但它不会卸载数据。它们必须适合于记忆。请参阅记录,redis 2.6上的lua脚本很可能会自动生成哈希键。应用程序是否会将这些数据存储在运行的机器本地,或者您是否计划让它与服务器对话以存储这些对象?您列出的所有技术都是服务器位。要在本地运行应用程序和存储,除应用程序外,还需要在本地安装和运行服务器。操作系统对文件进行内存缓存,因此此系统正常。