我已经使用分页构建了一个基于PHP的web应用程序。我做了一个Couchbase和Postgres版本。我不得不放弃N1QL,因为它表现糟糕(也许我会提出另一个问题)。所以我将项目从N1QL迁移到了视图。我注意到,在低页码(例如1,10,50每页48条记录)时,性能要优于postgres(0.07s vs 0.11s),但是在高页数时(例如4000 - > 1.5秒和16000 - > 5秒)表现非常糟糕。我使用跳过+限制与本地CB库分页。Couchbase的PHP分页在页码很高时变得非常缓慢
任何想法?
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。 –