通过点燃映射对象查询

时间:2016-04-05 09:06:16

标签: sql ignite

我是Ignıte的初学者。我正在做一个示例应用程序,以测量它的查询时间。

因此缓存中的键是String,值是Map。值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}

1 个答案:

答案 0 :(得分:2)

不支持此功能。您应该使用简单的POJO类而不是地图来使其工作。

请注意,Ignite将以二进制格式存储数据,并且在运行查询时不会反序列化对象。因此,您仍然不需要在服务器节点上部署类定义。有关详细信息,请参阅此页面:https://apacheignite.readme.io/docs/binary-marshaller