Couchbase |文档大小为5 MB时如何减少选择查询的执行时间

问题描述 投票:1回答:1

Couchbase |当文档大小为5 MB时,如何减少选择查询的执行时间。

问题:波纹管选择查询需要16000毫秒。如何减少此查询的执行时间。但是,如果我使用findById,则只需4000毫秒。由于有主键。

注意:结果字段具有5MB的文本内容。哈希码是辅助索引列。

问题1:如果我仅创建具有ID和哈希码的视图,然后查询该视图。那会加速吗?

索引创建脚本

create index matrix_hashcode on price (_class, hashcode )
     where _class = "com.intervest.price.oxygen.model.ClientMatrix"
     USING GSI;

存储库代码

public List<ClientMatrix> findByHashcode(int hashcode);//16000 ms
public List<ClientMatrix> findById(int id);//4000 ms

Couchbase实体

@Data
@NoArgsConstructor
@AllArgsConstructor
@Document
public class ClientMatrix {

    @Id
    @Field
    private Long id;

    @Field
    private int hashcode;

    @Field
    private String token;

    @Field
    private String request;

    @Field
    private List<com.intervest.price.oxygen.model.ClientMatrixPriceResultGroup> result=new ArrayList<>();

    @Field
    private LocalDateTime createdDate;
}

@Data
@AllArgsConstructor
@NoArgsConstructor
@Document
@JsonPropertyOrder({"supportedValues","results"})
public class ClientMatrixPriceResultGroup {


    @Id
    private Long resultId;

    @Field
    private Long requestId;

    @Field
    @JsonProperty("filtering-criteria")
    private SortedMap supportedValues=new TreeMap();
    @Field
    private List<com.intervest.price.oxygen.model.ClientMatrixPriceResult> results=new ArrayList<>();

    public List<com.intervest.price.oxygen.model.ClientMatrixPriceResult> getResults() {
    return results;
    }

sample document

couchbase n1ql spring-data-couchbase
1个回答
0
投票

当使用具有5MB文档的二级索引时,数据需要进行2跳(数据节点==> N1QL ===>客户端)

您可以使用覆盖的二级索引按如下方式找到文档密钥。

CREATE INDEX matrix_hashcode ON price ( hashcode )
WHERE _class = "com.intervest.price.oxygen.model.ClientMatrix";
SELECT META(p).id, p.hashcode 
FROM price AS p
WHERE p._class = "com.intervest.price.oxygen.model.ClientMatrix" AND p.hashcode = "xyz";

一旦有了文档密钥,就可以使用SDK来获取文档。您也可以使用SDK子文档来获取必填字段。

© www.soinside.com 2019 - 2024. All rights reserved.