[Полное измерение] как создать карту JanusGraph? (подробно)

Большие данные
[Полное измерение] как создать карту JanusGraph? (подробно)

проблема

  1. Хважут HBase, как написать индекс Elasticsearch Профиль?
  2. Я создам новую таблицу в базе данных, такой как mysql, как мне создать таблицу в JanusGraph?
  3. Как писать вершины? боковая сторона? атрибутивные данные?
  4. Как я могу просмотреть данные? визуализация?

本文属于入门级的实践,如有疏漏请大佬们不吝赐教。

реальный бой

Демонстрационные данные, которые будут записаны в этой статье, выглядят следующим образом (схематическая диаграмма):

桃园三结义

(^▽^) nbsp;Не волнуйтесь о деталях, я желаю всем счастливого Праздника Середины Осени~!

Отправляться

unzip janus-xxx.zip

настроить

Внутреннее хранилище использует hbase, индекс использует es, а janusgraph-hbase-es.properties изменен (следует отметить, что текущая версия jg 0.4.0 не поддерживает интеграцию версии es 7.x, я используя es v6.5):

cd janusgraph-0.4.0-hadoop2/conf
vim janusgraph-hbase-es.properties

Ключевое содержимое конфигурационного файла (обязательно), исходная другая конфигурация по умолчанию не меняется:

#storage.hostname=这个地方要配置Hbase集群的地址
storage.hostname=hostname1,hostname2,hostname3
# ES服务的节点地址及端口 ## index.sanguo.backend=elasticsearch
index.sanguo.hostname=hostname1:9200,hostname2:9200,hostname3:9200
# 重要,照抄即可
gremlin.graph=org.janusgraph.core.JanusGraphFactory
# 对应habase中表名字,没有它会自动创建,如果指定了,则数据写入Hbase对应的表中
storage.hbase.table=sanguo
# 在ES中的索引别名
index.sanguo.index-name=sanguosha

Уведомление:хранилище.hbase.table=sanguo -> index.sanguo.index-имя Обратите внимание на согласованность жирного шрифта, пожалуйста, обратитесь к обсуждению в разделе комментариев.

Эта конфигурация прекрасна, не сложна.

Схематический анализ данных графа

Вертекс: Люди, Нации, Оружие

Сторона (отношения): брат, борьба, использование (оружие), принадлежность (стране)

Атрибуты: имя (уникальное), возраст

Командная строка Гремлин

Janusgraph Coot Directory Исполнение./bin/gremlin.sh

Создать запись

graph = JanusGraphFactory.open('/opt/janus/janusgraph-0.4.0-hadoop2/conf/janusgraph-hbase-es.properties')

Путь к файлу конфигурации записывается в папку на вашем собственном компьютере.

Создание меток вершин

mgmt = graph.openManagement();
mgmt.makeVertexLabel('person').make();
mgmt.makeVertexLabel('country').make();
mgmt.makeVertexLabel('weapon').make();
mgmt.getVertexLabels();
mgmt.commit()

Создание меток для краев

mgmt = graph.openManagement();
brother = mgmt.makeEdgeLabel("brother").make();
mgmt.makeEdgeLabel("battled").make();
mgmt.makeEdgeLabel("belongs").make();
mgmt.makeEdgeLabel("use").make();
mgmt.getRelationTypes(EdgeLabel.class);
mgmt.commit()

Создать свойства

mgmt = graph.openManagement();
name = mgmt.makePropertyKey('name').dataType(String.class).cardinality(Cardinality.SET).make();
mgmt.buildIndex('nameUnique', Vertex.class).addKey(name).unique().buildCompositeIndex();
age = mgmt.makePropertyKey("age").dataType(Integer.class).make();
mgmt.buildIndex('age2', Vertex.class).addKey(age).buildMixedIndex("sanguo");
mgmt.getGraphIndexes(Vertex.class);
mgmt.commit()

Добавить вершину

g = graph.traversal()

liubei = g.addV("person").property('name','刘备').property('age',45);
guanyu = g.addV("person").property('name','关羽').property('age',42);
zhangfei = g.addV("person").property('name','张飞').property('age',40);
lvbu = g.addV("person").property('name','吕布').property('age',38);
g.addV("country").property('name','蜀国');
g.addV("weapon").property('name','方天画戟');
g.addV("weapon").property('name','双股剑');
g.addV("weapon").property('name','青龙偃月刀');
g.addV("weapon").property('name','丈八蛇矛');

for (tx in graph.getOpenTransactions()) tx.commit();

Добавить связь

g.addE('brother').from(g.V(4112)).to(g.V(8208));
g.addE('brother').from(g.V(4112)).to(g.V(4280);
g.addE('brother').from(g.V(4280)).to(g.V(4112));
g.addE('brother').from(g.V(8208)).to(g.V(4112));
g.addE('brother').from(g.V(8208)).to(g.V(4280));
g.addE('brother').from(g.V(4280)).to(g.V(8208));

g.addE('use').from(g.V(4112)).to(g.V(4312));
g.addE('use').from(g.V(4280)).to(g.V(4320));
g.addE('use').from(g.V(8208)).to(g.V(4152));
g.addE('use').from(g.V(4264)).to(g.V(4160));

g.addE('belongs').from(g.V(4112)).to(g.V(8360));
g.addE('belongs').from(g.V(4280)).to(g.V(8360));
g.addE('belongs').from(g.V(8208)).to(g.V(8360));

g.addE('battled').from(g.V(4264)).to(g.V(4112));
g.addE('battled').from(g.V(4264)).to(g.V(4280));
g.addE('battled').from(g.V(4264)).to(g.V(8208));
g.addE('battled').from(g.V(4112)).to(g.V(4264));
g.addE('battled').from(g.V(4280)).to(g.V(4264));
g.addE('battled').from(g.V(8208)).to(g.V(4264));

for (tx in graph.getOpenTransactions()) tx.commit()

ты закончил

gremlin, чтобы увидеть количество вершин и отношений:

gremlin> g.V().count()
22:48:22 WARN  org.janusgraph.graphdb.transaction.StandardJanusGraphTx  - Query requires iterating over all vertices [()]. For better performance, use indexes
==>9
gremlin> g.E().count()
22:49:05 WARN  org.janusgraph.graphdb.transaction.StandardJanusGraphTx  - Query requires iterating over all vertices [()]. For better performance, use indexes
==>19

Show Time

Спросите брата Лю Бэя:

gremlin> g.V().has('name','刘备').next()
==>v[4112]
gremlin> g.V(4112).out('brother').values()
==>张飞
==>40
==>关羽
==>42

Найдите всех персонажей в Королевстве Шу:

gremlin> g.V().has('name','蜀国').next()
==>v[8360]
gremlin> g.V(8360).in('belongs').valueMap()
==>[name:[刘备],age:[45]]
==>[name:[张飞],age:[40]]
==>[name:[关羽],age:[42]]

визуализировать это

Используйте инструмент GraphExp для визуального отображения запросов:портал

Это уродливее, чем рендеры, нарисованные в начале

Посмотреть ИНФОРМАЦИЮ:


Эпилог

Архив: [заметки об исследовании JanusGraph] Если у вас есть какие-либо вопросы, пожалуйста, оставьте сообщение, чтобы связаться со мной. Если это поможет, пожалуйста, поставьте лайк и поддержите ~

Связанные столбцы

Начало работы с JanusGraph. Урок 1. Создание проектов IDEA

Заметки о проблемах и решениях JanusGraph - Сборник