Spec-Zone.ru › MariaDB

Обзор OQGRAPH

Двигатель вычислений Open Query GRAPH, или OQGRAPH, как называется сам движок, позволяет обрабатывать иерархии (структуры дерева) и сложные графы (узлы, имеющие много связей в разных направлениях).

OQGRAPH отличается от других движков хранения, имея совершенно иную архитектуру, нежели обычный движок хранения, такой как Aria, MyISAM или InnoDB.

Он предназначен для извлечения иерархической информации, такой как та, которая используется для графов, маршрутов или социальных отношений, с помощью простого SQL.

Установка

См. Установка OQGRAPH. Обратите внимание, что если кэширование запросов включено, OQGRAPH его не будет использовать.

Создание таблицы

Данная документация основана на MariaDB 10.0.7 и OQGRAPH v3.

Пример с узлами начала и окончания

Для создания таблицы OQGRAPH v3 сначала необходимо создать вспомогательную таблицу. Эта вспомогательная таблица будет хранить фактические данные и будет использоваться для всех INSERT, UPDATE и т. д. Она должна быть обычной таблицей, а не представлением. Вот простой пример:

CREATE TABLE oq_backing (
  origid INT UNSIGNED NOT NULL, 
  destid INT UNSIGNED NOT NULL,  
  PRIMARY KEY (origid, destid), 
  KEY (destid)
);

Некоторые данные могут быть вставлены во вспомогательную таблицу для последующего тестирования:

INSERT INTO oq_backing(origid, destid) 
 VALUES (1,2), (2,3), (3,4), (4,5), (2,6), (5,6);

Теперь создается только для чтения таблица OQGRAPH. Оператор CREATE должен соответствовать приведенному ниже формату — любые отличия приведут к ошибке.

CREATE TABLE oq_graph (
  latch VARCHAR(32) NULL,
  origid BIGINT UNSIGNED NULL,
  destid BIGINT UNSIGNED NULL,
  weight DOUBLE NULL,
  seq BIGINT UNSIGNED NULL,
  linkid BIGINT UNSIGNED NULL,
  KEY (latch, origid, destid) USING HASH,
  KEY (latch, destid, origid) USING HASH
) 
ENGINE=OQGRAPH 
data_table='oq_backing' origid='origid' destid='destid';

Старый формат (до MariaDB 10.0.7) имеет поле latch как SMALLINT, а не VARCHAR. Формат по-прежнему действителен, но по умолчанию вызывает ошибку:

CREATE TABLE oq_old (
  latch SMALLINT UNSIGNED NULL,
  origid BIGINT UNSIGNED NULL,
  destid BIGINT UNSIGNED NULL,
  weight DOUBLE NULL,
  seq BIGINT UNSIGNED NULL,
  linkid BIGINT UNSIGNED NULL,
  KEY (latch, origid, destid) USING HASH,
  KEY (latch, destid, origid) USING HASH
) 
ENGINE=OQGRAPH 
data_table='oq_backing' origid='origid' destid='destid';

ERROR 1005 (HY000): Can't create table `test`.`oq_old` (errno: 140 "Wrong create options")

Старый, устаревший формат по-прежнему можно использовать, если значение системной переменной oqgraph_allow_create_integer_latch изменить с её значения по умолчанию, FALSE, на TRUE.

SET GLOBAL oqgraph_allow_create_integer_latch=1;

CREATE TABLE oq_old (
  latch SMALLINT UNSIGNED NULL,
  origid BIGINT UNSIGNED NULL,
  destid BIGINT UNSIGNED NULL,
  weight DOUBLE NULL,
  seq BIGINT UNSIGNED NULL,
  linkid BIGINT UNSIGNED NULL,
  KEY (latch, origid, destid) USING HASH,
  KEY (latch, destid, origid) USING HASH
) 
ENGINE=OQGRAPH 
data_table='oq_backing' origid='origid' destid='destid';
Query OK, 0 rows affected, 1 warning (0.19 sec)

SHOW WARNINGS;
+---------+------+-----------------------------------------------------------------------------------------------------------------------------------+
| Level   | Code | Message                                                                                                                           |
+---------+------+-----------------------------------------------------------------------------------------------------------------------------------+
| Warning | 1287 | 'latch SMALLINT UNSIGNED NULL' is deprecated and will be removed in a future release. Please use 'latch VARCHAR(32) NULL' instead |
+---------+------+-----------------------------------------------------------------------------------------------------------------------------------+

Данные вставляются только во вспомогательную таблицу, а не в таблицу OQGRAPH.

Теперь, создав таблицу oq_graph, связанную со вспомогательной таблицей, можно напрямую запросить таблицу oq_graph. Поле weight, так как оно не было указано в этом примере, по умолчанию имеет значение 1.

SELECT * FROM oq_graph;
+-------+--------+--------+--------+------+--------+
| latch | origid | destid | weight | seq  | linkid |
+-------+--------+--------+--------+------+--------+
|  NULL |      1 |      2 |      1 | NULL |   NULL |
|  NULL |      2 |      3 |      1 | NULL |   NULL |
|  NULL |      2 |      6 |      1 | NULL |   NULL |
|  NULL |      3 |      4 |      1 | NULL |   NULL |
|  NULL |      4 |      5 |      1 | NULL |   NULL |
|  NULL |      5 |      6 |      1 | NULL |   NULL |
+-------+--------+--------+--------+------+--------+

Данные здесь представляют однонаправленные узлы начала и конца. Так, узел 2 имеет пути к узлу 3 и узлу 6, а узел 6 не имеет путей к другим узлам.

Изменение веса

Существуют три поля, которые можно изменить: origid, destid (в приведенном выше примере используются эти два), а также weight. Чтобы создать вспомогательную таблицу с полем weight, можно использовать следующий синтаксис:

CREATE TABLE oq2_backing (
  origid INT UNSIGNED NOT NULL, 
  destid INT UNSIGNED NOT NULL, 
  weight DOUBLE NOT NULL, 
  PRIMARY KEY (origid, destid), 
  KEY (destid)
);
INSERT INTO oq2_backing(origid, destid, weight)  
 VALUES (1,2,1), (2,3,1), (3,4,3), (4,5,1), (2,6,10), (5,6,2);
CREATE TABLE oq2_graph (
  latch VARCHAR(32) NULL,
  origid BIGINT UNSIGNED NULL,
  destid BIGINT UNSIGNED NULL,
  weight DOUBLE NULL,
  seq BIGINT UNSIGNED NULL,
  linkid BIGINT UNSIGNED NULL,
  KEY (latch, origid, destid) USING HASH,
  KEY (latch, destid, origid) USING HASH
) 
ENGINE=OQGRAPH 
data_table='oq2_backing' origid='origid' destid='destid' weight='weight';
SELECT * FROM oq2_graph;
+-------+--------+--------+--------+------+--------+
| latch | origid | destid | weight | seq  | linkid |
+-------+--------+--------+--------+------+--------+
| NULL  |      1 |      2 |      1 | NULL |   NULL |
| NULL  |      2 |      3 |      1 | NULL |   NULL |
| NULL  |      2 |      6 |     10 | NULL |   NULL |
| NULL  |      3 |      4 |      3 | NULL |   NULL |
| NULL  |      4 |      5 |      1 | NULL |   NULL |
| NULL  |      5 |      6 |      2 | NULL |   NULL |
+-------+--------+--------+--------+------+--------+

Примеры использования OQGRAPH см. в примерах OQGRAPH.

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

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/oqgraph-overview/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API