能否将RDF存储作为文档导向数据库使用?

7
假设我有大量异构的JSON文档(即命名键值映射),以及这些文档附加到的类别层次结构(即命名集合)。我需要设置一个数据结构,使其可以:
  1. 对JSON文档进行CRUD操作。
  2. 通过ID 非常快速 检索JSON文档。
  3. 检索所有附加到某个类别的JSON文档非常快速
  4. 编辑类别层次结构:添加/删除类别,重新排列类别。
我最初想到的是将JSON文档存储在文档导向数据库(如CouchDB或MongoDB)中,并将类别层次结构存储在RDF存储中(如4store)。然后,自然解决了124,并通过在存储中维护每个类别附加文档ID列表来解决3
但是后来我发现,RDF存储实际上可以处理按ID检索JSON文档的文档导向部分。乍一看,这似乎是正确的,但我仍然担心23。是否有RDF存储能够像文档导向数据库一样快速检索文档(节点)?它将提供类似3的查询有多快?我听说过一些关于RDF存储速度慢、具有再现性问题等方面的信息。
是否有一个RDF存储也像CouchDB一样适合轻松按ID检索对象?使用文档导向和RDF存储来存储、检索和编辑类似JSON的对象之间有什么区别?

“reification problem”是什么意思? - Erik Kaplun
2个回答

5
您最初就问了关于图数据库(例如Neo4j)的问题。因此,我想添加一些说明。
  1. 图形数据库使用集成的索引来处理节点(和关系),因此可以通过外部或图形索引快速查找文档根节点。
  2. 路径(实际上是到根节点的树)的其他图形索引可以更清晰地建模,而不仅仅是键值查找。
  3. 如果将文档建模为带有属性的节点树,则可以执行任何简单和复杂的CRUD操作(包括结构性操作)。
  4. 检索“类型”或“类”的所有文档可以通过索引(将根节点索引到类型)或在图形类别节点中完成。
  5. 您可以将这些“类型或类”类别节点放入层次结构(或图形)中,然后可以使用通常的图形数据库API进行编辑。
  6. 可以使用遍历器/集成的图形查询语言(例如Neo4j的Cypher)遍历图形。
  7. 加载分层数据可以通过自定义导入程序或更通用的子图导入程序(例如GEOFF)完成。

1

在RDF数据库中,您可以使用的最接近的东西是命名图。在命名图中,您可以放置一组RDF三元组。这组三元组可以根据您的需求从一个或多个RDF文档中断言。假设您想要每个RDF文档一个命名图。您可以使用反映文件位置的URI、URL或IRI来命名图。例如...

http://yourdomain/files/rdf_file_1

或者

file:///home/myrdffiles/file1

4store是一个四元存储库。四元存储库支持命名图形,而4store专门设计用于处理此类操作。

使用4store,您可以运行以下命令来在命名图形中断言三元组:

curl -T your_file.rdf http://your_4store_database/data/http://yourdomain/files/rdf_file_1

/data/ 后面,您可以放置三元组将被断言的 GRAPH 标识符(IRI)。有关更多详细信息,请参见 4store sparql server4store Client Libs
一旦您断言了数据,使用 SPARQL,您还可以使用命名图将查询定向到该图:
SELECT * WHERE {
   GRAPH <http://youdomain/files/rdf_file_1> {
        .... some triple patterns in here ....
   }
}

此外,4store还支持JSON,因此您可以直接以JSON格式检索SPARQL结果集。
如果您决定使用4store,您可以在这里找到有价值的支持:http://4store.org/contact

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