点燃地图对象查询
Map object query over ignite
我是 Ignıte 的初学者。我正在做一个示例应用程序以测量它的查询时间。
所以缓存中的key是String,value是Map。 value Map 中的字段之一是 "order_item_subtotal" 因此查询类似于:
select * from Map where order_item_subtotal>400
示例代码为:
Ignite ignite= Ignition.ignite();
IgniteCache<String, Map<String, Object>> dummyCache= ignite.getOrCreateCache(cfg);
Map<String,Map<String, Object>> bufferMap=new HashMap<String,Map<String, Object>>();
int i=0;
for (String jsonStr : jsonStrs) {
if(i%1000==0){
dummyCache.putAll(bufferMap);
bufferMap.clear();
}
Map data=mapper.readValue(jsonStr, Map.class);
bufferMap.put(data.get("order_item_id").toString(), data);
i++;
}
SqlFieldsQuery asd=new SqlFieldsQuery("select * from Map where order_item_subtotal>400");
List<List<?>> result= dummyCache.query(asd).getAll();
但结果总是“[]”,表示为空。并且没有错误或异常。
我在这里错过了什么?有什么想法吗?
PS: 下面的示例数据
{order_item_id=99, order_item_order_id=37, order_item_product_id=365, order_item_quantity=1, order_item_subtotal=59.9900016784668, order_item_product_price=59.9900016784668, product_id=365, product_category_id=17, product_name=Perfect Fitness Perfect Rip Deck, product_description=, product_price=59.9900016784668, product_image=http://images.acmesports.sports/Perfect+Fitness+Perfect+Rip+Deck}
这是不支持的。您应该使用简单的 POJO class 而不是地图来使其工作。
请注意,Ignite 将以二进制格式存储数据,并且在 运行 查询时不会反序列化对象。所以你仍然不需要在服务器节点上部署 class 定义。请参阅此页面了解更多详情:https://apacheignite.readme.io/docs/binary-marshaller
我是 Ignıte 的初学者。我正在做一个示例应用程序以测量它的查询时间。
所以缓存中的key是String,value是Map。 value Map 中的字段之一是 "order_item_subtotal" 因此查询类似于:
select * from Map where order_item_subtotal>400
示例代码为:
Ignite ignite= Ignition.ignite();
IgniteCache<String, Map<String, Object>> dummyCache= ignite.getOrCreateCache(cfg);
Map<String,Map<String, Object>> bufferMap=new HashMap<String,Map<String, Object>>();
int i=0;
for (String jsonStr : jsonStrs) {
if(i%1000==0){
dummyCache.putAll(bufferMap);
bufferMap.clear();
}
Map data=mapper.readValue(jsonStr, Map.class);
bufferMap.put(data.get("order_item_id").toString(), data);
i++;
}
SqlFieldsQuery asd=new SqlFieldsQuery("select * from Map where order_item_subtotal>400");
List<List<?>> result= dummyCache.query(asd).getAll();
但结果总是“[]”,表示为空。并且没有错误或异常。
我在这里错过了什么?有什么想法吗?
PS: 下面的示例数据
{order_item_id=99, order_item_order_id=37, order_item_product_id=365, order_item_quantity=1, order_item_subtotal=59.9900016784668, order_item_product_price=59.9900016784668, product_id=365, product_category_id=17, product_name=Perfect Fitness Perfect Rip Deck, product_description=, product_price=59.9900016784668, product_image=http://images.acmesports.sports/Perfect+Fitness+Perfect+Rip+Deck}
这是不支持的。您应该使用简单的 POJO class 而不是地图来使其工作。
请注意,Ignite 将以二进制格式存储数据,并且在 运行 查询时不会反序列化对象。所以你仍然不需要在服务器节点上部署 class 定义。请参阅此页面了解更多详情:https://apacheignite.readme.io/docs/binary-marshaller