2011-11-08 42 views
6

Buduję aplikację internetową, która powinna mieć wysokie obciążenie zapisu i tysiące, a nawet miliony hierarchicznych rekordów reprezentujących zdefiniowane przez użytkownika drzewa. Nie próbuję budować forum z wątkami, ale ogromną bazą danych z tysiącami małych hierarchii (drzewa z 10-20 potomkami) ...Przechowywanie danych hierarchicznych w MySQL z dużym obciążeniem zapisu

Jestem świadomy wielu modeli przechowywania hierarchii - obecnie używam Zestawy zagnieżdżone, ale wydajność z ogromnymi danymi i obciążeniem jest problem. Mam także wątpliwości, czy Rozwiązane Listy lub coś podobnego może rozwiązać ten problem.

Eksperymentowałem z bazą danych Mongo, która jest superszybkim przechowywaniem klucza/wartości, ale mogę używać tylko MySQL.

Chciałbym usłyszeć o innych ludziach z podobnymi problemami.

+0

Czy możesz trochę wyjaśnić? Chcesz zachować to wszystko i zapytać o hierarchie? Jak zamierzasz robić swoje zapytania? –

Odpowiedz

5

Jeśli możesz zainstalować wtyczki MySQL, to potrzebujesz silnika pamięci masowej OQGraph.

+1

+1 Jednak instalacja wtyczki nie jest dostępna dla wszystkich. Właśnie dlatego przyznałem nagrodę @barryhunter – Johan

+0

Dzięki!;) Pamiętaj, że im więcej ludzi wie o OQGraph, tym szybciej możemy to zobaczyć jako część domyślnych instalacji w firmach hostingowych :) – Mchl

4

Jaki jest problem z zestawami zagnieżdżonymi?

Czy obliczasz wartości lft/rgt podczas dodawania/usuwania węzłów?

Jestem pewien, że przy odrobinie starannego planowania można go modyfikować, więc trzeba wykonywać tylko rzadkie rekompozycje. Nie wypróbowałem tego w praktyce, ale zrobiłem pewne planowanie systemu raz (klient nie chciał systemu w końcu!).

Po pierwsze, mnożymy wartości, powiedzmy 1000, przy pierwszym obliczaniu. Następnie, jeśli dodasz węzeł, możesz po prostu wstawić liczby między wartościami. Jest tylko wtedy, gdy jest duża liczba wstawek, zaczyna brakować liczb. Proces wsadowy o niskim priorytecie, mógł ponownie obliczać drzewo, aby zwolnić numery dla nowych wstawek.

Usunięcie można również zarchiwizować, manipulując numerami. W rzeczywistości węzeł bez dzieci jest łatwy. Nie dokonano ponownej rekompozycji. U dzieci staje się bardziej skomplikowany, ale wydaje mi się, że powinien być wykonalny.

+0

+1 Joe Celko ma kilka świetnych postów w tym miejscu. Sądzę, że jego książka "Joe Celko's SQL for smarties" zawiera również sekcję. Na pewno warto szukać w Google. –

Powiązane problemy