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;
}
当使用具有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子文档来获取必填字段。