Surprise Me!

33 - СУБД. Сравнение производительности разных схем хранения дерева

2020-03-23 0 Dailymotion

Лектор: Дмитрий Барашев<br /><br />Использовался PostgreSQL 9.4.1, запущенный в Докер-контейнере из официального образа постгреса https://hub.docker.com/r/library/postgres/. Настройки постгреса (https://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server) не менялись. В частности, 128M отведено под разделяемую память для дисковых страниц, 4М отведено рабочей памяти запроса. Размер всей БД равен 16М, так что скорее всего она вся целиком помещается в оперативную память.<br /><br />Тесты выполнялись на лаптопе с процессором Intel i5 с 12Gb оперативной памяти.<br /><br />Запросы, выдающие всё поддерево заданной вершины<br /><br />-- Для списков смежностей<br /><br />CREATE OR REPLACE FUNCTION GetSubtreeAdjList(_parent_id INT)<br />RETURNS TABLE(<br /> id INT,<br /> value TEXT,<br /> parent_id INT,<br /> level INT<br />) AS $$<br />BEGIN<br />RETURN QUERY<br />WITH RECURSIVE BFS AS (<br /> SELECT K.id, K.value, K.parent_id, 0 AS level<br /> FROM Keyword K<br /> WHERE K.id = _parent_id<br /><br /> UNION ALL<br /> SELECT Child.id, Child.value, Parent.id AS parent_id, Parent.level + 1 AS level<br /> FROM Keyword Child JOIN BFS Parent ON (Child.parent_id = Parent.id)<br />)<br />SELECT * FROM BFS;<br /><br />RETURN;<br />END;<br />$$ LANGUAGE plpgsql;<br /><br />Запросы, выдающие поддерево заданной глубины<br /><br />-- Для списков смежностей<br />CREATE OR REPLACE FUNCTION GetShallowSubtreeAdjList(_parent_id INT, _depth INT)<br />RETURNS TABLE(<br /> id INT,<br /> value TEXT,<br /> parent_id INT,<br /> level INT<br />) AS $$<br />BEGIN<br />RETURN QUERY<br />WITH RECURSIVE BFS AS (<br /> SELECT K.id, K.value, K.parent_id, 0 AS level<br /> FROM Keyword K<br /> WHERE K.id = _parent_id<br /><br /> UNION ALL<br /> SELECT Child.id, Child.value, Parent.id AS parent_id, Parent.level + 1 AS level<br /> FROM Keyword Child JOIN BFS Parent ON Child.parent_id = Parent.id<br /> WHERE Parent.level

Buy Now on CodeCanyon