J'ai construit une application web basée sur PHP avec pagination. J'ai fait à la fois une version Couchbase et une version Postgres. J'ai dû abandonner N1QL parce qu'il avait des performances terribles (peut-être que je ferai une autre question pour ça). J'ai donc migré le projet de N1QL vers les vues. J'ai remarqué que, à faible nombre de pages (par exemple 1, 10, 50 avec 48 enregistrements par page), les performances étaient meilleures que les postgres (0.07s vs 0.11s), mais avec un nombre de pages élevé (par exemple 4000 -> 1.5 secondes et 16000 -> 5 secondes) la performance est très mauvaise. J'utilise skip + limite pour la pagination avec la librairie CB native.pagination PHP avec Couchbase devient très lent à des numéros de page élevés
Des idées?
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;
}
L'un des points de vue (ils sont à peu près tous les mêmes):
function (doc, meta) {
if(doc.collection == "green_area") {
emit(doc._id, null);
}
}
Serait heureux de regarder dans votre pagination N1QL si vous postez une question distincte avec vos requêtes et vos index et la version EXPLAIN et Couchbase. – geraldss
Merci, j'ai fait une question distincte pour cela si vous voulez jeter un coup d'oeil. Je ferai à nouveau N1QL si cela fonctionne, attendez Couchbase CE 4.5.0 et utilisez les vues + recherche plein texte ou utilisez PostgreSQL. –