You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@geode.apache.org by ankit Soni <an...@gmail.com> on 2020/11/20 19:56:00 UTC
Geode - store and query JSON documents
Hello geode-dev,
I am *evaluating usage of Geode (1.12) with storing JSON documents and
querying the same*. I am able to store the json records successfully in
geode but seeking guidance on how to query them.
More details on code and sample json is,
*Sample client-code*
import org.apache.geode.cache.client.ClientCache;
import org.apache.geode.cache.client.ClientCacheFactory;
import org.apache.geode.cache.client.ClientRegionShortcut;
import org.apache.geode.pdx.JSONFormatter;
import org.apache.geode.pdx.PdxInstance;
public class MyTest {
*//NOTE: Below is truncated json, single json document can max
contain an array of col1...col30 (30 diff attributes) within data. *
public final static String jsonDoc_2 = "{" +
"\"data\":[{" +
"\"col1\": {" +
"\"k11\": \"aaa\"," +
"\"k12\":true," +
"\"k13\": 1111," +
"\"k14\": \"2020-12-31:00:00:00\"" +
"}," +
"\"col2\":[{" +
"\"k21\": \"222222\"," +
"\"k22\": true" +
"}]" +
"}]" +
"}";
* //NOTE: Col1....col30 are mix of JSONObject ({}) and JSONArray
([]) as shown above in jsonDoc_2;*
public static void main(String[] args){
//create client-cache
ClientCache cache = new
ClientCacheFactory().addPoolLocator(LOCATOR_HOST, PORT).create();
Region<String, PdxInstance> region = cache.<String,
PdxInstance>createClientRegionFactory(ClientRegionShortcut.CACHING_PROXY)
.create(REGION_NAME);
//store json document
region.put("key", JSONFormatter.fromJSON(jsonDoc_2));
//How to query json document like,
// 1. select col2.k21, col1, col20 from /REGION_NAME where
data.col2.k21 = '222222' OR data.col2.k21 = '333333'
// 2. select col2.k21, col1.k11, col1 from /REGION_NAME where
data.col1.k11 in ('aaa', 'xxx', 'yyy')
}
}
*Server: Region-creation*
gfsh> create region --name=REGION_NAME --type=PARTITION
--redundant-copies=1 --total-num-buckets=61
*Setup: Distributed cluster of 3 nodes
*
*My Observations/Problems*
- Put operation takes excessive time: region.put("key",
JSONFormatter.fromJSON(jsonDoc_2)); - Fetching a single record from () a
file and Storing in geode approx. takes . 3 secs
Is there any suggestions/configuration related to JSONFormatter API or
other to optimize this...?
*Looking forward to guidance on querying this JOSN for above sample
queries.*
*Thanks*
*Ankit.*