![](/img/trans.png)
[英]How to create own Custom Predicate to compare composite id in 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));
無論有沒有索引,代碼都可以正常工作。
問題
我掃描了很多 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.