Я создал веб-приложение на основе PHP с нумерацией страниц. Я сделал версию для Couchbase и Postgres. Мне пришлось отказаться от N1QL, потому что у него была ужасная производительность (может быть, я задам еще один вопрос по этому поводу). Поэтому я перенес проект с N1QL на представления. Я заметил, что при небольшом количестве страниц (например, 1, 10, 50 с 48 записями на странице) производительность была лучше, чем у postgres (0,07 с против 0,11 с), но при большом количестве страниц (например, 4000 -> 1,5 секунды и 16000). -> 5 секунд) производительность очень плохая. Я использую skip + limit для разбиения на страницы с родной библиотекой CB.
Любые идеи?
PHP:
public static function findByPage($recordsPerPage, $page) {
$query = CouchbaseViewQuery::from("dev_".static::COLLECTION_NAME, "get_".static::COLLECTION_NAME."")->reduce(false)->skip($recordsPerPage*($page-1))->limit($recordsPerPage)->custom(array("full_set"=> "true"));
$data = DB::getDB()->query($query, null, true);
// var_dump($data);
$objects = array();
foreach($data["rows"] as $row) {
$objects[] = static::find($row["key"]);
}
return $objects;
}
Один из видов (они почти все одинаковые):
function (doc, meta) {
if(doc.collection == "green_area") {
emit(doc._id, null);
}
}