我有一个在Ubuntu Linux 12.04上运行的应用程序,它需要存储和检索大量的大型序列化对象。目前,通过简单地将序列化流保存为文件来实现存储,其中文件名等于序列化对象的md5散列。但是,我想加快将文件存储库替换为最近读取/写入的对象的内存缓存,并且最好为我进行散列处理。
我的应用程序的设计不应该变得更复杂。因此,优选地是存储后端,其以抽象且有效的方式管理键值数据库和高速缓存。我对所有的关键/价值商店感到有点失落,而且很多主题/信息似乎已经过时了。我最初看的是像memcached + membase这样的东西,但也许有更好的解决方案。我查看了redis,mongodb,couchdb,但是如果它们符合我的需要,我不太清楚。
我最重要的要求:
感谢您的任何建议!
答案 0 :(得分:1)
我通常会建议使用Redis,因为它会在asynch持久存储中快速且内存。另外,您会发现可以将其不同的数据类型用于其他目的,因此不像memcached那样单一用途。至于自动散列,我不认为它是这样做的,因为你在存储对象时定义自己的键(就像在大多数中一样)。
Redis的一个缺点是,如果你要存储TON的二进制对象,你将被限制在RAM中的可用内存(除非分片),因此可能会达到性能限制。在这种情况下,您可以将对象存储在文件系统上,对它们进行哈希处理,并在Redis中存储密钥,并将其与存储在文件服务器上的文件名进行匹配,您就可以了。
-
另一种选择是检查ElasticSearch,它就像Mongo一样,它存储本机为JSON的对象,但它包含Lucene搜索引擎,顶部带有RESTful API接口。它可以“加热”内存中的数据以实现快速响应,但也是一个持久存储,最好的部分是使用多播自动分片和自动群集来查找其他节点。
-
希望有所帮助,如果有,请分享爱! ; - )
答案 1 :(得分:0)
我会看MongoDB
。它使用您的操作系统有效地缓存数据来进行数据输入和输出,并且设置起来非常简单。 Redis和Memcached对你来说不是很好的解决方案,因为它们可以将所有内容保存在RAM中。其他更简单的解决方案,如LevelDB或BDB也可能是合适的。我不认为任何数据库会自动为您计算哈希值。听起来你已经有了这个代码。