Search code examples
gridgain

Querying Gridgain when the cache-value is an array


I have a cache that looks like this:

Key: UUID Value: Array[Long]

I want to get the key corresponding to a specific value. How does the where-part look like?

I have tried "value = ?" and "_value = ?" but these obviously doesnt work.


Solution

  • Yo!

    1. What do you mean by Array[Long]? Is it just long[] or may be you are using Scala?

    2. The simplest (but not the most effective) way would be using a scan query with predicate (docs here).

    3. To achieve the best performance it is preferable to have your value indexed, so I'd recommend to have a special wrapper class for your array like this:

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

      then the query will look like

      "indexedArray = ?"
      

      where as parameter you have to pass MyArray instance. It is a bit dirty way to index value but this is the only way right now.

    4. By the way column names for cache key and value in SQL are _key and _val but not _value and you can write queries like

      "_val = ? and _key > ?"
      

      of course you have to make sure that your key and value at least implement hashCode and equals correctly, implementing Comparable is preferable.