У меня есть база данных, где я храню много данных и генерирую виды для графиков. Вместо того, чтобы возвращать все данные для графика, я возвращаю только предопределенное количество выборок. То, как я в настоящее время это делаю, это использовать работу с картой/сокращением на манго, но я не знаю, эффективен ли способ, которым я это делаю, занимает 14 секунд и привязывает процессор на графике, который содержит более 89000 образцов для пример.Эффективная выборка в mongodb
Работа с нисходящей выборкой выполняется путем вычисления «разрешения», то есть (всего # точек)/(желаемое количество выборок). Затем он сохраняет и внешний счет и индекс с использованием переменных области. Затем он в основном смотрит на каждую точку и решает, включать ли ее в список результатов на основе разрешения и текущего состояния переменных count/index.
Это прекрасно работает, но довольно медленно и, вероятно, не масштабируется. Мне интересно, было бы лучше, например, просто вернуть все точки и выполнить выборку в рубине, или, может быть, есть еще лучший способ.
Ознакомьтесь с новой структурой агрегации для Mongo. http://docs.mongodb.org/manual/applications/aggregation/ Вы можете делать агрегации (очевидно), и это намного, намного быстрее, чем map/reduce. – ryan1234
Спасибо, я не уверен, что могу в скором времени собрать агрегаты. Сейчас я понижаю дискретизацию на основе смещения документа в массиве после сортировки. Я думаю, что это лучший способ сделать это, хотя бы по значению x в документе. Например, у меня есть данные от x = 10000 до x = 100 000 000 с 100 000 точек данных. Я хочу уменьшить это до 1000 пунктов, равномерно распределенных по всему домену х (10 000 - 1 000 000). Какой был бы лучший способ сделать это? –
Итак, у вас есть 100k элементов в массиве в документе? – ryan1234