您的位置:首页 > 编程语言 > Java开发

Java(Geode)

2017-05-29 00:00 141 查看
pom.xml

<dependencies>
<dependency>
<groupId>org.apache.geode</groupId>
<artifactId>geode-core</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>


use cases

data cache server platform
single instance

multiple instances
replication instances
partition instances(shards/buckets)

multiple clusters

java data cache client(insert data/update data/delete data/query data)
rest data cache client(insert data/update data/delete data/query data)


Analysis data in Memory

cache.xml

<?xml version="1.0" encoding="UTF-8"?>
<cache
xmlns="http://geode.apache.org/schema/cache"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://geode.apache.org/schema/cache http://geode.apache.org/schema/cache/cache-1.0.xsd" version="1.0">

<cache-server port="40404"/>
</cache>

InMemoryDataRepository.java

public class InMemoryDataRepository {
private static Map<String, Region<String, Object>> regions = new HashMap<>();
private static CacheFactory cf = new CacheFactory();
private static Cache cache = cf.create();

private static RegionAttributesCreation defaultAttrss = new RegionAttributesCreation();
static {
defaultAttrss.setDataPolicy(DataPolicy.NORMAL);
int idleTimeout = 10 * 1000;
ExpirationAction idleTimeoutAction = ExpirationAction.INVALIDATE;
ExpirationAttributes idleExpiration = new ExpirationAttributes(idleTimeout, idleTimeoutAction);
defaultAttrss.setRegionIdleTimeout(idleExpiration);

int ttlTimeout = 20 * 1000;
ExpirationAction ttlTimeoutAction = ExpirationAction.DESTROY;
ExpirationAttributes ttlExpiration = new ExpirationAttributes(ttlTimeout, ttlTimeoutAction);
defaultAttrss.setEntryTimeToLive(ttlExpiration);

int maxSize = 1000;
EvictionAttributesImpl evictionAttrs = new EvictionAttributesImpl();
evictionAttrs.setObjectSizer(ReflectionObjectSizer.REFLECTION_SIZE);
evictionAttrs.setAlgorithm(EvictionAlgorithm.LRU_ENTRY);
evictionAttrs.setAction(EvictionAction.LOCAL_DESTROY);
evictionAttrs.setMaximum(maxSize);
defaultAttrss.setEvictionAttributes(evictionAttrs);

defaultAttrss.setStatisticsEnabled(true);
defaultAttrss.setScope(Scope.LOCAL);
defaultAttrss.setLoadFactor(0.75f);
defaultAttrss.setOffHeap(false);
}

public static Region<String, Object> createRegion(String regionName, RegionAttributes regionAttrs){
RegionFactory<String, Object> regionFactory = cache.createRegionFactory(defaultAttrss);

Region<String, Object> region = regionFactory.create(regionName);
regions.put(regionName, region);

return region;
}

public static Region<String, Object> createRegion(String regionName){
RegionFactory<String, Object> regionFactory = cache.createRegionFactory(defaultAttrss);

Region<String, Object> region = regionFactory.create(regionName);
regions.put(regionName, region);

return region;
}

public static void destroyRegion(String regionName){
Region<String, Object> region = cache.getRegion(regionName);
region.localDestroyRegion();
regions.remove(regionName);
}

public static void putToRegion(String regionName, String key, Object value){
Region<String, Object> region = cache.getRegion(regionName);
region.put(key, value);
}

public static void putAllToRegion(String regionName, Map<String, Object> rows){
Region<String, Object> region = cache.getRegion(regionName);
region.putAll(rows);
}
public static Object deleteByKey(String regionName, String key){
Region<String, Object> region = cache.getRegion(regionName);
Object result = region.destroy(key);
return result;
}

public static Collection<Object> deleteByKeys(String regionName, Collection<String> keys){
Region<String, Object> region = cache.getRegion(regionName);
Collection<Object> results = keys.stream().map((key) -> { return region.destroy(key);} ).collect(Collectors.toList());
return results;
}

public static Object getByKey(String regionName, String key){
Region<String, Object> region = cache.getRegion(regionName);
Object result = region.get(key);
return result;
}

public static Map<String, Object> getByKeys(String regionName, Collection<String> keys){
Region<String, Object> region = cache.getRegion(regionName);
Map<String, Object> results = region.getAll(keys);
return results;
}

public static Stream<Object> query(String regionName, String oql) throws FunctionDomainException, TypeMismatchException, NameResolutionException, QueryInvocationTargetException{
Region<String, Object> region = cache.getRegion(regionName);
RegionService service = region.getRegionService();
QueryService queryService = service.getQueryService();
Query query = queryService.newQuery("<trace> select max(table['age']) from /zm table where table['age'] >10");
SelectResults<Object> results = (SelectResults<Object>) query.execute();
Stream<Object> stream = results.stream();
return stream;
}
}

Test.java

Map<String, Object> rows = new HashMap<String, Object>();

Map<String, Object> row1 = new HashMap<String, Object>();
row1.put("name", "xiaozhao");
row1.put("age", 28);
rows.put("xz", row1);
Map<String, Object> row2 = new HashMap<String, Object>();
row2.put("name", "xiaomeng");
row2.put("age", 20);
rows.put("xm", row2);

String regionName = "zm";
InMemoryDataRepository.createRegion(regionName);
InMemoryDataRepository.putAllToRegion(regionName, rows);

String oql = "<trace> select max(table['age']) from /zm table where table['age'] >10";

Stream<Object> stream = InMemoryDataRepository.query(regionName, oql);

stream.forEach(System.out::println);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息