Модель данных и системная архитектура графовой базы данных Nebula Graph

база данных

Nebula Graph: База данных с распределенным графом с открытым исходным кодом. Являясь единственной графовой онлайн-базой данных, в которой могут храниться триллионы узлов и ребер с атрибутами, Nebula Graph может не только удовлетворить требования к запросам с малой задержкой на уровне миллисекунд в сценариях с высокой степенью параллелизма, но и обеспечить высокую доступность сервисов и безопасность данных.

В этой статье в основном представлена ​​модель данных и системная архитектура Nebula Graph. Nebula Graph: распределенная, масштабируемая и быстрая графовая база данных, в настоящее время с открытым исходным кодом. Гитхаб:GitHub.com/VE soft-Inc/…

DirectedPropertyGraph

Nebula Graph моделируется как понятный ориентированный граф свойств, то есть логически граф состоит из двух видов графовых элементов: вершин и ребер.

image.png

Вершина Вершина

Вершины помечены в Nebula Graphtagи соответствующийtagСостав группы атрибутов ,tagПредставляет тип вершины, группа атрибутов представляетtagОбладает одним или несколькими свойствами. Вершина должна иметь хотя бы один тип, метку, но может иметь несколько типов. Каждый тег имеет соответствующий набор свойств, которые мы называемschema.

Как показано выше, есть дваtagВершины: игрок и команда. игрокschemaЕсть три свойстваID(видео),Name(укус) иAge(целое); командаschemaЕсть два свойстваID(видео) иName(нить).

Как и Mysql, Nebula Graph представляет собой базу данных со строгой схемой, и имена и типы данных атрибутов определяются до записи данных.

край

Ребра в Nebula Graph состоят из типов и атрибутов ребер, в то время как все ребра в Nebula Graph являются направленными ребрами, а направленные ребра обозначают вершину (начальную точку).src) указывает на другую вершину (конечную точкуdst )изотношение связи. Кроме того, в Nebula Graph мы называем типы реберedgetype, каждая сторонаединственныйedgetype, каждыйedgetypeСоответственно определяет этот атрибут ребраschema.

Возвращаясь к приведенной выше легенде, на рисунке есть два типа ребер, один из которых - игрок, указывающий на игрока.like отношения, имущество likeness (двойной); другой для игрока, чтобы указать на команду serveдва атрибута: start_year (int) и end_year (int).

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

График раздела График раздела

Поскольку количество узлов в сверхкрупномасштабной реляционной сети достигает от 10 до 100 миллиардов, а количество ребер достигает триллионов, даже хранение только точек и ребер намного больше, чем емкость общий сервер. Следовательно, должен быть способ вырезать элементы графа и хранить их в разных логических осколках.partition начальство. Nebula Graph использует сегментацию по краям, а стратегия сегментации по умолчанию —хэш хэш, количество разделов задано статически и не может быть изменено.

image.png

Модель данных

В Nebula Graph каждая вершина моделируется какkey-value, который хешируется в соответствии с его vertexID (или сокращенно vid) и сохраняется в соответствующем разделе.

image.png

Логическое ребро будет смоделировано как два независимых ребра в Nebula Graph.key-value, соответственно называетсяout-key а такжеin-key. Исходящий ключ хранится в том же разделе, что и начальная точка, соответствующая этому ребру, а входной ключ хранится в том же разделе, что и конечная точка, соответствующая этому ребру.

image.png

Подробный дизайн модели данных будет представлен в следующей серии статей.

Архитектура системы

Nebula Graph включает в себя четыре основных функциональных модуля, а именноуровень хранения,служба метаданных,вычислительный слойа такжеклиент.

image.png

Хранилище уровня хранения

Соответствующий процесс слоя хранения в Nebula Graph:nebula-storaged, ядром которого является распределенный распределенный протокол, основанный на протоколе Raft (алгоритм согласованности, используемый для управления репликацией журналов).Key-valueStorage. В настоящее время поддерживаются основные механизмы хранения: «Rocksdb» и «HBase». Соглашение о плотах принятоleader/followerспособ обеспечения согласованности между данными. Nebula Storage в основном добавляет следующие функции и оптимизации:

  1. Параллельный плот: позволяет одному и тому же идентификатору раздела на нескольких машинах формировать одинRaft group. Реализуйте параллельные операции через несколько групп Raft.
  2. Путь записи и пакет: синхронизация нескольких машин протокола Raft зависит от порядка идентификаторов журналов, поэтому пропускная способностьthroughputниже. Более высокая пропускная способность может быть достигнута за счет пакетной обработки и неупорядоченных коммитов.
  3. Ученик: Ученик, основанный на асинхронной репликации. Когда в кластер добавляется новая машина, ее можно сначала пометить как обучающуюся, а затем асинхронно сleader/followerВытяните данные. Когда ученик догоняет лидера, он помечается как ведомый и участвует в протоколе Raft.
  4. Балансировка нагрузки: для некоторых машин с высоким давлением доступа перенесите разделы, которые они обслуживают, на более холодные машины, чтобы добиться лучшей балансировки нагрузки.

image.png

Уровень службы метаданных Метаслужба

Соответствующий процесс метасервисаnebula-metad, его основные функции:

  1. Управление пользователями: пользовательская система Nebula Graph включаетGoduser,Admin,User,Guestчетыре. Каждый пользователь имеет разные права на операции.
  2. Управление конфигурацией кластера: поддержка новых серверов онлайн и оффлайн.
  3. Управление пространством графа: увеличение и удаление пространств графа, изменение конфигурации пространства графа (количество копий Raft)
  4. Управление схемами: Nebula Graph разработан для сильных схем.
  • Запишите тип каждого поля свойств Tag и Edge через Metaservice. Поддерживаемые типы: целое число int, двойной тип double, временная отметка типа данных, список типа списка и т. д.;
  • Управление несколькими версиями, поддержка добавления, изменения и удаления схемы и запись номера ее версии
  • Управление TTL, переработка по истечении срока действия идентификатораtime-to-liveполе, которое поддерживает автоматическое удаление данных и освобождение места

Уровень MetaService — это служба с отслеживанием состояния, и его метод сохранения состояния такой же, как и на уровне хранилища.KVStoreспособ хранить.

image.png

Механизм запросов вычислительного уровня и язык запросов (nGQL)

Соответствующий процесс вычислительного слояnebula-graphd, который состоит из полностью одноранговых вычислительных узлов без состояния и несвязанных между собой, причем вычислительные узлы не взаимодействуют друг с другом. Основная функция слоя **Query Engine** — анализировать текст nGQL, отправленный клиентом, посредством лексического анализа.Lexerи разборParserСоздайте план выполнения и передайте план выполнения механизму выполнения после оптимизации Механизм выполнения получает схему точек и ребер графа через MetaService и получает данные точек и ребер через уровень механизма хранения.Query EngineОсновные оптимизации слоев:

  1. Асинхронное и параллельное выполнение: Поскольку ввод-вывод и сеть являются операциями с большой задержкой, требуются асинхронные и параллельные операции. Кроме того, чтобы один длинный запрос не влиял на последующие запросы, Query Engine создает отдельный пул ресурсов для каждого запроса, чтобы обеспечить качество обслуживания (QoS).
  2. Вычислительный сток: чтобы уровень хранения не отправлял слишком много данных обратно на вычислительный уровень, чтобы занять драгоценную полосу пропускания, условная фильтрацияwhereОператор ожидания будет отправлен на узел уровня хранения вместе с условиями запроса.
  3. Оптимизация плана выполнения. Хотя оптимизация плана выполнения в реляционной базе данных SQL претерпела длительные разработки, в отрасли мало исследований по оптимизации языков запросов на основе графов. Nebula Graph исследовала оптимизацию плана выполнения графовых запросов, в том числекэш плана выполненияа такжеПараллельное выполнение контекстно-свободных операторов.

image.png

Клиентский API и консоль

Nebula Graph предоставляет клиентов на C++, Java и Golang, метод связи с сервером — RPC, а используемый протокол связи — Facebook-Thrift. Пользователи также могут управлять Nebula Graph через консоль в Linux. Веб-доступ в настоящее время находится в разработке.

Nebula Graph: база данных распределенных графов с открытым исходным кодом.

Гитхаб:GitHub.com/VE soft-Inc/…

Официальный блог:nebula-graph.io/cn/posts/

Вейбо:weibo.com/nebulagraph