Mówiąc o argumentach do użycia Mongo zamiast/razem z ES:
-
Zarządzanie użytkownikami/rolami.
- Wbudowany w MongoDB. Może nie pasować do wszystkich Twoich potrzeb, może być gdzieś niezgrabny, ale istnieje i został zaimplementowany dość dawno temu.
- Jedyną rzeczą dla bezpieczeństwa w ES jest
shield
. Ale jest dostarczany tylko w ramach subskrypcji Gold/Platinum do użytku produkcyjnego.
-
Schemat
- ES jest bez schematu, ale jest zbudowany na bazie
Lucene
i napisane wJava
. Główna idea tego narzędzia - indeksuj i przeszukuj dokumenty, a praca w ten sposób wymaga spójności indeksów. Z tyłu wszystkie dokumenty powinny być zmieszczone w płaskiejlucene
indeks, który wymaga zrozumienia, w jaki sposób ES powinien postępować z zagnieżdżonymi dokumentami i wartościami oraz jak należy organizować indeksy, aby zachować równowagę między szybkością a kompletnością/spójnością danych. Praca z ES wymaga ciągłego pamiętania o pewnych kwestiach dotyczących schematu. Np. ponieważ możesz indeksować prawie wszystko do ES bez wcześniejszego umieszczania odpowiedniego mapowania, ES może "zgadywać" mapowanie w locie, ale czasami robi to źle, a czasami niejawne mapowanie jest złe, ponieważ raz wstawione, nie można go zmienić w /o ponowne indeksowanie całego indeksu. Lepiej więc nie traktować ES jako sklepu bez schematu, bo na prowizję można nadepnąć jakiś czas (a to będzie ból :) ), ale raczej traktuj to jako intensywne w schemacie, przynajmniej gdy pracujesz z dokumentami, które można przyciąć do konkretnych pól. - Z drugiej strony Mongo może „żuć i nie zostawiać okruszków” z prawie wszystkiego, co do niego włożysz. I większość twoich zapytań będzie działać dobrze, dopóki nie przypomnisz sobie, jak Mongo poradzi sobie z twoimi danymi z perspektywy JavaScript. A ponieważ JS jest słabo napisany, możesz pracować z naprawdę nieschematycznym przepływem pracy (na pewno, jeśli tego potrzebujesz)
- ES jest bez schematu, ale jest zbudowany na bazie
-
Obsługa danych innych niż tabelaryczne.
- ES ogranicza się do obsługi danych bez umieszczania ich w indeksie wyszukiwania. A to rozwiązanie jest wystarczająco dobre, gdy musisz przechowywać i pobierać dodatkowe dane (w porównaniu z danymi, które chcesz przeszukać).
- MongoDB obsługuje
gridFS
. Daje to możliwość obsługi dużych porcji danych za tym samym interfejsem. Oznacza to, że możesz przechowywać dane binarne w Mongo i pobierać je w tym samym interfejsie, z perspektywy Twojego kodu.