3

考虑到拥有庞大且活跃的用户群的情况,每个用户都希望存储个人资料图片和一些额外的图像或其他工件,是否有任何库或框架可以轻松存储和查询此类数据?

一个参考实现是 Facebook 的Haystack Photo Infrastructure

以下特征很重要

  • 数据存储应该可以很好地扩展:添加资源应该对使用存储的应用程序是透明的(类似的问题有一个参考LinkedIn 的 Voldemort的答案)。
  • 能够在存储的数据旁边添加一些元数据。
  • 元数据可以以良好的性能进行查询(例如存储在可配置的索引中,如 Lucene/Solr)。
  • 基于密钥的快速访问和一些中间缓存层

欢迎任何关于可以轻松集成到 Java Web 应用程序中的库或框架的建议。

更新:感谢您的前几个答案。我必须更详细地了解预期的答案类型。东武的回答,虽然不是java相关的很好(刚刚投了赞成票)。可以通过文件系统访问和数据库的组合来实现解决方案,并在两者之间添加一些缓存层,但我认为这是浪费时间,如果比我更有资格的人已经设计、实现并运行了更好的解决方案。基于具有底层 DB 或 JCR 实现的解决方案的东西非常适合,但实现其他基础设施不是我想要做的。

4

5 回答 5

2

MogileFS是 LiveJournal 使用的。虽然不是特别Java。

于 2010-01-27T17:07:36.540 回答
1

我们在 Fedora Commons ( http://www.fedora-commons.org/ ) 的媒体存储库方面取得了很好的经验,它允许您将媒体资产与其关联的元数据一起存储。我们在可扩展性或定制方面没有任何问题,也没有难以将底层存储层与三重存储交换(如果您的情况需要的话)。如果您需要使用 Solr 索引您的数据,您可以使用预定义的元数据字段(“RELS-EXT”)来存储基于 XML 的数据。

于 2010-02-01T09:31:08.307 回答
0

我觉得您的要求非常接近数据库提供的要求。只需确保表格设计符合您的需求(例如,您可以将大数据(例如图像)与元数据放在单独的表格中)。

将涵盖您的所有需求,包括数据库中的缓存层(并且您可以根据需要在应用程序中添加一个额外的缓存层,这可能也用于您的应用程序的其余部分)。

于 2010-01-27T17:22:30.640 回答
0

Apache Jackrabbit是完全符合 Java 技术 API 内容存储库(JCR,在 JSR 170 和 283 中指定)的实现。但它有一些性能问题(至少在我使用的 2 年旧版本中),克服它们的最佳方法是将静态图像复制到网络服务器。(使用 WebDAV、davfs 和 rsync)

于 2010-01-27T17:22:35.203 回答
0

取决于量化“庞大而活跃的用户群”……

80% 的网站可以简单地使用 NoSQL 无模式方法,例如 y_serial:

y_serial.py 模块 :: 使用 SQLite 存储 Python 对象

“序列化 + 持久性 :: 在几行代码中,将 Python 对象压缩和注释为 SQLite;然后在没有任何 SQL 的情况下通过关键字按时间顺序检索它们。数据库存储无模式数据的最有用的“标准”模块。”

http://yserial.sourceforge.net

如果每个用户的照片和工件压缩在 2M 以下,则性能应该不错。

对于剩下的 20% 案例使用,可以轻松地将数据从 yserial 导入 Cassandra——现在 Facebook、Digg 和 Twitter 都采用了这种方式。

于 2010-03-03T16:51:49.543 回答