Вставка базы данных Wikipedia Graph - PullRequest
0 голосов
/ 21 января 2011

Я пытаюсь создать базу данных из dbpedia RDF втрое.У меня есть таблица Categories, которая содержит все категории в Википедии.Для хранения категорий я создал таблицу с полями child и parent, оба внешних ключа к таблице Categories.Чтобы загрузить категории из NTriples iam, используя следующий SQL-запрос

INSERT INTO CatToCat (`child`, `parent`)
values((SELECT id FROM Categories WHERE BINARY identifier='Bar'),
       (SELECT id FROM Categories WHERE BINARY identifier='Bar'));

Но вставка идет очень медленно ... вставка 2,5-миллионных отношений займет очень много времени ... Есть ли лучший способ оптимизации запроса, схема?

Ответы [ 3 ]

2 голосов
/ 21 января 2011

вы можете попробовать Графическую базу данных, такую ​​как Neo4j, с слоями RDF сверху, например, есть реализация Tinkerpop SAIL, см. https://github.com/tinkerpop/blueprints/wiki/Sail-Implementation

Это должно работать немного лучше, чем RDBMS, по крайней мере, для Neo4j.

/ питер

1 голос
/ 22 января 2011

Я решил проблему.Были некоторые проблемы с индексацией.Сделан идентификатор в категориях уникальный и двоичный.Я думаю, это ускорило два выбора.

1 голос
/ 21 января 2011
  1. Рассмотрите возможность загрузки SELECT id, indentifier from Categories в хеш-таблицу (или trie) на стороне клиента и использования ее для заполнения CatToCat.В базе данных размером с википедию я ожидал бы увидеть огромную разницу в производительности между поисками хеш-кода с постоянным временем и поиском с использованием trie (которые являются постоянными по отношению к количеству различных элементов данных) и поисками B-Tree log n.(Конечно, вам необходимо иметь доступную память.)

  2. Рассмотрите возможность использования одного PreparedStatement с привязкой параметров, чтобы MySQL не приходилось повторно анализировать и повторно оптимизироватьзапрос для каждой вставки.

Вы должны будете сравнить их, чтобы выяснить, насколько они на самом деле улучшены.

...