Baza danych z "otwartym schematem" - dobry czy zły pomysł?

Współzałożyciel Reddit przedstawił prezentację na temat problemów, które mieli podczas skalowania do milionów użytkowników. Podsumowanie jest dostępne tutaj .

Zaskoczył mnie punkt 3:

Zamiast tego przechowują tabelę rzeczy i tabelę danych. Wszystko na Reddicie jest rzeczą: użytkownicy, linki, komentarze, subreddity, nagrody itp. Rzeczy zachowują wspólne atrybuty, takie jak głosy w górę/w dół, typ i data utworzenia. Tabela danych składa się z trzech kolumn: thing id, key, value. Jest rząd dla każdego atrybut. Jest wiersz dla tytułu, adresu url, autora, głosów spamowych itp. Kiedy dodają nowe funkcje, nie musieli już martwić się o bazę danych. Nie musieli dodawać nowych tabel dla nowych rzeczy lub martwić się o aktualizacje.

Wydaje mi się to okropnym pomysłem, ale wydaje się, że zadziałał na Reddita. Czy ogólnie to dobry pomysł? A może to osobliwość Reddita, która im się przydarzyła?

Author: Claudiu, 2010-05-18

3 answers

Jest to model danych znany jako EAV dla entity-attribute-value . Ma swoje zastosowania. Najlepszym przykładem są dane z badań pacjentów, które są naturalnie rzadkie, ponieważ istnieją setki tysięcy testów, które mogą być przeprowadzane, ale zazwyczaj tylko garstka jest obecna dla pacjenta. Stół z setkami tysięcy kolumn jest głupi, ale stół z EAV ma sens.

 16
Author: wallyk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-18 03:15:38

Większość naprawdę dużych witryn internetowych kończy się używaniem pewnego rodzaju niewiarygodnie prostego od strony bazy danych. Ma to tę zaletę, że jest szybki i skalowalny. Ma tę wadę, że wszystkie relacje, które można uzyskać bazę danych do egzekwowania automatycznie (za pomocą wyzwalaczy i tym podobne) trzeba aby wyegzekwować siebie w kodzie klienta zamiast. Utrzymanie spójności to ból szyi i prawie zawsze jest przynajmniej szansa, że Twoje dane będą niespójne, w przynajmniej przez krótki czas.

Dla portalu społecznościowego, to wartościowy kompromis. Dane, które są w większości właściwe, przez większość czasu są odpowiednie (np. kogo naprawdę obchodzi, czy liczba głosów, które otrzymujesz za przedmiot, jest naprawdę nieaktualna o 20 milisekund, gdy jest wysyłany), a utrzymanie kosztów rozsądnych podczas skalowania w celu obsługi gazyliona użytkowników ma duże znaczenie.

 8
Author: Jerry Coffin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-18 04:31:56

Zauważyłem, że nie wspominali nic o łatwości lub trudności w tworzeniu raportów na podstawie tych danych. W przypadku stosowania w wąskim zestawie okoliczności, podsłuchy mogą być korzystne. Jako centralna część większości systemów stanie się koszmarem po naciśnięciu przycisku raportowanie. Problem z EAVs polega na tym, że większość korzyści jest na początku projektu, a większość bólu jest później w analizie i raportowaniu, szczególnie ze względu na poważny brak integralności danych. "Nie musisz się martwić o klucze obce " brzmi dla mnie jak koszmar osieroconych rzędów. Dodaj w używaniu kluczy zastępczych do wszystkiego i masz splątaną morsę, która generalnie kończy się kompletnym przepisaniem

 7
Author: Thomas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-04 12:10:24