Можно ли использовать RDF-хранилище также в качестве базы данных, ориентированной на документ?
-
26-10-2019 - |
Вопрос
Предположим, что у меня есть большой обзор гетерогенных документов JSON (то есть названные сопоставления клавиш) и иерархия классов (то есть названные наборы), к которым прикреплены эти документы. Мне нужно настроить структуру данных, которая позволит:
- CRUD Operations в документах JSON.
- Получение документов JSON по ID Очень быстро.
- Получение всех документов JSON, которые привязаны к определенному классу Очень быстро.
- Редактирование иерархии классов: добавление/удаление классов, перестройка их.
Первоначально я придумал идею хранения документов 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) Вот почему я хотел бы добавить несколько заметок.
- Графические базы данных используют интегрированные индексация Для узлов (и отношений), поэтому быстрый начальный поиск корневых узлов ваших документов выполняется через это (внешние или в графических индексах)
- Дополнительные в графических индексах для путей (на самом деле деревья к корню) можно смоделировать очиститель, который просто поиск ключей)
- Если вы смоделируете свои документы как деревья узлов со свойствами, вы можете выполнить любые простые и сложные операции CRUD (также структурные)
- Получение всех документов «типа» или «класса» снова можно сделать с помощью индекса (индексные корневые узлы для типа) или в узлах категории графиков
- Вы можете поместить эти типы или классовые категории, в иерархию (или график), которые затем можно отредактировать с помощью обычного API базы данных графиков
- пересечение графика можно сделать с помощью проходы / Интегрированный язык запросов графика (например, Cypher for neo4j)
- Загрузка иерархических данных можно сделать либо пользовательскими импортерами, либо более общим импортером подсглажения (например, Джефф)