扫描特定文档的存储桶时,Couchbase性能问题-获取超时异常



我们有Couchbase服务器版本Community Edition 5.1.1 build 5723

在我们的Cars铲斗中,我们有它制造的Car MakeCars

两者之间的连接是Car MakeId,我们将其保存为Car文档中的另一个字段(就像MySQL表中的外键(。

这个bucket只有33万份文档。

查询需要花费大量时间-对于非常简单的查询(如(需要数十秒

select * from cars where model="Camry"  <-- we expect to have about 50,000 results for that

我们以两种方式执行查询:

  1. 沙发座的用户界面
  2. 一个Spring启动应用程序,在7.5秒后不断获得TimeOutException

我们认为问题是缺少bucket的索引。

所以我们添加了一个索引:

CREATE INDEX cars_idx ON cars(makeName, modelName, makeId, _class) USING GSI;

我们可以在运行时看到该索引

SELECT * FROM system:indexes

我们这里缺少什么?在NoSQL数据库中进行此类查询的时间是否合理?

尝试

CREATE INDEX model_idx ON cars(model);

您的索引不包括模型字段。

您应该有spring数据couchbase"_class"属性的索引

CREATE INDEX `type_idx` ON `cars`(`_class`)

所以,这就是我们解决问题的方法:

  1. 使用这个链接和@palalenanswer,我们创建了几个索引来加快查询速度
  2. 当我们知道返回的结果集很大时,我们修改了代码以使用分页,并得出了这样的结果:
do{Pageable Pageable=PageRequest.of(pageNumber,SLICE_SIZE,Sort.by("id"((;切片汽车Resetory.findAllByModelName("凯美瑞",可分页(;列出汽车=slice.getContent((;}while(slice.hasNext(((

最新更新