RDF / 三元组存储适合存储应用数据吗?(与图形元数据相反)

3
我正在尝试创建一个小型网络应用,用于 "个人信息管理器" 或维基百科类似的工具。我可以以 HTML 片段(或 Markdown)形式记录笔记,并使用https://schema.org/ 微数据进行注释并将片段和元数据存储在某处以供查询。
据我理解,大多数语义数据存储(三元组 / 四元组存储库或支持 RDF 的数据库)更适合存储和查询主要的元数据。因此,我可能还需要一些传统的存储(关系型、文档存储、键值存储或甚至是非-RDF图形数据库),其中可以存储每个笔记的完整文本以及其他一些内容,例如上次访问时间用户ID等,并且进行传统(非语义)全文检索。
我开始寻找可以在单个位置存储数据元数据的存储方式。我发现了一些,例如Ontotext GraphDB、Stardog、MarkLogic等等。它们似乎都能够满足我的需求,但是它们的免费许可条款非常限制,这使我不愿意深入研究它们:我更喜欢研究可以用于真实产品的开放技术。
在深入研究之前,我想知道:
  1. 如果我的假设是正确的:我需要使用一个存储器来存储数据,另一个存储器来存储元数据。
  2. 有没有免费/开源软件方案,推荐有 RDF / Sparql 经验的开发人员给出,满足我所描述的问题。
目前,我倾向于使用Apache Jena作为RDF存储和SPARQL查询,并使用其他独立的工具(最可能是PostgreSQL)处理其余的数据。

你为什么认为需要两个“存储库”?我的意思是,把所有数据放入单个RDF三元组存储库有什么问题吗?顺便说一句,例如Apache Jena支持全文搜索(基于Lucene或ElasticSearch),许多其他常用的三元组存储库也具有此功能。 - UninformedUser
假设我为三部曲的名称添加一个注释,就像这个例子2所示:https://schema.org/Book 首先,我需要把整个HTML字符串存储在某个地方(我看到有些人将一些东西Base64存储在RDF存储中,但似乎存在一些阻抗不匹配)。稍后,我可能希望存储我最近读过的哪本书的最后一章节……但这些信息似乎不适合存储在RDF存储中……例如,这看起来很奇怪:<书>->最后阅读->日期。 - Emmanuel Oga
1
我认为你想太多了。三元组存储库会为您处理“存储整个[HTTP,而不是HTML]字符串”的问题(假设我正确理解了您的意思)。如果您真的担心SQL风格,RDF风格和其他数据存储之间的阻抗,您可以选择一个同时处理两者的混合型(并使两种类型的数据都可用于两种类型的查询),例如 Virtuoso(来自我的雇主),无论是开源版还是企业版 - TallTed
1
RDF存储器非常适合稀疏或架构最后的数据,例如您突然想要跟踪某些书籍中您读过的最后一章以及何时读的情况。SQL存储器通常最适用于完全填充或架构优先的数据,例如联系地址、销售记录等,并且已经进行了非常好的优化。 - TallTed
现在重新审视这个问题,我发现存储纯文本通常是可以的(例如HTML文档的源代码或任何基于文本的文档,最多几十千字节),但在许多三元组存储实现中,存储二进制数据并不理想,大多数三元组存储需要使用base64编码,以便数据保持为纯文本。太大的对象(在S;P;O意义上)可能会干扰索引,因此最好将ID存储到像S3这样的blobstore中以存储二进制内容。我的经验法则是对于大多数纯文本使用三元组存储,对于其他所有内容使用k/v存储。 - Emmanuel Oga
1个回答

1
在深入探讨之前,我想知道:
如果我的假设是正确的:我需要使用一个存储库来存储数据,另一个存储库来存储元数据。
不一定,尽管在某些情况下这种区分可能很有用。但是大多数RDF数据库都为数据和元数据提供可扩展的存储。唯一的要求是您的(元)数据表示为RDF。如果您担心诸如文本查询之类的性能问题,它们中的大多数都通过Lucene、Solr或Elasticsearch提供全文索引支持。
如果有任何涉及自由/开源软件的设置,可以推荐具有RDF/Sparql经验的开发人员,鉴于我所描述的问题。
这真的不是问这个问题的正确地方。工具推荐被认为是StackOverflow上的离题问题,因为它们会吸引有偏见的答案。但是正如所说,有很多工具,包括开源/免费和商业工具,您可以研究。我建议您选择一个您喜欢的工具,进行一些实验,并与该特定工具的社区交流,以解释您正在尝试做什么。Apache Jena和Eclipse Rdf4j是两个流行的开源项目,但还有很多其他工具。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接