Можно ли использовать хранилище RDF также в качестве документно-ориентированной базы данных? - PullRequest
7 голосов
/ 01 декабря 2011

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

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

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

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

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

Ответы [ 2 ]

5 голосов
/ 01 декабря 2011

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

  1. В базах данных графиков используется интегрированное индексирование для узлов (и связей), поэтому быстрый начальный поиск корневых узлов ваших документов выполняется с помощью этого (внешний или в виде графиков)
  2. Дополнительные в графе индексы для путей (фактически деревьев к корню) можно смоделировать с помощью простого поиска значения ключа)
  3. Если вы моделируете свои документы как деревья узлов со свойствами, вы можете выполнять любые простые и сложные операции CRUD (также структурные)
  4. извлечение всех документов типа или класса может быть снова выполнено с помощью индекса (корневые узлы индекса для ввода) или в узлах категории графа
  5. вы можете поместить эти узлы категорий "типы или классы" в иерархию (или граф), которую затем можно редактировать с использованием обычного API базы данных графов
  6. обход графа может быть выполнен с использованием traversers / встроенного языка запросов графа (например, cypher для Neo4j )
  7. Загрузка иерархических данных может выполняться как пользовательскими импортерами, так и более общими импортерами подграфа (например, GEOFF )
1 голос
/ 01 декабря 2011

Самое близкое, что вы можете использовать в базах данных 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 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

...