Today I finally downloaded a community version copy of Oracle NoSQL, I am pretty happy to see a market giant like Oracle in the NoSQL era (Now waiting for DB2 guys to come in too). I’ve used Oracle 9i way back in my history and have been using MySQL for like decades (almost daily basis) and I know how feature rich these platforms are. Now since Oracle has landed with their NoSQL machinery, I just went through documentation from developers perspective to have a glimpse of feature sets. Lets go through highlights really quickly:
- It’s a Key Value store that’s scalable, HA, predictable, and really simple.
- Keys can behave like a composed structure of major, and minor keys. Major keys can be imagined just like path in your storage files (Hassan/Zohaib where there are two major keys Hassan and Zohaib) and minor keys can just be imagined like files in the (given major key) path holding your data in bytes (Hassan/Zohaib.birthdate, Hassan/Zohaib.phonenumber, Hassan/Zohaib.image, Hassan/Zohaib.userID holding different type of data). There can be multiple major and minor keys. I find this depth-limitation free structure to be extremely powerful, and really close to JSON structures (Yes it can act as document oriented database when crafted carefully).
- Supports typical CRUD operations with high definition over consistency and durability, which lets you choose the amount of chocolate sauce you can afford on your taste buds.
- A powerful Multi-Get, Get-Iterators, Set-Iterators, and depth controls that can set your retrieval on steroids.
- One word that says it all. Transactions!
- Last but not least. Well documented! Some of NoSQL projects have been suffering with this problem, so right from version 1.1 you are getting a really good documentation which is a big plus.
Despite the good features, I feel it has some set backs or I may say a wish list that can actually be fulfilled:
- You need to talk Java, this will benefit the JVM dialects like Coljure, JRuby, Scala etc. But we can always write some REST API like HBase did in shape of Stargate. I won’t recommend that and I think Oracle should quickly figure out a good protocol (something like Memcache protocol will work) to do so.
- Intelligent client library makes client end thick by maintaining state tables, calculating bounded network hops efficiency, and using major-minor keys to exploit the shards for efficient storage. I find it something like libmemcached or mongos (workings of mongos as library). I can’t call it a set back because some people prefer this way of sharding and distribution. But my favorite is Riak or Cassandra styled model of peers.
I can pretty much see how basic and really powerful this tool can turn out to be. I’ve only considered the Pros and Cons from programming point of view (API) completely ignoring administration and other parts (Will be doing a detailed benchmarks next). I must say I am pretty satisfied until now, and my first impressions are pretty good. Stay tuned for a detailed benchmarks, and stress test.