Po stwierdzeniu, że 3.3.11 supports case insensitive index (używając sortowania), przebudowałem moją bazę danych zawierającą 40 milionów rekordów, aby można było z nią grać. Alternatywą było dodanie np. małe litery specyficzne dla wyszukiwań niewrażliwych na wielkość liter i indeksuj je.Indeks niewrażliwy na wielkość liter MongoDB "zaczyna się od" problemów z wydajnością
To, co zrobiłem, to poprosić MongoDB o wsparcie sortowania w mojej kolekcji w czasie tworzenia jako suggested here. Więc zrobiłem to, aby umożliwić case niewrażliwość dla całej kolekcji:
db.createCollection("users", {collation:{locale:"en",strength:1}})
Po załadowaniu kolekcję Próbowałem bezpośrednie pytania jak:
db.users.find({full_name:"john doe"})
... a ci powrót w ~ 10ms z 50 wyników . Jest niewrażliwy na wielkość liter - wszystko jest świetne. Ale potem spróbuj coś takiego:
db.users.find({full_name:/^john/})
... albo ...
db.users.find({full_name:/^john/i})
... i to trwa dłużej niż 5 minut. Byłem bardzo rozczarowany. Po wykonaniu explain()
okazało się, że indeks był najwyraźniej używany, ale zapytanie nadal trwa zbyt długo, aby wykonać. Czy można to przypisać błędnemu lub niekompletnemu wydaniu rozwojowemu, czy też robię coś zasadniczo nie tak?
Podczas wyszukiwania wyrażenia regularnego "zaczyna się od" zapytanie powinno być błyskawiczne. Jakieś pomysły?
Witam! planujemy przejść do wersji 3.4 i znaleźliśmy Twoje pytanie. Czy znalazłeś przyczynę problemu? czy działa dobrze z najnowszą wersją 3.3.x? dzięki .. – Ruben
Właściwie to nie działa. Zainstalowałem 3.4, zaktualizowaną bazę danych do 3.4 za pomocą https://docs.mongodb.com/master/reference/command/setFeatureCompatibilityVersion/#dbcmd.setFeatureCompatibilityVersion, utworzyłem nową kolekcję (z domyślnym sortowaniem, en, strength 2), zaimportowałem 11 milionów dokumentów, utworzyłem indeks i wciąż widzę minuty przed zwrotem zapytania regex (regex podobny do/^ find/i) – wpfwannabe
Nawet z całkiem nowym db i wszystkimi krokami z góry, nie jest to natychmiastowe. Być może mój komentarz był mylący. Działa - ale jest wolny z wyrażeniem regularnym. Jeśli wyszukujesz według pełnego słowa (nie częściowego dopasowania, jest bardzo szybki). – wpfwannabe