Я создал веб-приложение на основе PHP с разбивкой на страницы. Я сделал как Couchbase, так и версию Postgres. Мне пришлось отказаться от N1QL, потому что у него была ужасная производительность (возможно, я сделаю еще один вопрос для этого). Поэтому я перенес проект из N1QL в представления. Я заметил, что, хотя на низком номере страницы (например, 1, 10, 50 с 48 записями на странице) производительность была лучше, чем postgres (0,07 с против 0,11), но при высоком номере страницы (например, 4000 -> 1,5 секунды и 16000 -> 5 секунд) производительность очень плохая. Я использую skip + limit для разбивки на страницы с помощью собственной библиотеки CB.PHP разбиение на страницы с Couchbase очень медленно на высоких страницах страницы
Любые идеи?
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);
}
}
Если вы разместите отдельный вопрос с вашими запросами и индексами, а также с версией EXPLAIN и Couchbase, с удовольствием посмотрим на разбивку на страницы N1QL. – geraldss
Спасибо, я задал отдельный вопрос для этого, если вы хотите взглянуть. Я снова или снова N1QL, если он работает, дождитесь Couchbase CE 4.5.0 и будет использовать просмотры + полнотекстовый поиск или использовать PostgreSQL. –