Java調用Geode

Goede序列化

Geode提供了Java序列化之外的序列化選項,爲數據存儲,傳輸和語言類型提供更高的性能和更大的靈活性。 
Geode DataSerialization 比PDXSerialization快 25%,但使用PDX序列化可以減少反序列化的成本。 
Geode 提供的序列化方式(DataSerialization和PDXSerialization),不支持對象的循環引用,如果多次引用相同的對象,則會將每個引用進行序列化,反序列化會生成對象的多個副本。在這種情況下,Java序列化對象一次,當對象進行反序列化時,它將生成具有多個引用的對象的實例。 

Java連接Geode示例

依賴JAR:

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

    <dependency>
      <groupId>com.gemstone.gemfire</groupId>
      <artifactId>gemfire</artifactId>
      <version>8.2.2</version>
    </dependency>

    <dependency>
      <groupId>org.apache.geode</groupId>
      <artifactId>geode-json</artifactId>
      <version>1.1.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.geode</groupId>
      <artifactId>geode-common</artifactId>
      <version>1.1.0</version>
    </dependency>


代碼示例:

public class UserEntity implements Serializable{

    private int id;
    private int age;
    private String name;
    private Date registerdDate;
    
    //getter and setter...
}


public class DataClient {
    private final static Logger logger  = Logger.getLogger(DataClient.class);

    Region region = null;
    @Before
    public void init(){
        ClientCache cache = new ClientCacheFactory().addPoolLocator("db", 10334).create();
        ClientRegionFactory rf = cache.createClientRegionFactory(ClientRegionShortcut.CACHING_PROXY);

        region = rf.create( "user");
    }

    @Test
    public void saveUserEntity(){
        region.putAll(newUserEntity(10));
    }

    @Test
    public void clear(){
        region.clear();
    }

    @Test
    public void delele(){
        region.remove("");
    }

    @Test
    public void update(){
        Object obj = region.get("108");
        Map<String, UserEntity> map = new HashMap<String, UserEntity>();
        UserEntity data= ((UserEntity)obj);
        data.setAge(12);
        map.put("108",data);
        region.putAll(map);
    }

    @Test
    public void getUserEntity(){
        try {
            Object objList = region.query("select * from /user u where u.age > 10");
            Object obj = region.get("108");
            if(objList != null && objList instanceof ResultsBag){
                Iterator iter = ((ResultsBag) objList).iterator();
                while(iter.hasNext()){
                    UserEntity UserEntity = (UserEntity) iter.next();
                    System.out.println("UserEntity"+UserEntity);
                }
            }
            if(obj != null && obj instanceof UserEntity){
                System.out.println("UserEntity"+(UserEntity)obj);
            }
        }catch (Exception e){
            logger.error("error occured.", e);
        }
    }

    @After
    public void done(){
        region.close();
    }

    private Map<Integer, UserEntity> newUserEntity(int size){
        Map<Integer, UserEntity> map = new HashMap<Integer, UserEntity>();
        for (int i = 0; i < size; i++) {
            int id = i+100;
            map.put(id,new UserEntity(id,10+i,"username:"+id,new Date()));
        }
        return map;
    }
}

Geode Query

查詢示例

 // Identify your query string.
 String queryString = "SELECT * FROM /exampleRegion";

 // Get QueryService from Cache.
 QueryService queryService = cache.getQueryService();

 // Create the Query Object.
 Query query = queryService.newQuery(queryString);

 // Execute Query locally. Returns results set.
 SelectResults results = (SelectResults)query.execute();

 // Find the Size of the ResultSet.
 int size = results.size();

 // Iterate through your ResultSet.
 Portfolio p = (Portfolio)results.iterator().next(); /* Region containing Portfolio object. */

查詢語法

WHERE 語法 
SELECT * FROM /user WHERE name=‘username’; 

LIKE 語法 
SELECT * FROM /user WHERE name like ‘use%’; 
SELECT * FROM /user WHERE name like ‘_use_’; 

添加表別名 
SELECT u.id,u.name FROM /user u WHERE u.name=‘username’; 

DISTINCT 
SELECT DISTINCT u.name FROM /user u 

邏輯操作符 AND,OR,NOT 
SELECT * FROM /user WHERE id>4 and id<9 and not id = 6 

其它比較操作 
=,<>,!=,<,⇐,>,>= 
IN,NOT IN 
SELECT * FROM /user WHERE NOT (ID IN SET(1,2)) 

LIMIT 
SELECT * FROM /user WHERE id>0 LIMIT 10 

COUNT 
SELECT COUNT(*) FROM /user WHERE ID > 0 LIMIT 50 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章