Рекомендации с иерархическими данными по нереляционным базам данных? - PullRequest
5 голосов
/ 08 января 2011

Я разрабатываю веб-приложение, которое использует нереляционную базу данных в качестве бэкэнда (django-nonrel + AppEngine). Мне нужно хранить некоторые иерархические данные (projects / subproject_1 / subproject_N / tasks), и мне интересно, какой шаблон следует использовать. А пока я думал о:

  • Список смежности (сохранить идентификатор родительского элемента)
  • Вложенные наборы (сохраните левые и правые значения для элемента)

В моем случае глубина вложения для обычного пользователя не будет превышать 4-5 уровней. Кроме того, в пользовательском интерфейсе я хотел бы иметь нумерацию элементов для первого уровня, чтобы избежать загрузки слишком большого количества элементов при загрузке первой страницы.

Насколько я понимаю, вложенные множества хороши, когда иерархия больше используется для отображения. Списки смежности хороши, когда редактирование на дереве выполняется часто. В моем случае, мне кажется, мне нужно больше, чем редактировать отображение (при использовании вложенных наборов, даже если отображение будет работать отлично, приведенная выше нумерация страниц может усложнить редактирование).

Есть ли у вас какие-либо мысли и советы, основанные на вашем опыте работы с нереляционными базами данных?

Ответы [ 2 ]

1 голос
/ 12 января 2011

Как вы храните их, зависит от того, как вам нужно их запросить. Например, если вам нужно только найти прямых потомков родителя, модель списка смежности, вероятно, является самой простой. Если вы хотите перечислить целые поддеревья, список предков или вложенные наборы работают хорошо, хотя я бы избегал вложенных наборов в App Engine.

Если вам нужна целостность транзакций для всех объектов в дереве - и вы не будете обновлять дерево в целом чаще, чем несколько раз в секунду - вам следует обратиться к поддержке App Engine для групп сущностей и предков.

0 голосов
/ 12 января 2011

Я использовал SQL Server для размещения нереляционных данных.В SQL Server есть такие вещи, которые называютсяierarchyID ..., которые делают большую часть этого прозрачным.

Какая именно у вас проблема?

...