2011-01-08 23 views
5

Zajmuję się tworzeniem aplikacji sieci web, która używa nierelacyjnej bazy danych jako zaplecza (django-nonrel + AppEngine). Potrzebuję przechowywać niektóre dane hierarchiczne (projekty/podprojekt_1/podprojekt_N/zadania) i zastanawiam się, który wzór powinienem użyć. Na razie myślałem:Zalecenia z danymi hierarchicznymi na nierelacyjnych bazach danych?

  • adjacency listy (przechowywanie nadrzędnego id elementu)
  • zestawy zagnieżdżone (sklep lewo i wartości właściwe dla przedmiotu)

W moim przypadku, głębokość zagnieżdżenia dla zwykłego użytkownika nie przekroczy 4-5 poziomów. Ponadto, w interfejsie użytkownika, chciałbym mieć stronicowanie dla elementów na pierwszym poziomie, aby uniknąć ładowania zbyt wielu elementów przy ładowaniu pierwszej strony.

Z tego, co rozumiem do tej pory, zestawy zagnieżdżone są świetne, gdy hierarchia jest używana bardziej do wyświetlania. Listy rozgrywające są świetne, gdy edycja na drzewie odbywa się często. W moim przypadku wydaje mi się, że potrzebuję wyświetlania więcej niż edycja (przy użyciu zestawów zagnieżdżonych, nawet jeśli wyświetlacz działałby świetnie, powyższa strona może skomplikować rzeczy podczas edycji).

Czy masz jakieś przemyślenia i porady na podstawie doświadczeń z nierelacyjnymi bazami danych?

Odpowiedz

1

Sposób ich przechowywania zależy od sposobu ich sprawdzenia. Na przykład, jeśli potrzebujesz tylko znaleźć bezpośrednie elementy potomne rodzica, model listy przyległej jest prawdopodobnie najprostszy. Jeśli chcesz wyliczyć całe poddrzewa, lista przodków lub zestawy zagnieżdżone działają dobrze - mimo że uniknęłoby to zestawów zagnieżdżonych w App Engine.

Jeśli potrzebujesz integralności transakcyjnej dla wszystkich obiektów w drzewie - i nie będzie aktualizować drzewa jako całości częściej niż kilka razy na sekundę - powinieneś sprawdzić obsługę App Engine dla grup encji i przodków.

0

Użyłem serwera SQL do przechowywania danych nierelacyjnych. SQL Server ma te rzeczy o nazwie hierarchyID .., które sprawiają, że większość tego jest przezroczysta.

Jaki jest dokładny problem, który masz?

Powiązane problemy