10

我想在一组机器之间共享一个非常大的对象,例如以兆字节甚至几千兆字节的顺序。该对象将被写入一次,但可能会被多次读取。也许一种天真的方法是使用像redis这样的集中式存储。但是,它可能会成为单点故障,过多的请求可能会对 redis 造成 DOS 攻击。然后,分布式解决方案更有希望。但是,主要问题是将结构复制到所有机器上。如果复制是通过主/从技术完成的,那么复制可能会导致主服务器上的流量负载很大,因为对象很大。因此,更好的解决方案是使用 P2P 策略来复制对象,以减少主服务器上的网络负载。

有没有人知道这个问题的解决方案?也许一些候选人是:
- Redis
- Memcached
- Voldemort
- Hazelcast

我主要关心的是 Java 接口、共享大对象、高可用性和低网络流量进行复制。

预先感谢。

4

1 回答 1

15

在 NoSQL 存储中缓存大对象通常不是一个好主意,因为它在内存和网络带宽方面很昂贵。我不认为 N​​oSQL 解决方案在存储大型对象方面表现出色。Redis、memcached 和大多数其他键/值存储显然不是为此而设计的。

如果要在 NoSQL 产品中存储大对象,则需要将它们切成小块,并将这些块作为独立对象存储。这是 10gen 为 gridfs 保留的方法(这是标准 MongoDB 发行版的一部分):

http://docs.mongodb.org/manual/applications/gridfs/

要存储大型对象,我宁愿查看分布式文件系统,例如:

这些系统是可扩展的、高度可用的,并提供文件和对象接口(您可能需要一个对象接口)。您还可以参考以下 SO 问题来选择分布式文件系统。

商品 Linux 存储场的最佳分布式文件系统

由您在这些可扩展的存储解决方案之上实施缓存。

于 2013-01-28T18:14:48.730 回答