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