MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak zoptymalizować zapytanie MongoDB za pomocą zarówno $gt, jak i $lte?

Tak więc zapytania z podwójnym zakresem są w Mongo nierozważne. Zakładam, że masz jeden indeks zawierający zarówno {start_ip_num: 1, end_ip_num: 1} .

Jeśli to nie sprawi, że jesteś wystarczająco blisko (często jest to nadal powolne, jeśli masz wystarczającą ilość danych zwróconych przez pierwsze pole, ponieważ musi wykonać dużo skanowania B-drzewa), możesz zrobić jedną sztuczkę, aby to zwalczyć za pomocą zapytań 2D box (działa tylko dla dwóch zakresów na raz).

Zasadniczo umieszczasz indeks geograficzny 2D na polu zawierającym dwa punkty w tablicy, np. [start_ip, end_ip], i nadajesz mu wystarczająco wysoką wartość min/maks, aby nie osiągnął limitów, które domyślnie są tylko -180/180.

Na koniec użyj zapytania o granice z zakresem od min do wartości $lte w jednym rogu pola oraz wartości gt i max w drugim rogu pola. Zobacz http://www.mongodb.org/display/DOCS/ Geospatial+Indexing#GeospatialIndexing-BoundsQueries dla składni.

Wygląda mniej więcej tak:

db.ip_ranges.find({ip_range:{$within:{$box:[[0, 1204135028], [1204135028, max]]}}});

gdzie max to największy adres IP, jaki możesz mieć.

Minęło trochę czasu, odkąd zajrzałem do tego, więc ramka może być nieprawidłowa, ale koncepcja jest słuszna i sprawiła, że ​​zapytania o podwójnym zakresie działają nieco lepiej niż w przypadku zwykłego dwupolowego indeksu B-drzewa. Konsekwentnie poniżej sekundy (chociaż zwykle kilkaset ms), w porównaniu do kilku sekund ze zwykłym indeksem – myślę, że miałem wtedy setki milionów dokumentów, ale minęło trochę czasu, więc weź te zapamiętane testy porównawcze z ziarnistością z soli. Jestem pewien, że wyniki będą się znacznie różnić w zależności od danych i rozmiarów zakresu.

Aktualizacja: Możesz poeksperymentować z bits ustawienie, wypróbowanie niskiej i wysokiej liczby, aby sprawdzić, czy ma to znaczenie. Dla mnie nie wydawało się to średnio wpływać na zapytania. Zobacz http://www.mongodb.org/display/DOCS/ Geospatial+Indexing#GeospatialIndexing-CreatingtheIndex dla składni.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Eksportowanie system.profile z MongoDB nie działa

  2. Grupa sterowników MongoDB .NET według zakresu czasu

  3. Instalowanie MongoDB na CentOS 7

  4. Zapytanie MongoDump z BinData

  5. Co to jest profil? oraz Sieć i Pracownik