membase server to couchbase server migration : Java client

爱⌒轻易说出口 提交于 2019-12-12 04:45:30

问题


I was using aspymemcached client to connect to my membase server. code look like :

public static MemcachedClient MemcachedClient(String bucketName){
        URI server1 = new URI("http://192.168.100.111:8091/pools");
        URI server2 = new URI("http://127.0.0.1:8091/pools");
        ArrayList<URI> serverList = new ArrayList<URI>();
        serverList.add(server1);
        serverList.add(server2);
        return  new MemcachedClient(serverList, bucketName, "");
}

For putting object in cache :

public static void makeMembaseCacheEntry(final String key, final int expiryTime, final Object value, final String bucketName) {
    MemcachedClient client = getMembaseClient(bucketName);
    if (client != null) {
        client.set(key, expiryTime, value);       
}

For getting object from cache :

   public static Object getMembaseCacheEntry(String key) {
        Object value = null;
         try {
            MemcachedClient client = getMembaseClient(bucketName);
            if (client != null) {
                value = client.get(key);
            }
        } catch (Exception e) {
        }
        return value;
}

Now I planning to upgrade membase server to couchbase server, hence I have to use couchbase client java API (Ref : http://docs.couchbase.com/developer/java-2.1/java-intro.html). In cousebase client all operation performed on JsonObject ref :

http://docs.couchbase.com/developer/java-2.0/documents-basics.html

So how can I migrate above two methods to couchbase client


回答1:


if what you are storing is a serialized Object, the Java SDK offers a SerializableDocument type (see https://developer.couchbase.com/documentation/server/4.6/sdk/java/document-operations.html#story-h2-10).

It is compatible with Object stored by the 1.x client built on top of spymemcached, but it uses flags metadata and I'm not sure how migrating from Memcached to Couchbase would influence these (so you might have to write some migrating code at some point).

Compared to Spymemcached, the Couchbase SDK 2.x has an API that is closer to the Couchbase Cluster organization: you start connecting to a Cluster, on which you open a Bucket, on which you can perform key/value operations like get, update, insert, upsert.

In your first snippet, you'll only need the IPs of at least one couchbase node. Out of that you'll get a Cluster (using CouchbaseCluster.create(...)). Then open the Bucket using cluster.openBucket(bucketName). That should be pretty much like:

//TODO make both of these singletons
Cluster cluster = CouchbaseCluster.create("192.168.100.111", "127.0.0.1:8091"); 
Bucket bucket = cluster.openBucket(bucketName, bucketPassword);

Note Cluster and Bucket are thread-safe and should be used as singletons rather than reopened on each call like you do in makeMembaseCacheEntry and getMembaseCacheEntry...

For make you'll need to wrap your value:

Document doc = SerializableDocument.create(key, expiry, value);
bucket.upsert(doc);

(use upsert if you want to create-or-replace, see the docs for other types of kv operations)

For get, you'll need to tell the bucket it deserializes an Object:

SerializableDocument doc = bucket.get(key, SerializableDocument.class);
Object value = doc.content();


来源:https://stackoverflow.com/questions/42918883/membase-server-to-couchbase-server-migration-java-client

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!