MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Zufällige Stichprobe von MongoDB mit stark verzerrten Ergebnissen

Ab MongoDB 3.4.9 ist ein Grund für die von Ihnen beobachtete Verzerrung unter anderem $sample stützt sich fast vollständig auf die Random-Cursor-Implementierung der Speicher-Engine (siehe SERVER-19183 ). ). Dies geschieht so, dass $sample könnte leistungsfähig sein, wenn die Sammlung viele Daten enthält. Da die Speicher-Engine Dokumente jedoch mithilfe einer B-Baum-Implementierung in einer sortierten Reihenfolge speichert, ist es nicht immer möglich, ein wirklich zufälliges Ergebnis zu erzeugen.

Derzeit gibt es zwei Funktionsanfragen für besseres $sample Mechanik, nämlich SERVER-22069 und SERVER-22068 .

Wenn Sie jedoch wirklich unvoreingenommene Stichproben Ihrer Daten benötigen, rollen Sie Ihre eigene $sample -ähnliche Lösung ist wahrscheinlich der beste Weg, um an dieser Stelle fortzufahren. Etwas wie:

  1. Erhalten Sie eine Liste aller _id in der Sammlung.
  2. Führen Sie eine zufällige Auswahl dieser Liste durch (z. B. mit Pythons random .Auswahl ).
  3. Beziehen Sie alle relevanten Dokumente unter Verwendung der Beispiel-_id , die abhängig von der gewünschten Stichprobengröße angemessen leistungsfähig ist, da _id wird immer indiziert.