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

Losowa próbka z MongoDB zwraca mocno wypaczone wyniki

Od MongoDB 3.4.9, jedną z przyczyn zaobserwowanego błędu jest to, że $sample opiera się prawie całkowicie na implementacji losowego kursora silnika pamięci masowej (patrz SERVER-19183 ). Odbywa się to tak, że $sample może być wydajna, gdy kolekcja zawiera dużo danych. Jednak ponieważ silnik pamięci przechowuje dokumenty w posortowanej kolejności przy użyciu implementacji typu B-drzewo, nie zawsze jest możliwe utworzenie naprawdę losowego wyniku.

Obecnie istnieją dwie prośby o lepszą funkcję $sample mechanika, czyli SERVER-22069 i SERVER-22068 .

To powiedziawszy, jeśli potrzebujesz naprawdę bezstronnych próbek swoich danych, użyj własnego $sample -podobne rozwiązanie jest prawdopodobnie najlepszym sposobem postępowania w tym momencie. Coś takiego:

  1. Pobierz listę wszystkich _id w kolekcji.
  2. Wykonaj losowe próbkowanie z tej listy (np. używając random Pythona .wybór ).
  3. Uzyskaj wszystkie odpowiednie dokumenty, korzystając z próbki _id , co będzie dość wydajne w zależności od żądanej wielkości próbki, ponieważ _id jest zawsze indeksowany.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Uwierzytelnianie Mongo w Dockerze

  2. Spring boot mongoDB jak zapytanie na polach numerycznych-Integer / Double

  3. MongoDB przejmuje mLab  —  Jakie są różne alternatywy hostingu MongoDB?

  4. Kolekcja liczników MongoDB Node.js

  5. MongoDB $elemDopasuj $in