Hazelcast Hazlecast通过数字查找查找范围
我是hazle cast的新手,尝试使用hazle cast实现查找。我的假设是,我有一系列数字1-10,10-20,20-30。如果我得到一个带有数字的请求,那么我需要返回它所属的范围,例如,如果请求带有数字22,那么我应该返回20-30范围。是否可以使用hazle cast查询?如果你做过类似的实现,如果你能分享,我将不胜感激 我们执行的SQL查询是Hazelcast Hazlecast通过数字查找查找范围,hazelcast,querydsl,Hazelcast,Querydsl,我是hazle cast的新手,尝试使用hazle cast实现查找。我的假设是,我有一系列数字1-10,10-20,20-30。如果我得到一个带有数字的请求,那么我需要返回它所属的范围,例如,如果请求带有数字22,那么我应该返回20-30范围。是否可以使用hazle cast查询?如果你做过类似的实现,如果你能分享,我将不胜感激 我们执行的SQL查询是 select * from table where '21' between min and max Hazelcast为分布式查询提供以下
select * from table where '21' between min and max
Hazelcast为分布式查询提供以下API:
- CriteriaAPI(Hazelcast提供的编程接口,类似于Java持久性查询语言(JPQL))
- 分布式SQL查询(com.hazelcast.Query.SqlPredicate采用常规SQL where子句)
public class SqlPredicateSample {
public static class Item implements Serializable {
String name;
int number;
public Item(String name, int number) {
this.name = name;
this.number = number;
}
@Override
public String toString() {
return "Item{"
+ "name='" + name + '\''
+ ", number=" + number
+ '}';
}
}
public static void main(String[] args) {
// Start the Embedded Hazelcast Cluster Member.
HazelcastInstance hz = Hazelcast.newHazelcastInstance();
// Get a Distributed Map called "items"
IMap<Integer, Item> items = hz.getMap("items");
// Add some users to the Distributed Map
for (int i = 0; i <= 100; i++) {
items.put(i, new Item("name" + i , i));
}
Predicate sqlQuery = new SqlPredicate("name = 'name22' AND number BETWEEN 20 AND 30");
Collection<Item> objects = items.values(sqlQuery);
System.out.println(objects);
}
}
公共类SqlPredicateSample{
公共静态类项实现可序列化{
字符串名;
整数;
公共项(字符串名称、整数){
this.name=名称;
这个数字=数字;
}
@凌驾
公共字符串toString(){
返回“项目{”
+“name=”+name+“\”
+“,number=“+number
+ '}';
}
}
公共静态void main(字符串[]args){
//启动嵌入式Hazelcast群集成员。
HazelcastInstance hz=Hazelcast.newHazelcastInstance();
//获取一个名为“items”的分布式映射
IMap items=hz.getMap(“items”);
//向分布式地图添加一些用户
对于(int i=0;i
private void workAroundSolution() {
HazelcastInstance client = HazelcastClient.newHazelcastClient();
IMap<Integer, List> map = client.getMap("map");
int sequence = 10;
for (int i = 0; i < 5; i++) {
int key = i + 1;
int min = i * sequence;
int max = key * sequence;
List<Integer> list = IntStream.range(min, max).boxed().collect(Collectors.toList());
map.put(i, list);
}
int givenValue = 22;
int key = Math.floorDiv(givenValue, sequence);
System.out.println("Key to look up: " + key);
System.out.println("Range of values: " + map.get(key));
}