【发布时间】:2011-11-18 13:50:20
【问题描述】:
我们有一个系统可以存储(个位数)数百万张图像,大小从 8KB 到 500KB 不等,中位数约为 15KB,平均为 30KB。总数据集目前约为 100GB。我们希望根据图像的哈希值访问图像(这个
目前我们将它们全部存储为一个目录中的文件——目录列表被内核缓存,实际的文件读取是根据需要完成的。据我了解,键值存储(与使用文件系统相比)的主要优点是读取较小的值,因为可以缓存整个页面,而不仅仅是单个值。当前所有访问都来自与数据位于同一服务器上的 Web 服务器(在 Intranet 上),尽管我们可能会检查是否存在来自远程机器的密钥(主要通过 10GbE 连接)。
没有任何特别的理由来改变它,尽管随着系统的其他主要部分发生变化,重新考虑当前的方法似乎是值得的。
给定一个工作负载,其读取主要是(单次)按插入顺序读取和随机(尽管很可能重复)访问任意键,此外还有频繁的写入(大约 1:10 的写入:读取),从文件系统迁移到键值存储可能有很多优势吗?
【问题讨论】:
-
这取决于您当前的系统。如果它是单片的(单台机器服务来自单个存储位置的请求),您可能会看到通过添加多个节点并将数据副本存储在更靠近使用它的客户端的好处。要确定答案,您必须详细说明当前系统的组成以及需要补救的当前瓶颈。
-
2KB 文件与 10MB 文件完全不同。元数据开销/目录开销。从磁盘读取 2KB 文件更容易限制元数据和限制搜索,而 10 MB 文件主要时间是实际流式传输。你能多说一下文件大小分布吗?小文件是标准文件还是中文件?
-
查看 Microsoft Sharepoint 以了解此类工作,它可能会满足您的需求。在这种情况下,没有必要重新发明轮子
标签: image storage key-value key-value-store