7

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

  1. 对 JSON 文档的 CRUD 操作。
  2. 按 ID快速检索 JSON 文档。
  3. 非常快速地检索附加到某个类的所有 JSON 文档。
  4. 编辑类层次结构:添加/删除类,重新排列它们。

我最初提出了将 JSON 文档存储在面向文档的数据库(如 CouchDB 或 MongoDB)中并将类层次结构存储在 RDF 存储(如 4store)中的想法。1,2然后4自然地计算出来,并3通过维护存储中每个类的附加文档 ID 列表来解决。

但后来我发现 RDF 存储实际上可以完成按 ID 检索 JSON 文档的面向文档的部分。乍一看这似乎是正确的,但我仍然担心2and 3。是否存在能够以面向文档的数据库的服务文档的速度检索文档(节点)的 RDF 存储?3它服务于类似查询的速度有多快?我听说过一些关于 RDF 存储速度慢、具体化问题等的信息。

是否有一个 RDF 存储也可以像 CouchDB 一样方便地按 ID 随意检索对象?使用面向文档的存储和 RDF 存储来存储、检索和编辑类似 JSON 的对象有什么区别?

4

2 回答 2

5

您最初为图形数据库(如Neo4j)提出了这个问题。这就是为什么我想添加一些注释。

  1. 图形数据库对节点(和关系)使用集成索引,因此对文档根节点的快速初始查找是通过它(外部或图形索引)完成的
  2. 路径(实际上是到根的树)的图形索引中的其他索引可以被建模得更干净,这只是一个键值查找)
  3. 如果您将文档建模为具有属性的节点树,您可以执行任何简单和复杂的 CRUD 操作(也是结构化的)
  4. 检索“类型”或“类”的所有文档可以再次通过索引(要键入的索引根节点)或在图形类别节点中完成
  5. 您可以将这些“类型或类”类别节点放入层次结构(或图形)中,然后可以使用通常的图形数据库 API 进行编辑
  6. 可以使用遍历器/集成图查询语言(例如Neo4j 的 cypher)来完成图的遍历
  7. 加载分层数据可以由自定义导入器或更通用的子图导入器(例如GEOFF)完成
于 2011-12-01T08:49:11.833 回答
1

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

http://yourdomain/files/rdf_file_1

或者

file:///home/myrdffiles/file1

4store 是一家四合院。Quad store 支持命名图,4store 是专门为处理这个问题而设计的。

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

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

/data/您可以将 GRAPH 标识符 (IRI) 放置在要声明三元组的位置之后。有关详细信息,请参阅4store sparql 服务器4store 客户端库

断言数据后,您还可以使用 SPARQL 使用命名图将查询定向到该图:

SELECT * WHERE {
   GRAPH <http://youdomain/files/rdf_file_1> {
        .... some triple patterns in here ....
   }
}

此外,4store 还支持 JSON,因此您可以直接在 JSON 中检索 SPARQL 结果集。

如果您决定使用 4store,您会在这里找到宝贵的支持:http: //4store.org/contact

于 2011-11-30T23:11:03.427 回答