[JavaScript, Node.JS] Nested Sets для Javascript

Автор Сообщение
news_bot ®

Стаж: 6 лет 9 месяцев
Сообщений: 27286

Создавать темы news_bot ® написал(а)
16-Сен-2020 00:30

На любом современном сайте (да и на сайтах постарше) встречаются вложенные структуры, иерархия объектов, деревья. Самый распространенный пример — каталог.
Сегодня множество проектов разрабатывается с использованием Javascript. Как же хранить древовидные структцры в этом случае? Об этом и хотелось бы поговорить.
Сейчас передо мной стоит задача на основе параметров продукции составить иерархтческую структуру каталога.
Существуют различные алгоритмы для хранения деревьев и примером таких алгоритмов могут послужить Adjacency List, Matherialized Path, Nested Set и Closure Table.
Если посоветуете еще какие-то — буду рад услышать и поучиться.
Когда я писал расширения для Joomla я часто использовал Nested Set. Именно в этой CMS я впервые встретил эту модель. Но теперь стек поменялся и сейчас это Javascript. Привычки остались, да и сайты на Joomla тоже. Нужно переносить данные на новые сервисы и проекты.
О Nested Sets довольно много информации в интернете и при желании вы всегда сможете ее найти, но тем не менее пару слов о этой модели данных я должен сказать.
Смысл Nested Set в том, что у каждого узла в иерархии существует пара ключей левый ключ и правый ключ. В зависимости от их значений осуществляется обход дерева. Положительными качествами алгоритма, на мой взгляд, является быстрота выборки данных. В этом алгоритме нет рекурсии. В то же время для изменения структуры дерева, добавления, удаления и переноса узлов, необходимо пересчитывать все ключи.
Чтобы использовать данные из Nested Set в проектах на Javascript нужен модуль который умел бы работать с этой моделью.
Поискав через npm я нашел модули, функционалом которых была выборка данных из структуры Nested Sets, т.е. все ключи уже должны были быть проставлены. Была необходимость править структуру, но такой возможности я не нашёл.
Еще одной проблемой является то, что в большинстве случаев и данные и структура дерева хранятся в одной сущности, но на мой взгляд гораздо эффективнее разделять эти вещи.
Таким образом одна и та же категория (данные категории) может лежать в разных родителях. Это позволит пользователям находить то, что они ищут быстрее при хорошо продуманной иерархии.
Хотя с точки зрения SEO появятся две страницы с разными URL и с одинаковым контентом, но это можно решить каноническими ссылками.
Если это не правильно — прошу SEO-специалистов меня поправить.
В итоге я решил написать модуль и опубликовать его на npmjs.com.
Если кому-то пригодится — буду очень рад.
Сейчас я продолжаю работать над ним и в планах реализовать перенос узла по дереву.
Вот ссылка на npm, где вы можете скачать пакет.
Вот ссылка на github, где вы можете скачать исходники.
Документация есть и там и там.
Буду рад любым комментариям.
Хороших вам проектов и интересных задач.
===========
Источник:
habr.com
===========

Похожие новости: Теги для поиска: #_javascript, #_node.js, #_nested_set, #_derevja (деревья), #_ierarhija (иерархия), #_npm, #_javascript, #_node.js
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 22-Ноя 23:40
Часовой пояс: UTC + 5