Можно ли использовать RDF-хранилище также в качестве базы данных, ориентированной на документ?

StackOverflow https://stackoverflow.com/questions/8332647

Вопрос

Предположим, что у меня есть большой обзор гетерогенных документов JSON (то есть названные сопоставления клавиш) и иерархия классов (то есть названные наборы), к которым прикреплены эти документы. Мне нужно настроить структуру данных, которая позволит:

  1. CRUD Operations в документах JSON.
  2. Получение документов JSON по ID Очень быстро.
  3. Получение всех документов JSON, которые привязаны к определенному классу Очень быстро.
  4. Редактирование иерархии классов: добавление/удаление классов, перестройка их.

Первоначально я придумал идею хранения документов JSON в базе данных, ориентированной на документ (например, CouchDB или MongoDB) и хранения классовой иерархии в хранилище RDF (например, 4Store). 1, 2 а также 4 затем выясняются естественным образом, и 3 Решено путем поддержания списка прикрепленных идентификаторов документов для каждого класса в хранилище.

Но потом я подумал, что хранилище RDF может фактически выполнить ориентированную на документ часть получения документов JSON по ID. На первый взгляд это кажется правдой, но я все еще обеспокоен 2 а также 3. Анкет Существует ли хранилище RDF, которое способно получать документы (узлы) в документах DB, ориентированных на скорость DB? Как быстро это будет служить 3-Поподобные запросы? Я немного слышал о том, что Стороры RDF были медленными, проблемой повторения и т. Д.

Есть ли хранилище RDF, которое также так же удобно для повседневного извлечения объектов по ID, например, CouchDB? В чем разница между использованием документов, ориентированных и хранилища RDF для хранения, получения и редактирования объектов, подобных JSON?

Это было полезно?

Решение

Самая близкая вещь, которую вы можете использовать в базах данных RDF, называются графиками. В именованном графике вы можете поместить набор тройков RDF. Этот набор тройков может быть утвержден из одного или многих документов RDF в зависимости от ваших потребностей. Допустим, вы хотите один из названных графиков на документ RDF. Вы можете назвать график с помощью URI, который отражает местоположение файла A URL или IRI. Например ...

http://yourdomain/files/rdf_file_1

или же

file:///home/myrdffiles/file1

4Store - это Quad Store. Quad Stores Support Support с именем Graphs, а 4Store - это специально дизайн для справки.

С 4STORE вы можете запустить следующую команду, чтобы утверждать тройки на именованном графике:

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

После /data/ Вы можете поместить идентификатор графика (IRI), где будут утверждены тройки. Видеть 4STORE SPARQL SERVER а также 4Store Client Libs Больше подробностей.

После того, как вы получите ваши данные, с Sparql вы также можете использовать именованный график, чтобы направить ваш запрос на этот график:

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

Кроме того, 4Store также поддерживает JSON, так что вы можете получить результаты Sparql непосредственно в JSON.

Если вы решите использовать 4Store, вы найдете здесь ценную поддержку: http://4store.org/contact

Другие советы

Вы первоначально задавали этот вопрос для графических баз данных (например, Neo4j) Вот почему я хотел бы добавить несколько заметок.

  1. Графические базы данных используют интегрированные индексация Для узлов (и отношений), поэтому быстрый начальный поиск корневых узлов ваших документов выполняется через это (внешние или в графических индексах)
  2. Дополнительные в графических индексах для путей (на самом деле деревья к корню) можно смоделировать очиститель, который просто поиск ключей)
  3. Если вы смоделируете свои документы как деревья узлов со свойствами, вы можете выполнить любые простые и сложные операции CRUD (также структурные)
  4. Получение всех документов «типа» или «класса» снова можно сделать с помощью индекса (индексные корневые узлы для типа) или в узлах категории графиков
  5. Вы можете поместить эти типы или классовые категории, в иерархию (или график), которые затем можно отредактировать с помощью обычного API базы данных графиков
  6. пересечение графика можно сделать с помощью проходы / Интегрированный язык запросов графика (например, Cypher for neo4j)
  7. Загрузка иерархических данных можно сделать либо пользовательскими импортерами, либо более общим импортером подсглажения (например, Джефф)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top