缓存服务器 - 存储1亿个100kb对象

时间:2012-02-09 16:34:25

标签: caching

你会使用哪些开源软件(不是java,linux兼容)来缓存100万左右的100kb对象,这些对象有不同的到期时间(TTL)。我之前在文件中做过(可怕的),mysql(仍然不好),redis(好一点),mongodb(好的,但是......)

感谢。

1 个答案:

答案 0 :(得分:2)

10 000 000 000千字节= 9 536.74316千兆字节(如果我没错 - 请亲自检查一下!)

你说的是“缓存”,所以我假设你想要一个快速的内存缓存。

首先,你需要一个足够大的RAM来缓存这个,或者需要多台机器加起来,然后在它们之间进行分片。

然后它取决于缓存的性质。对于非常简单的键值缓存,您可以使用Memcache。如果你想要更多的操作,比如集合,排序集,对象散列等,那么Redis可能是一个非常好的选择(参见Redis的data typescommands)。但是不要忘记关闭Redis中的持久性,以使其表现得像非持久性缓存。

需要注意的是 - 如果您使用单个程序来缓存这些9 GB的数据,则需要使用64位进程。这意味着64位指针开销可能需要大量额外的千兆字节才能存储您的数据。如果将密钥分成碎片很容易,例如基于散列和模运算(例如,如果您的密钥使用此分析算法或其他分片算法自然分布良好),那么最好的方法是使用多个32位实例(即使在64位上也可以运行32位程序)机器)存储数据(在一台机器上,如果RAM足够大,或分成多台机器)。 Redis集群目前正在进行中,我确信memcached必须有工具来实现这一点。或者您可以直接在您的客户端进行分片。

另外,有一点需要注意的是,如果这个缓存数据实际上可以作为您的主要数据,那么您可能不必拥有它们的两个副本 - 一个在DB中,一个在缓存中 - 因为您可以使用持久性Redis提供的选项(仅附加日志文件和快照),您可以将Redis作为主数据库。