当缓存值是数组时查询Gridgain

时间:2014-12-18 22:32:17

标签: gridgain

我有一个如下所示的缓存:

密钥:UUID 值:数组[长]

我想获得与特定值对应的密钥。那里的部分是什么样的?

我试过“值=?”和“_value =?”但这些显然无效。

1 个答案:

答案 0 :(得分:0)

哟!

  1. Array [Long]是什么意思?它只是很长[]或者您使用的是Scala吗?

  2. 最简单(但不是最有效)的方法是使用带有谓词{{​​3}}的扫描查询。

  3. 为了获得最佳性能,最好将您的值编入索引,因此我建议为您的数组安装一个特殊的包装类:

    class MyArray implements Comparable<MyArray>, Serializable {
        private long[] arr;
    
        // implement compareTo,hashCode,equals
    
        @GridCacheQuerySqlField(index = true)
        public MyArray indexedArray() {
            return this;
        }
    }
    

    然后查询看起来像

    "indexedArray = ?"
    

    作为参数,您必须传递MyArray实例。索引值有点脏,但这是现在唯一的方法。

  4. 顺便说一句,缓存键的列名和SQL中的值是_key和_val但不是_value,你可以编写像

    这样的查询
    "_val = ? and _key > ?"
    

    当然你必须确保你的键和值至少实现hashCode并且正确等于,最好实现Comparable。

相关问题