Jakie są zalety uruchamiania NoSQL (wcześniej MongoDB) nad MySQL, PostGRE SQL lub MSSQL w Drupal? Czy korzyści płynące z prostego korzystania z magazynu, czy też niektóre konfiguracje Drupala wymagają zmiany?
Jakie są zalety uruchamiania NoSQL (wcześniej MongoDB) nad MySQL, PostGRE SQL lub MSSQL w Drupal? Czy korzyści płynące z prostego korzystania z magazynu, czy też niektóre konfiguracje Drupala wymagają zmiany?
Odpowiedzi:
MongoDB może służyć do przechowywania większości lub wszystkich jednostek w szybkim, zorientowanym na dokumenty magazynie. Ten typ magazynu skaluje się znacznie lepiej niż standardowy magazyn oparty na SQL, który mamy w rdzeniu Drupala (który jest oparty na schemacie „jedna tabela na pole”).
W obecnym stanie Drupala 7 masz:
Umożliwia to szybkie odpytywanie o jednostki na MongoDB i możliwość dodawania złożonych indeksów, które nie obsługują bazy danych SQL opensource (w tym indeksów między tabelami). Jednocześnie nie tracisz interoperacyjności, ponieważ tabela podstawowa encji jest nadal przechowywana w języku SQL, a zatem można do niej dołączyć moduły, które są nadal tylko SQL (jak flaga).
Ten rodzaj szybkiego zapytania jest dostępny dzięki mechanizmowi EntityFieldQuery, który jest sposobem na tworzenie zapytań dotyczących encji, ich właściwości i pól w sposób abstrakcyjny. Domyślna implementacja w rdzeniu tłumaczy te zapytania na SQL, ale moduł MongoDB ma w pełni funkcjonalną implementację, która może bezpośrednio zaspokoić te zapytania z MongoDB.
Dzięki backendowi EntityFieldQuery dla widoków możesz łatwo wykorzystać tę moc, korzystając z narzędzi, do których jesteś przyzwyczajony. Jedynym minusem jest to, że relacje nie są obsługiwane (ale w praktyce i tak rzadko są one potrzebne - i można to obejść, wpychając dodatkowe dane do obiektu encji i dodając ujawnianie ich jako dodatkowych właściwości encji).
W skrócie, gdy tylko wydajność zapytania stanowi problem w twoim projekcie, co dzieje się, gdy masz znaczący zestaw danych (powiedzmy, że zaczynając od kilku dziesiątych tysięcy jednostek dla danego typu jednostki), MongoDB jest zyskiem netto dla bardzo niewielu wad. Wysoce polecany.
MongoDB i podobne są zaprojektowane do przechowywania uporządkowanych (hierarchicznych) danych w stosunkowo elastyczny sposób.
Na przykład w Drupal 7trakcie używania field_sql_storagekażde pole otrzymuje własne tabele. Po dołączeniu 10 pól do typu zawartości powstaje 10 tabel w bazie danych. Po załadowaniu tego węzła field_sql_storagewykona zapytanie dla pola i dla węzła (lub wielu węzłów, jeśli są używane node_load_multiple).
Korzystając z mongodb_field_storage , możesz przechowywać wszystkie pola węzła w jednym dokumencie i uzyskiwać je za pomocą jednego zapytania.
Możesz także przechowywać inne rzeczy, takie jak watchdog, sesje, pamięć podręczna, bloki w MongoDB .
Nadal potrzebujesz MySQL, MongoDB go nie zastępuje (tylko w przypadku niektórych części).
Kolejną zaletą jest to, że dzięki MongoDB łatwiej jest skalować, można dodać wiele serwerów do klastra i udostępniać dane między nimi.
Profesjonaliści przychodzą z wadami.
Drupal jako całość nie może zostać przełączony na MongoDb, więc będziesz musiał obsługiwać dwie bazy danych i upewnić się, że działają one dobrze razem.
Wiele modułów nie będzie mogło współpracować z mongodb, więc stracisz interoperacyjność.
Chyba że masz pilną potrzebę (jak część twojego systemu nie radzi sobie z liczbą żądań / lub ilością danych) nie zmieniłbym. I nawet kiedy zaczynasz zbliżać się do granic, spójrz na rzucanie sprzętem na problem lub strojenie przed przełączeniem.
Myślałem, że już na to odpowiedziałem, na SO jest prawie duplikat