1

私はIgniteの初心者です。クエリ時間を測定するためにサンプルアプリを実行しています。

したがって、キャッシュのキーは String で、値は Map です。値マップのフィールドの 1 つが「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}
4

1 に答える 1

2

これはサポートされていません。マップを機能させるには、マップの代わりに単純な POJO クラスを使用する必要があります。

Ignite はデータをバイナリ形式で保存し、クエリの実行時にオブジェクトを逆シリアル化しないことに注意してください。そのため、サーバー ノードにクラス定義をデプロイする必要はありません。詳細については、このページを参照してください: https://apacheignite.readme.io/docs/binary-marshaller

于 2016-04-05T18:54:56.053 に答える