У меня есть проект, в котором я надеюсь хранить иерархическую информацию (в частности, категории и подкатегории) в том, что в основном представляет собой плоскую систему базы данных (короче говоря, это набор записей XML). Я хотел бы хранить информацию о категориях и подкатегориях в системе:
- Animals
- Invertebrates
- Позвоночные
- Погода
- Buildings
- Skyscrapers
- Исторические здания
...и так далее.
Все в системе, хорошо это или плохо, хранится в виде записи XML; именно так работает система хранения.
Это означает, что каждая категория в системе также хранится в виде записи XML, например:
<record id="12345">
<attribute name="Skyscrapers" />
<attribute type="Category" />
</record>
Поэтому мне интересно, как реализовать иерархию при этих ограничениях.
Я привык к хранению данных в реляционной базе данных. В таких случаях я почти всегда использую модель вложенного множества. Похоже, что в данном случае это не лучший выбор, потому что:
- Каждый раз, когда вы вставляете элемент, вы должны изменить значения
right
и/илиleft
для многих узлов. Я не могу выполнять массовое обновление XML-файлов, поэтому мне придется обновлять каждый по отдельности. - Хотя есть функции поиска, которые позволяют мне фильтровать по параметрам «меньше» или «больше» (так что теоретически я могу получить только соответствующие дочерние узлы или родительские узлы данной категории), я не могу упорядочить записи XML. по атрибутам. Поэтому мне пришлось бы получить все документы, преобразовать их в список объектов, которые можно отсортировать (в данном случае с помощью Python), а затем отсортировать их с помощью функции
lambda
.
Поскольку моя модель хранения данных не сильно отличается от хранения данных с использованием NoSQL, мне было интересно, придумал ли кто-нибудь, использующий этот механизм хранения, хороший прием для обработки и хранения иерархических данных.