JanusGraph — это графическая база данных. Прежде всего, давайте посмотрим, что такое Graph Database.

База данных графов:

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

Краткое описание:

Базы данных Graph основаны на теории графов и используют узлы, ребра и свойства.

  • Узлы представляют такие объекты, как люди, компании, учетные записи или любые другие элементы, которые необходимо отслеживать. Они примерно аналогичны записи, отношению или строке в реляционной базе данных или документу в базе данных документов.
  • Ребра, также называемые графами или отношениями, — это линии, соединяющие узлы с другими узлами; они представляют отношения между ними. При изучении соединений и взаимосвязей узлов, свойств и ребер возникают значимые закономерности. Ребра являются основной концепцией графовых баз данных, представляющей собой абстракцию, которая напрямую не реализована в других системах.
  • Свойства – это важная информация, относящаяся к узлам. Например, если бы BluePi был одним из узлов, он мог бы быть привязан к таким свойствам, как веб-сайт, справочный материал или слово, начинающееся с буквы b, в зависимости от того, какие аспекты BluePi относятся к данной базе данных.

Одно из преимуществ графовой базы данных по сравнению с реляционной базой данных

Реляционная модель собирает данные вместе, используя информацию в данных. Например, можно найти всех «пользователей», чей номер телефона содержит код города «311». Это можно сделать путем поиска в выбранных хранилищах данных или таблиц, поиска в выбранных полях телефонных номеров строки «311». Это трудоемкий процесс в больших таблицах, поэтому реляционные базы данных предлагают концепцию индекса базы данных, которая позволяет хранить подобные данные в меньшей подтаблице, содержащей только выбранные данные и уникальный ключ записи, в которой она находится. часть. Если телефонные номера проиндексированы, тот же самый поиск будет выполняться в меньшей индексной таблице, собирая ключи совпадающих записей, а затем просматривая в основной таблице данных записи с этими ключами. Как правило, таблицы физически хранятся, чтобы поиск по этим ключам был быстрым.

Напротив, графовые базы данных напрямую хранят отношения между записями. Вместо того, чтобы найти адрес электронной почты, просматривая ключ пользователя в столбце userpk, запись пользователя имеет указатель непосредственно на запись адреса электронной почты. То есть после выбора пользователя по указателю можно перейти непосредственно к записям электронной почты, нет необходимости выполнять поиск в таблице электронной почты, чтобы найти совпадающие записи. Это может исключить дорогостоящие операции соединения. Например, если кто-то ищет все адреса электронной почты для пользователей с кодом города «311», система сначала выполнит обычный поиск, чтобы найти пользователей в «311», а затем извлечет адреса электронной почты, перейдя по ссылкам, найденным в эти записи. Реляционная база данных сначала найдет всех пользователей в «311», извлечет список pk, выполнит еще один поиск любых записей в таблице электронной почты с этими pk и свяжет совпадающие записи вместе. Для такого рода общих операций графовая база данных работает значительно быстрее.

Список графовых баз данных

Ниже приведен список основных графовых баз данных:

AllegroGraph, ArangoDB, Blazegraph, Cayley, Dgraph, DataStax Enterprise Graph, Sparksee, GraphBase, gStore, InfiniteGraph, JanusGraph, MarkLogic, Neo4j, OpenLink Virtuoso, Oracle Spatial and Graph, OrientDB, SAP HANA, Sqrrl Enterprise, Teradata Aster, Microsoft SQL Server 2017.

Преимущества JanusGraph

1. Поддержка очень больших графиков. Графики JanusGraph масштабируются в зависимости от количества машин в кластере.2. Поддержка очень большого количества одновременных транзакций и оперативной обработки графов. Транзакционная емкость JanusGraph масштабируется с количеством машин в кластере и отвечает на сложные запросы обхода на огромных графах за миллисекунды.3. Поддержка глобальной аналитики графов и пакетной обработки графов с помощью платформы Hadoop.4. Поддержка гео, числового диапазона и полнотекстового поиска вершин и ребер на очень больших графах.5. Встроенная поддержка популярной модели данных графа свойств, предоставляемой TinkerPop.6. Встроенная поддержка Gremlin, языка обхода графа.7. Простая интеграция с графовым сервером Gremlin для подключения к языку программирования.8. Многочисленные конфигурации графического уровня предоставляют ручки для настройки производительности.9. Индексы, ориентированные на вершины, обеспечивают запросы на уровне вершин, чтобы облегчить проблемы с печально известной проблемой суперузлов.10. Обеспечивает оптимизированное представление диска для эффективного использования хранилища и скорости доступа.11. Открытый исходный код под либеральной лицензией Apache 2.

Преимущества JanusGraph с Cassandra

1. Постоянная доступность без единой точки отказа.2. Нет узких мест при чтении/записи на графике, поскольку отсутствует архитектура master/slave.3. Эластичная масштабируемость позволяет вводить и удалять машины.4. Уровень кэширования гарантирует, что данные, к которым постоянно обращаются, доступны в памяти.5. Увеличьте размер кеша, добавив в кластер больше компьютеров.6. Интеграция с Hadoop.7. Открытый исходный код под либеральной лицензией Apache 2.

Использование JanusGraph и реляционной базы данных

Реляционная база данных основана на реляционной модели данных. Все реляционные базы данных используют SQL (язык структурированных запросов) для запросов и обслуживания базы данных.

Эта модель организует данные в одну или несколько таблиц столбцов и строк с уникальным ключом, идентифицирующим каждую строку. Строки также называются записями/кортежами. Столбцы также известны как атрибуты. Как правило, каждая таблица/связь представляет один «тип объекта» (например, пользователя или элемент). Строки представляют экземпляры объекта этого типа (например, «Джон» или «Мобильный»), а столбцы представляют значения, связанные с этим экземпляром (например, «адрес» или «цена»).

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

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

Теперь давайте посмотрим, как настроить JanusGraph с помощью Cassandra.

Предпосылки:

Начало работы с JanusGraph

Шаг 1: Загрузите JanusGraph с https://github.com/JanusGraph/janusgraph/releases. Шаг 2: Разархивируйте загруженный zip-файл.

Шаг 3: Настройте JanusGraph для использования cassandra для хранения данных

  • Откройте файл /conf/janusgraph-cassandra.properties.
  • Установите указанные ниже значения и сохраните файл.
storage.backend=cassandrathrift storage.username=[cassandra username] storage.password=[cassandra password] storage.cassandra.keyspace=[keyspace name, default is janusgraph] storage.hostname=[machine’s ip where cassandra is running]

Шаг 4: Теперь запустите файл gremlin.sh в папке bin. Если все пойдет правильно, должна появиться консоль Gremlin. Шаг 5: Загрузите janusgraph с файлом свойств, который был сохранен ранее, выполнив приведенную ниже команду.

graph=JanusGraphFactory.open('conf/janusgraph-cassandra.properties');

Теперь янусграф создан.

Создание вершины

mgmt = graph.openManagement(); person = mgmt.makeVertexLabel('person').make(); mgmt.commit() // Create a labeled vertex v = graph.addVertex(label, 'person'); // Create an unlabeled vertex v = graph.addVertex(); graph.tx().commit();

Создание помеченной вершины со свойством

person = graph.addVertex(label, 'person'); person.property(‘personId’, 1); graph.tx().commit();

Создание маркированного ребра

mgmt.makeEdgeLabel('edgeLable').make();

Создание ребра между двумя вершинами

//First create 2 vertices user1=graph.addVertex('person'); user2=graph.addVertex('person'); // adding edge user1.addEdge('edgeLable', user2);

Чтобы отобразить все вершины

graph.traversal().V(); //to display personIds graph.traversal().V().values("personId");

Чтобы отобразить все ребра

graph.traversal().E();

Теперь давайте посмотрим, как загрузить граф и создать вершины, ребра из java

Ниже метод java иллюстрирует, как загрузить граф и создать вершины и ребра.

import org.janusgraph.core.JanusGraph; import org.janusgraph.core.JanusGraphFactory; import org.janusgraph.core.JanusGraphTransaction; import org.apache.tinkerpop.gremlin.structure.Edge; import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; public class GraphFactory{ public void createVertexAndEdge(){	//First configure the graph	JanusGraphFactory.Builder config = JanusGraphFactory.build(); config.set("storage.backend", “cassandrathrift”); config.set("storage.hostname", “13.126.71.131”);	//ip address where cassandra is installed config.set("storage.username", “cassandra”); config.set("storage.password", “cassandra”); config.set("storage.port", “9160”); config.set("storage.cassandra.keyspace", “testing”);	//Get the instance of graph	JanusGraph graph = config.open();	//Open a transaction	JanusGraphTransaction tx = graph.newTransaction();	//Create vertex with label	Vertex v1 = tx.addVertex(T.label, "user");	//Add property to the vertex	v1.property("userId", 1);	Vertex v2 = tx.addVertex(T.label, "user");	v2.property("userId", 2);	//Create edge between 2 vertices	Edge edge = v1.addEdge("edgeLable", v2);	//Finally commit the transaction	tx.commit();	} }

Ниже приведены скриншоты для создания вершин и ребер в консоли Gremlin.

Ссылка на документацию по JanusGraph:
http://docs.janusgraph.org/latest/index.htmlСсылка на документацию по Cassandra:



Твитнуть

Категория: Cassandra java NoSqlDB

Первоначально опубликовано на www.bluepiit.com.