我有一个很大的key-value
对转储,我需要查找我的django-Python webapp。
所以,我有以下选择:
上面哪种方法是正确的?
您如何比较memcache和redis?
更新
使用Redis / Memcache会增加每次点击套接字的开销,因此 dump.py 会更好,因为将它加载到内存需要时间,但之后它只会进行内存查找。
我的字典需要每天更新,考虑到 dump.py 会有问题,因为我们必须重新启动django-server重新加载,因为我猜它会反映出来在 redis和memcache 中飞行。
只有当您拥有大量数据并且必须非常频繁地查找时才使用像 redis 这样的系统,在这种情况下套接字会产生开销,所以我们如何实现这一优势
请分享您的经验!
答案 0 :(得分:7)
为了选择Memcache或REDIS,它们在低端硬件上每秒能够提供数万个请求(例如80,000 req/s for REDIS on C2D Q8300)。延迟远低于1ms。你说的是你要按照20秒的要求做一些事情,所以表现明智,这真的不是问题。
如果选择dump.py
选项,则无需重新启动Django即可重新加载。您可以制作自己的简单重新加载器:
dump.py:
[ dict code...]
mtime = 0
djago代码:
import dump #this does nothing if it's already loaded
stat = os.stat(dump_filename)
if(stat.mtime > dump.mtime):
reload(dump)
dump.mtime = stat.mtime
答案 1 :(得分:2)
Memcached,虽然是一款出色的产品,但在我的书中被Redis打败了。它提供了许多memcached没有的东西,比如持久性。
它还提供更复杂的数据结构,如散列。您的特定数据转储是什么?它有多大,有多大/什么类型的值?
答案 2 :(得分:1)
过去对于类似的问题,我使用了dump.py的想法。我认为所有其他数据结构都需要一个层来将一种对象转换为python对象。但是,我仍然认为这取决于数据大小和您正在处理的数据量。当涉及到真正大型的数据集和基于正则表达式的查找之类的东西时,Memcache和redis应该有更好的索引和查找。所以我的推荐是
json - 如果您通过http向其他服务提供数据 python文件 - 如果数据结构不是太大而你不需要任何特殊的查找
memcache和redis - 如果数据变得非常大
答案 3 :(得分:1)
5Mb并不是那么大。您可以将其保留在内存中,我建议您这样做,直到通过分析和测试表明该方法无法满足您的需求为止。始终做最简单的事情。
套接字通信本身并没有引入太多开销。您可以通过使用unix域套接字将其略微缩减。在任何情况下,如果你没有保持你的数据,你将不得不谈论某种管道。