Question

In our project we already have an embedded in-memory key-value storage for objects, and it is very usable, because it allows us to make indexes for it and query the storage based on it. So, if we have a collection of "Student"s, and a compound index on student.group and student.sex, then we can find all male students from group "ABC". Same for deletion and so on.

Now we have to adopt our service for working in a cloud, so that there will be multiple servers, processing user requests, and they have a shared state, stored in this key-value indexed storage. We tried to adopt memcashed for our needs, and it's almost ideal -- it is fast, simple and proven solution, but it doesn't have indexes, so we can't used to search our temporary data.

Is there any other way to have a remote cache, just like the memcashed, but with indexes?

Thank you.

Was it helpful?

Solution

Try hazelcast, It is an in-memory data grid that distributes the data among servers. You can have indexes just like you described in your question and query for them.

Usage is very simple. Just add Hazelcast.jar and start coding. It can be both embedded and remote.

Here is the index and query usage

add index

IMap<Integer, Student> myDistributedMap = Hazelcast.getMap("students")
myDistributedMap.addIndex("group", false);
myDistributedMap.addIndex("sex", false);

store in imdg

myDistributedMap.put(student.id, student)

;

query

Collection<Student> result = myDistributedMap.values(new SqlPredicate("sex=male AND group=ABC"));

Finally it works fine in the cloud. Ex: EC2

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top