是否可以将RDF存储也用作面向文档的数据库?

时间:2011-11-30 20:40:13

标签: database nosql rdf semantic-web document-oriented-db

假设我有大量的异构JSON文档(即命名的键值映射)和这些文档附加到的类的层次结构(即命名集)。我需要设置一个允许的数据结构:

  1. 对JSON文档的CRUD操作。
  2. 非常快速地按ID 检索JSON文档
  3. 快速检索附加到某个类的所有JSON文档
  4. 编辑类层次结构:添加/删除类,重新排列它们。
  5. 我最初提出了将JSON文档存储在面向文档的数据库(如CouchDB或MongoDB)中并将类层次结构存储在RDF存储(如4store)中的想法。然后,124会自然地得到解决,3通过维护存储中每个类的附加文档ID列表来解决。

    但后来我认为RDF存储实际上可以通过ID检索JSON文档的文档导向部分。乍一看这似乎是对的,但我仍然关注23。是否有一个RDF存储能够以速度面向文档的db的服务文档检索文档(节点)?它的速度有多快3 - 像查询一样?我听说过RDF存储缓慢,具体化问题等等。

    是否有一个RDF存储对于通过ID进行临时检索对象也很舒服,例如CouchDB?使用面向文档和RDF存储来存储,检索和编辑类似JSON的对象有什么区别?

2 个答案:

答案 0 :(得分:5)

您最初是为图形数据库(例如Neo4j)提出此问题。这就是为什么我想添加一些笔记。

  1. 图形数据库对节点(和关系)使用集成的indexing,因此文档的根节点的快速初始查找是通过它(外部或图形索引)完成的。
  2. 路径的图表索引中的附加功能(实际上是树的根目录)可以建模为更干净,只是键值查找)
  3. 如果您将文档建模为具有属性的节点树,则可以执行任何简单且复杂的CRUD操作(也是结构化的)
  4. 检索“类型”或“类”的所有文档可以再次通过索引(要键入的索引根节点)或图表类别节点来完成
  5. 您可以将这些“类型或类”类别节点放入层次结构(或图形)中,然后可以使用通常的图形数据库API进行编辑
  6. 可以使用traversers /集成图形查询语言(例如cypher for Neo4j
  7. 来遍历图表
  8. 加载分层数据可以由自定义导入程序或更通用的子图导入程序(例如GEOFF
  9. 完成

答案 1 :(得分:1)

您可以在RDF数据库中使用的最接近的内容是命名图。在命名图中,您可以放置​​一组RDF三元组。可以根据您的需要从一个或多个RDF文档中声明这组三元组。假设您希望每个RDF文档都有一个命名图。您可以使用反映文件位置URL或IRI的URI命名图形。例如......

http://yourdomain/files/rdf_file_1

file:///home/myrdffiles/file1

4store是一家四元店。 Quad商店支持命名图表,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

相关问题