Мои поиски в Интернете не дали ничего полезного, и, возможно, никто еще не сделал этого. Хотя я немного обрабатывал дампы freebase и работал с rdf и arangodb, мой опыт все еще очень ограничен, и я хотел бы услышать мнения/предложения/опыт по этой теме.
Несколько вещей, о которых мне интересно:
- Кто-нибудь когда-нибудь импортировал дамп Freebase в ArangoDb?
- Есть ли инструмент, который поможет это сделать?
- Какова будет стратегия, чтобы сделать это вручную?
- А может быть, это просто плохая идея и не стоит этого делать?
Вот некоторые из проблем, которые я ожидаю:
- Нет гарантии заказа в данных rdf (афаик). Скажем, меня интересует определенный человек, и некоторая информация, на которую ссылается экземпляр /people/person, появляется в дампе до фактического человека, тогда мне нужно пройти через дамп второй раз, чтобы найти эту ссылочную информацию.
- Что касается хранения данных, можно создать коллекцию для каждого типа и добавить между ними ссылки или сохранить все свойства в интересующем типе верхнего уровня (согласно схеме /people/person включает /common/topic - с точки зрения объектно-ориентированного программирования freebase выполняет множественное наследование, которое может не поддерживаться выбранным языком (java) )
- Вероятно, придется пройтись по дампу как минимум дважды, один раз для сбора и сохранения сущностей и их свойств, а другой раз для добавления ребер графа между ними)
Обновить
В настоящее время я прохожу дамп несколько раз. Шаги примерно такие:
- Разделите 28 ГБ gzip (250 ГБ без сжатия) на более мелкие файлы gzip по 5 миллионов строк, в результате получится около 550 файлов.
- Просмотрите каждый из файлов, найдите тройки, которые объявляют определенный тип, и сохраните темы (пространство имен freebase + mid) в одном файле для каждого интересующего меня типа.
- (a) Пройтись по каждому из файлов еще раз, так как теперь я знаю средние значения, я могу собрать полные объекты. Они максимально хранятся в памяти, но сохраняются на диске, по одному файлу json на объект (мы не можем быть уверены, завершен ли объект, пока весь дамп не будет обработан)
- Просмотрите все файлы на диске и загрузите их в arangodb.
Это работает, но медленно, и мне кажется неэффективным много раз проходить дамп. И будет больше проходов через дамп, во время/после (а) мы обнаруживаем еще много сущностей, связанных с интересующими меня основными сущностями.
И делать миллионы запросов к API бесплатной базы тоже не намного лучше.
Итак, это немного предыстории того, почему меня интересует эта тема, и если бы для этого было готовое решение, было бы неплохо.