3

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

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

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

另一方面,对于存储在三重存储之外的图像,我将不得不执行许多查询来获取图像。

处理这种情况的最佳做法是什么?(可能适用于实体资源的其他二进制数据属性)。

4

1 回答 1

3

在这种情况下,最好的办法是单独存储图像。大多数三元存储没有优化的 Blob 存储,您可能会通过在数据库中包含二进制数据来降低所有查询的性能。

您仍然可以在单个查询中获取某个请求的所有图像——可能取决于我猜的请求,但这可能的。我的建议是,您对图像的 URL 引用由 Apache 之类的东西提供。这样你就可以直接向客户提供 URL,他们可以以任何最好的方式获取它们;把这想象成一个浏览器获取一个使用图像的网页,图像不是 HTML 的一部分,它单独获取它们。

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

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

于 2013-02-06T13:26:31.517 回答