将图像二进制文件存储在三重存储中,而不是仅存储URL引用

时间:2013-02-05 20:39:56

标签: image triplestore

我有三百万个实体资源存储在一个三重存储中,其中一个(sparql)查询可能返回数百(或数千)个(结果将进一步调整,例如,枢轴查看器,其中实体的缩略图应该显示)。

现在,关于这个主题的大多数答案都建议将图像存储在三重商店之外,在三重商店内部(例如,foaf:Image)指向资源图像的uri引用。

如果我将它们存储在三重存储中,我想我会通过一个sparql查询到后端存储(获取实体及其缩略图)来获得更好的性能。

另一方面,如果图像存储在三重存储之外,我将不得不进行许多查询来获取图像。

处理此类案件的最佳做法是什么? (可以应用于实体资源的其他二进制数据属性)。

1 个答案:

答案 0 :(得分:2)

在这种情况下,最好的选择是分别存储图像。大多数三重存储都没有优化的blob存储,您可能会通过在数据库中包含二进制数据来降低所有查询的性能。

您仍然可以在单个查询中获取某些请求的所有图像 - 可能取决于我猜的请求,但 可能。我建议的是,您对图像的URL引用是由Apache之类的东西提供的。通过这种方式,您可以直接向客户端提供URL,并且可以以最佳方式获取它们;想到这就像浏览器获取使用图像的网页一样,图像不是HTML的一部分,而是单独获取它们。

如果需要,您可以通过拆分请求并将图像元数据放在triplestore中,同时将图像的实际位放在Apache托管目录中来处理图像上传。

这也允许您设置缓存和其他标准HTTP级别基础架构,以便尽可能快速,轻松地提供图像,我认为最终会为您提供最佳性能。