Лучший способ получить (миллионы строк) данных в Janusgraph через Tinkerpop, с конкретной моделью - PullRequest
0 голосов
/ 13 ноября 2018

Только что начал с Tinkerpop и Janusgraph, и я пытаюсь выяснить это на основе документации.

  • У меня есть три набора данных, каждый из которых содержит около 20 миллионов строк (CSV-файлы)
  • Существует конкретная модель, в которой необходимо связать переменные и строки, например, что такое вершины, что такое метки, что такое ребра и т. Д.
  • После того, как все в графе, яКонечно, я хотел бы использовать базовый Gremlin, чтобы увидеть, насколько хорошо работает модель.

Но сначала мне нужен способ получить данные в Janusgraph.

Возможно, существуют сценарииза это.Но в противном случае, возможно, это что-то написанное на python, чтобы открыть файл csv, получить каждую строку переменной X и добавить это как вершину / ребро / и т.д....?Или я полностью неверно истолковал Janusgraph / Tinkerpop?

Спасибо за любую помощь заранее.

РЕДАКТИРОВАТЬ:

Скажем, у меня есть несколько файлов, каждый из которых содержит несколько миллионовстроки, представляющие людей, и несколько переменных, представляющих различные метрики.Первый пример может выглядеть так: thid:

             metric_1    metric_2    metric_3    ..

person_1        a           e           i
person_2        b           f           j
person_3        c           g           k
person_4        d           h           l
..        

Должен ли я преобразовать это в файлы с узлами, которые в первую очередь состоят только из значений, [a, ..., l].(а позже, возможно, более сложные наборы свойств)

И индексируются ли [a, ..., l]?

График 'Modern' здесь , кажется, имеет индекс (число 1, ..., 12 для всех узлов и ребер, независимо от их перекрывающейся метки / категории), например, долженкаждое измерение индексируется отдельно, а затем связывается с данным person_x, к которому они относятся?

Извиняюсь за эти, вероятно, простые вопросы, но я довольно новичок в этом.

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Что ж, правда в том, что массовая загрузка реальных пользовательских данных в JanusGraph - это настоящая боль. Я использую JanuGraph с тех пор, как это была его первая версия около 2 лет назад, и до сих пор мучительно загружать данные. Во многом это не обязательно до JanusGraph, потому что разные пользователи имеют очень разные данные, разные форматы, разные модели графов (то есть некоторым, в основном, нужна одна вершина с одним ребром (например, ребенок-мать), другие имеют дело с одной вершиной со многими ребрами ( бывшие последователи пользователя)) и, наконец, что не менее важно, сама природа инструмента имеет дело с большими наборами данных, не говоря уже о том, что базовые базы данных хранения и индексирования в основном предварительно настроены на массовую репликацию (то есть вы, возможно, думаете о 20-метровых строках, но на самом деле в итоге вставляем 60м или 80м записи)

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

  • Укажите идентификаторы при создании элементов графика. Если вы импортируете, например, из MySQL, подумайте о возможности объединения имени таблицы со значением id для создания уникальных идентификаторов, например users1, tweets2
  • Не указывайте схему заранее. Это связано с тем, что JanusGraph должен обеспечить соответствие данных при каждой вставке
  • Не указывайте индекс заранее. Просто связано с выше, но на самом деле заслуживает отдельной записи. Массовая вставка первого индекса позже
  • Пожалуйста, пожалуйста, обратите внимание на базовые функции базы данных для массовых вставок и активируйте их, т. Е. Читайте на Cassandra, ScyllaDB, Big Table, документах, особенно по репликации и индексированию
  • После всего вышеперечисленного сконфигурируйте JanusGraph для массовой загрузки, убедитесь, что ваша целостность данных верна (т.е. нет дублирующихся идентификаторов), и рассмотрите некоторую форму распараллеливания запроса на вставку, например, какую-то систему сокращения карт

Я думаю, что я рассмотрел основные моменты, опять же, здесь нет серебряной пули, и процесс обычно включает в себя довольно много проб и ошибок, например, массовая скорость вставки, слишком низкая - плохо, например, 10 в секунду, а слишком высокая - одинаково плохо, например, 10 Кбит / с, и это почти всегда зависит от ваших данных, поэтому в каждом конкретном случае не могу порекомендовать, с чего начать.

Все сказано и сделано, сделайте это по-настоящему, большая часть нагрузки, на мой взгляд, самая сложная, и борьба вполне стоит того нового измерения, которое она дает вашему приложению.

Всего наилучшего!

0 голосов
/ 14 ноября 2018

JanusGraph использует подключаемых хранилищ и индексов . В целях тестирования в дистрибутив входит скрипт с именем bin/janusgraph.sh. Он позволяет быстро начать работу и запустить Cassandra и Elasticsearch (он также запускает gremlin-сервер, но мы не будем его использовать)

cd /path/to/janus
bin/janusgraph.sh start

Тогда я бы порекомендовал загрузить ваши данные с помощью скрипта Groovy. Groovy-скрипты могут выполняться с консоли Gremlin

bin/gremlin.sh -e scripts/load_data.script 

Эффективный способ загрузки данных - разделить их на два файла:

  • node.csv: одна строка на узел со всеми атрибутами
  • links.csv: одна строка на ссылку с source_id и target_id и всеми атрибутами ссылок

Это может потребовать некоторых шагов подготовки данных.

Вот пример сценария

Хитрость для ускорения процесса состоит в том, чтобы сохранить соответствие между вашим идентификатором и идентификатором, созданным JanusGraph во время создания узлов.

Даже если это не обязательно, я настоятельно рекомендую вам создать явную схему для вашего графика перед загрузкой любых данных. Вот пример сценария

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...