Couchbase | Как сократить время выполнения выбранного запроса при размере документа 5 МБ - PullRequest
1 голос
/ 09 апреля 2020

Couchbase | Как уменьшить время выполнения запроса на выборку, если размер документа составляет 5 МБ.

Проблема: запрос на выделение сильфона занимает 16000 мс. Как сократить время выполнения этого запроса. Но если я использую findById, это займет всего 4000 мс. Из-за первичного ключа.

Примечание: поле результата содержит 5 МБ текстового содержимого. Хэш-код - это столбец вторичного индекса.

Вопрос 1: Если я создаю представление только с кодом id & ha sh, а затем запрашиваю это представление. Это ускорится?

сценарий создания индекса

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 Entity

@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

1 Ответ

0 голосов
/ 11 апреля 2020

При использовании вторичного индекса с документами 5 МБ данные должны выполнить 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 subdo c, чтобы получить обязательные поля.

...