mongodb

yii2 mongodb ActiveRecord Сортировка

По-идее так же как и в любой эктиврекорд:

$sort = 'ASC';
$reports = Report::find()
		->where(['in', '_id', $this->report_ids])
		->orderBy("creation_data $sort")
		->all();

yii2 commad -- переделать запрос из лога в формат mongodb. Изменение формата

Руками можно по такому принципу -- из:

ИМЯБАЗЫ.command(
{"aggregate":"ИМЯКОЛЛЕКЦИИ",
	"pipeline":[	
        {"$limit":5}
	],
    "allowDiskUse":true,
	"cursor":{"batchSize":1000}
})

в:

db.ИМЯКОЛЛЕКЦИИ.aggregate([
	{"$limit":5}
],
{"allowDiskUse":true,"cursor":{"batchSize":50000}}
)

mongodb, sort skip limit, pipeline -- Выясняем как тут сортировать данные при агрегации

$sort + $limit Memory Optimization

When a sort immediately precedes a limit in the pipeline, the $sort operation only maintains the top n results as it progresses, where n is the specified limit, and MongoDB only needs to store n items in memory. This optimization still applies when allowDiskUse is true and the n items exceed the aggregation memory limit.

Changed in version 2.4: Before MongoDB 2.4, $sort would sort all the results in memory, and then limit the results to n results.

mongodb Оптимизация запросов -- как ускорить выборку (скорость и производительность)

Диагностика проблем производительности

Рекомендации по изменению запросов

  1. Если можете облегчить выборку перед любым "затратным" по времени действием, сделайте это с помощью $project (например перед lookup с другой коллекцией)
  2. $lookup:
    • Индексируйте поля по которым происходит lookup

Ajax-запрос -- бесконечно выполняющийся, дольше чем время выполнения скрипта на сервере (мистика)

По-идее такого быть не может, что что-то похожее наблюдалось с присутствием цикла while и выполнения запроса к mongodb.

При этом сама монга в диспетчере линукса (top) показывала, что занимает 300 процентов CPU, другие запросы к ней тоже выполнялись медленно до тех пор, пока процесс монги не был перезагружен.

yii2 mongodb $cursor->toArray Работает слишком медленно -- как ускорить выборку больших объёмов данных из mongo в проложение

Вызов типа:

$cursor = \Yii::$app->mongodb->createCommand(\Yii::$app->mongodb->getQueryBuilder()->aggregate(
		$collection->name, $pipeline, 
		['allowDiskUse' => true, 'cursor' => ['batchSize' => $this->batchSize]]))->execute();

$resultArray = $cursor->toArray();

-- практически все время при большой выборке потратит на вызов toArray(), и это будет проходить медленно.

Итерируемся сами

Можно итерироваться по курсору, без вызова toArray(), но даже пустая итерация типа:

mongodb sprace Индекс и скорость сортировки

mongodb 3.4 не использует спрэйс индексы, если не во всех документах есть указанные значения:
Актуальная информация: https://docs.mongodb.com/manual/core/ind...

Используйте индексы без sprace, если вы не уверены в том, что в каждом документе есть идексируемые поля.

Pages

Subscribe to RSS - mongodb