Hostuję bazę danych mongodb dla usługi obsługującej wyszukiwanie pełnotekstowe w kolekcji z 6,8 milionami rekordów.Wyszukiwanie indeksu tekstu MongoDB powolne dla popularnych słów w dużej tabeli
Indeks tekstowy zawiera dziesięć pól o różnych masach.
Większość wyszukiwania zajmuje mniej niż sekundę. Niektóre wyszukiwania trwają od dwóch do trzech sekund. Jednak niektóre wyszukiwania trwają od 15 do 60 sekund! 15-60 sekundowe przypadki wyszukiwania są niedopuszczalne w mojej aplikacji. Muszę znaleźć sposób na przyspieszenie tych.
Wyszukiwanie trwa od 15 do 60 sekund, gdy słowa, które są bardzo popularne w indeksie, są używane w zapytaniu.
Wygląda na to, że funkcja wyszukiwania tekstowego nie obsługuje leniwych parametrów. Moją pierwszą myślą było umieszczenie w pamięci podręcznej listy 50 najpopularniejszych słów w moim indeksie tekstowym, a następnie poproszenie mongodb o ocenę tych ostatnich (leniwych) i nad przefiltrowanymi wynikami zwróconymi przez mniej powszechne parametry. Mam nadzieję, że ludzie wciąż są ze mną. Załóżmy na przykład, że mam zapytanie "produkty czekoladowe", gdzie produkty są powszechne, a czekolada jest rzadka. Chciałbym móc poprosić mongodbę najpierw o ocenę "czekolady", a następnie odfiltrować te wyniki terminem "produkty". Czy ktoś wie, jak to osiągnąć?
Mogę osiągnąć powyższy scenariusz, pomijając najczęściej używane słowa (np. "Produkty") z zapytania db, a następnie ponownie stosując wspólny filtr termin po stronie aplikacji po otrzymaniu rekordów znalezionych przez db. Zaleca się, aby wszystkie logiki zapytań miały miejsce w bazie danych, ale są otwarte na przetwarzanie po stronie aplikacji dla uzyskania prędkości.
W tym projekcie wciąż występują dziury. Jeśli użytkownik szuka tylko wspólnych haseł, nie mam innego wyjścia, jak trafić w bazę danych ze wszystkimi terminami. Od wstępnego odczytania ustalam, że nie jest zalecane (lub nieobsługiwane) posiadanie wielu indeksów tekstowych (o różnych nazwach) w tej samej kolekcji. Moim planem jest stworzenie dwóch identycznych tabel, każda z moimi rekordami 6.8M, z różnymi indeksami - jednym dla zwykłych słów i jednym dla nieprzeciętnych słów. To wydaje się kludgy i clunky, ale jestem gotów zrobić to dla zwiększenia prędkości.
Czy ktoś ma wgląd i/lub porady, jak przyspieszyć ten system. Chciałbym, aby przetwarzanie danych odbywało się w bazie danych, tak szybko, jak to możliwe. Jestem pewien, że mój mały rekordowy stół 6.8M nie jest największy, jaki widział mongotb. Dzięki!
To jest teraz 2018 (5 lat później), a mongodb wciąż ma dokładnie ten sam numer :( – Nico
z tego powodu w połączeniu ze znacznym trafieniem wydajnościowym Mongo przez wdrożenie tego, dzięki czemu ustaliliśmy, że używanie Mongo w taki sposób nie było "Podstawowym przeznaczeniem" wspieranym "lub" zamierzonym ", zdecydowaliśmy całkowicie zrezygnować z mongo, przepraszam za zimną wodę – kmehta