簡體   English   中英

如何在 Hazelcast 中創建復合索引

[英]How to create Composite index in Hazelcast

我正在嘗試通過使用復合鍵來提高 Hazelcast 查找的性能。 我有一個 class 實體

Class Entity {
    private Long id;
    private String field1;
    private String field2;
    private String field3;
    // getter and setters
}

我在hazelcast-server.xml中添加了一個包含上述 3 個字段的復合索引

...
<map name="Entity">
    <max-idle-seconds>2678400</max-idle-seconds>
    <time-to-live-seconds>2678400</time-to-live-seconds>
    <backup-count>3</backup-count>
    <async-backup-count>3</async-backup-count>
    <read-backup-data>true</read-backup-data>
        <indexes>
        <index ordered="false">field1, field2, field3</index>
    </indexes>
</map>
...

查詢 Hazelcast map

EntryObject entryObject = new PredicateBuilder().getEntryObject();
PredicateBuilder predicate = entryObject.get("field1").equal("value1")
    .and(entryObject.get("field2").equal("value2"))
    .and(entryObject.get("field3").equal("value3"));
IMap<Long, Entity> entityCache = hazelcastInstance.getMap("Entity")
List<Entity> routings = new ArrayList<>(entityCache.values(predicate));

無論有沒有索引,代碼都可以正常工作。

問題

  1. 這是創建和使用復合索引的正確方法嗎?
  2. 有沒有辦法檢查索引是否實際被查詢使用? (我無法在 hazelcast 管理中心控制台上獲得任何與索引相關的信息)

我掃描了很多 hazelcast 文檔和互聯網論壇,但找不到具體的答案。 Hazelcast 版本:3.12; Java版本:8

無論有沒有索引,代碼都可以正常工作。

這很明顯,因為不需要索引。

我沒有測試,但是在這種情況下應該使用索引,應該使用所有三列。 沒有公開的 API 來查看是否實際使用了索引。 您可以做的是在 map 中放入大量條目,使用索引查詢應該會快得多。 另一種方法是調試查詢執行,例如在Indexes.matchIndex()中放置一個斷點,但我不確定這個 class 在 3.12 中是否相同。

我發現的唯一方法是IMap.getLocalMapStats().getIndexStats()如下所述: https://docs.hazelcast.org/docs/3.12.1/manual/html-single/index.html#map-index -統計數據

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM