What Oracle’s NoSQL SQL Database Reveals

Say what you will about Oracle, it certainly can’t be accused of failing to move with the times. Typically, Oracle comes late to a technology party but arrives dressed to kill.

In the early 1990s, Oracle lagged Sybase and Ingres with respect to stored procedures—but, with its Oracle 7 release, it leapfrogged the competition to deliver an advanced stored procedure language. In the late 1990s, it was attacked as a dinosaur by Informix, which was implementing object-oriented database features. Oracle responded by aggressively promoting Oracle 8.1 as the world’s first “object-relational database."

In the middle of the last decade, open source databases and, in particular, MySQL seemed poised to grab the lion’s share of database deployments. Oracle responded by acquiring key technologies and eventually acquired MySQL itself (through its Sun acquisition).

At the 2008 Oracle OpenWorld conference, then CEO Larry Ellison ridiculed the cloud as "gibberish," "nonsense," and "insane." Between now and then, however, Oracle has completely re-architected its offerings to become cloud-enabled and at last year's Oracle OpenWorld you could have been forgiven for thinking Oracle had invented the cloud, given the cloud focus exhibited at the keynotes.

After initially ignoring Hadoop as a database technology, Oracle embraced it in 2011 with the release of the Oracle Big Data Appliance, a hardware platform that includes the Cloudera distribution of Hadoop.

So, Oracle has a long history of adapting to potentially disruptive technologies through a process of embracing and extending the technologies within their core product portfolio. Recently, we’ve seen signs that Oracle is adopting a similar approach to nonrelational database alternatives provided by companies such as MongoDB. Indeed, Oracle has recently added features to its flagship database product that appear specifically designed to be attractive to MongoDB developers.

In MongoDB, data is stored in the database in the form of JavaScript Object Notation (JSON) documents. Users can query and manipulate data in a MongoDB database using a variety of languages, the most common of which is a JavaScript-based API. MongoDB databases scale using a combination of replication and sharding. In sharding, data is partitioned across multiple independent databases, each of which has its own dedicated storage, effectively a shared-nothing architecture. 

Oracle, of course, has a SQL-based interface to data stored in relational tables, and, to date, its scaling mechanism has used a shared disk clustering system (Oracle RAC). In its most recent releases, however, Oracle is implementing a variety of features that will seem very familiar to MongoDB professionals. 

Oracle now provides very strong support for JSON embedded in the RDBMS. JSON documents may be stored in LOB or character columns and may be retrieved using extensions to SQL. JSON in the database also can be accessed directly by a REST-based JSON query API Simple Oracle Document Access (SODA). This API strongly resembles the MongoDB query API

Oracle REST Data Services (ORDS) offers a REST-based interface to data in relational tables.This provides a non-SQL-based API for retrieving table data using embedded JSON query documents in REST calls, which are very similar to the JavaScript queries used in MongoDB.

Finally, the current Oracle RDBMS beta supports a shared-nothing sharded distributed database, which provides an alternative distributed database model that is architecturally almost identical to MongoDB's sharding scheme.

It would be unfair to describe these new Oracle features as copies of MongoDB functionality. But, it is certainly very interesting to see Oracle explicitly attempting to provide a comfortable experience to MongoDB developers. I doubt these new features will provide serious competition to those attracted by MongoDB because the licensing costs of Oracle make it a very expensive MongoDB substitute. But it does, I think, suggest that Oracle is taking MongoDB and, by implication, other nonrelational upstarts quite seriously.

Oracle described its 8.1 database as an object-relational database. Perhaps some future release of Oracle will be described as a SQL-NoSQL database.