Введение/МерыСлучайной MongoDB Запись
Я работаю с базой данных MongoDB с 10 Гб записей (около 3 миллионов записей).
Каждая запись (документ) имеет поле под названием DomainClass
(которое является одним из 11 разных классов, ранее определенных нами).
Что я пытаюсь выполнить
По соображениям статистики, я должен извлечь из этой базы данных, 100 records of each type of DomainClass
, и я не могу просто получить первые 100, поскольку выборка будет смещена. Мне нужно, чтобы эти 100 записей были рандомизированы в базе данных.
Что я пробовал:
Это в основном то, что я попробовал (в C#).
1 - Подсчитайте количество записей, относящихся к определенному DomainClass
.
2 - Перемешайте 100 чисел от 0 до подсчета
3- Найти все записи, которые принадлежат к этому DomainClass
4- Поместите их в памяти, как список
5 - Использование все ранее рандомизированные целые числа (100) в качестве индекса в этот список (для решения проблемы рандомизации).
Дефекты
Боюсь, что я не в состоянии выделить достаточно памяти (RAM) для всех записей одного класса. Так как мне нужно записи, чтобы быть в случайных позициях в базе данных, я должен поместить их в памяти для того, чтобы быть в состоянии фактически генерирования полностью рандомизированной выборку
Соображения
У меня нет случайного поля в документы. Моей лучшая ставкой является Date
поля документа, который следует так:
"CreationDate" : ISODate("2013-06-25T22:43:15.571Z")
я мог бы получить псевдослучайных записи по Поиску записей, которые были созданы в определенной секунде для примера, но я не мог найти любой способ сделать это, поскольку секунды не являются самим полем.
Заранее благодарю вас, если есть какая-либо другая информация, которую я должен предоставить.
Зачем вам помещать всю базу данных в память? Просто найдите случайные числа и запросите базу данных, чтобы получить конкретный документ. – Schaliasos
Не вся база данных. Но все документы определенного DomainClass в моем случае. Как я могу запросить конкретный документ, если мне нужны случайные документы каждого класса? Я не думаю, что вы поняли мою проблему –
Хм, что нижеприведенный ниже не лучший способ получить случайную запись, на самом деле это действительно медленный путь; есть много ссылок на google для dong this – Sammaye