{"id":2576,"date":"2013-08-19T07:48:00","date_gmt":"2013-08-19T07:48:00","guid":{"rendered":"http:\/\/www.odbms.org\/blog\/?p=2576"},"modified":"2013-08-19T07:48:00","modified_gmt":"2013-08-19T07:48:00","slug":"on-nosql-interview-with-rick-cattell","status":"publish","type":"post","link":"https:\/\/www.odbms.org\/blog\/2013\/08\/on-nosql-interview-with-rick-cattell\/","title":{"rendered":"On NoSQL. Interview with Rick Cattell."},"content":{"rendered":"<blockquote><p>\n<strong><em>&#8221; There aren&#8217;t enough open source contributors to keep projects competitive in features and performance, and the companies supporting the open source offerings will have trouble making enough money to keep the products competitive themselves.  Likewise, companies with closed source will have trouble finding customers willing to risk a closed source (or limited open source) solution. It will be interesting to see what happens.  But I don&#8217;t see NoSQL going away, there is a well-established following.&#8221;<\/em> &#8211;Rick Cattell.<\/strong>\n<\/p><\/blockquote>\n<p>I have asked <strong>Rick Cattell<\/strong>, one of the leading independent consultants in database systems, a few questions on <strong>NoSQL<\/strong>.<\/p>\n<p>RVZ<\/p>\n<p><strong>Q1. For years, you have been studying the NoSQL area and writing articles about scalable databases.  What is new in the last year, in your view?  What is changing?<\/strong><\/p>\n<p><strong>Rick Cattell: <\/strong> It seems like there&#8217;s a new NoSQL player every month or two, now!<br \/>\nIt&#8217;s hard to keep track of them all.  However, a few players have become much more popular than the others.<\/p>\n<p><strong>Q2. Which players are those?<\/strong><\/p>\n<p><strong>Rick Cattell: <\/strong> Among the open source players, I hear the most about <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/www.10gen.com\/products\/mongodb');\"  href=\"http:\/\/www.10gen.com\/products\/mongodb\">MongoDB<\/a>, <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/www.datastax.com\/what-we-offer\/datastax-enterprise-31-whats-new');\"  href=\"http:\/\/www.datastax.com\/what-we-offer\/datastax-enterprise-31-whats-new\">Cassandra<\/a>, and <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/basho.com\/riak\/');\"  href=\"http:\/\/basho.com\/riak\/\">Riak<\/a> now, and often <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/hbase.apache.org');\"  href=\"http:\/\/hbase.apache.org\">HBase<\/a> and <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/redis.io');\"  href=\"http:\/\/redis.io\">Redis<\/a>.  However, don&#8217;t forget that the proprietary players like <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/aws.amazon.com\/simpledb\/');\"  href=\"http:\/\/aws.amazon.com\/simpledb\/\">Amazon<\/a>, <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/www.oracle.com\/technetwork\/products\/nosqldb\/overview\/index.html');\"  href=\"http:\/\/www.oracle.com\/technetwork\/products\/nosqldb\/overview\/index.html\">Oracle<\/a>, and <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/static.googleusercontent.com\/external_content\/untrusted_dlcp\/research.google.com\/es\/\/archive\/spanner-osdi2012.pdf');\"  href=\"http:\/\/static.googleusercontent.com\/external_content\/untrusted_dlcp\/research.google.com\/es\/\/archive\/spanner-osdi2012.pdf\">Google<\/a> have NoSQL systems as well.  <\/p>\n<p><strong>Q3. How do you define &#8220;NoSQL&#8221;?<\/strong><\/p>\n<p><strong>Rick Cattell: <\/strong> I use the term to mean systems that provide a simple operations like key\/value storage or simple records and indexes, and that focus on horizontal scalability for those simple operations.  Some people categorize horizontally scaled <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/en.wikipedia.org\/wiki\/Graph_database');\"  href=\"http:\/\/en.wikipedia.org\/wiki\/Graph_database\">graph databases<\/a> and <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/en.wikipedia.org\/wiki\/Object_database');\"  href=\"http:\/\/en.wikipedia.org\/wiki\/Object_database\">object databases<\/a> to be &#8220;NoSQL&#8221; as well.  However, those systems have very different characteristics.  Graph databases and object databases have to efficiently break connections up over distributed servers, and have to provide operations that somehow span servers as you traverse the graph.  Distributed graph\/object databases have been around for a while, but efficient distribution is a hard problem.  The NoSQL databases simply distribute (or shard) each data type based on a primary key; that&#8217;s easier to do efficiently.<\/p>\n<p><strong>Q4. What other categories of systems do you see?<\/strong><\/p>\n<p><strong>Rick Cattell: <\/strong> Well, there are systems that focus on horizontal scaling for full SQL with joins, which are generally called &#8220;<a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/en.wikipedia.org\/wiki\/NewSQL');\"  href=\"http:\/\/en.wikipedia.org\/wiki\/NewSQL\">NewSQL<\/a>&#8220;, and systems optimized for &#8220;<a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/en.wikipedia.org\/wiki\/Big_data');\"  href=\"http:\/\/en.wikipedia.org\/wiki\/Big_data\">Big Data<\/a>&#8221; analytics, typically based on <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/en.wikipedia.org\/wiki\/Apache_Hadoop');\"  href=\"http:\/\/en.wikipedia.org\/wiki\/Apache_Hadoop\">Hadoop<\/a> <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/en.wikipedia.org\/wiki\/MapReduce');\"  href=\"http:\/\/en.wikipedia.org\/wiki\/MapReduce\">map\/reduce<\/a>.  And of course, you can also sub-categorize the NoSQL systems based on their data model and distribution model.<\/p>\n<p><strong>Q5.  What subcategories would those be?<\/strong><\/p>\n<p><strong>Rick Cattell: <\/strong> On data model, I separate them into <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/en.wikipedia.org\/wiki\/Document-oriented_database');\"  href=\"http:\/\/en.wikipedia.org\/wiki\/Document-oriented_database\">document databases<\/a> like MongoDB and <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/www.couchbase.com');\"  href=\"http:\/\/www.couchbase.com\">CouchBase<\/a>, simple <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/en.wikipedia.org\/wiki\/NoSQL');\"  href=\"http:\/\/en.wikipedia.org\/wiki\/NoSQL\">key\/value stores<\/a> like Riak and Redis, and <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/en.wikipedia.org\/wiki\/Column-oriented_DBMS');\"  href=\"http:\/\/en.wikipedia.org\/wiki\/Column-oriented_DBMS\">grouped-column stores<\/a> like HBase and Cassandra.  However, a categorization by data model is deceptive, because they also differ quite a bit in their performance and concurrency guarantees.  <\/p>\n<p><strong>Q6: Which systems perform best?<\/strong><\/p>\n<p><strong>Rick Cattell: <\/strong> That&#8217;s hard to answer.  Performance is not a scale from &#8220;good&#8221; to &#8220;bad&#8221;&#8230; the different systems have better performance for different kinds of applications.  MongoDB performs incredibly well if all your data fits in distributed memory, for example, and Cassandra does a pretty good job of using disk, because of its scheme of writing new data to the end of disk files and consolidating later.  <\/p>\n<p><strong>Q7: What about their concurrency guarantees?<\/strong><\/p>\n<p><strong>Rick Cattell: <\/strong> They are all over the place on concurrency.  The simplest provide no guarantees, only &#8220;<a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/en.wikipedia.org\/wiki\/Eventual_consistency');\"  href=\"http:\/\/en.wikipedia.org\/wiki\/Eventual_consistency\">eventual consistency<\/a>&#8220;.  You don&#8217;t know which version of data you&#8217;ll get with Cassandra.  MongoDB can keep a <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/docs.mongodb.org\/manual\/core\/replication\/');\"  href=\"http:\/\/docs.mongodb.org\/manual\/core\/replication\/\">&#8220;primary&#8221; replica<\/a> consistent if you can live with their rudimentary locking mechanism.<br \/>\nSome of the new systems try to provide full ACID transactions.  <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/foundationdb.com');\"  href=\"http:\/\/foundationdb.com\">FoundationDB<\/a> and <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/www.oracle.com\/technetwork\/database\/nosqldb\/learnmore\/nosql-database-498041.pdf');\"  href=\"http:\/\/www.oracle.com\/technetwork\/database\/nosqldb\/learnmore\/nosql-database-498041.pdf\">Oracle NoSQL<\/a> claim to do that, but I haven&#8217;t yet verified that.  I have studied <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/static.googleusercontent.com\/external_content\/untrusted_dlcp\/research.google.com\/es\/\/archive\/spanner-osdi2012.pdf');\"  href=\"http:\/\/static.googleusercontent.com\/external_content\/untrusted_dlcp\/research.google.com\/es\/\/archive\/spanner-osdi2012.pdf\">Google&#8217;s Spanner paper<\/a>, and they do provide true ACID consistency in a distributed world, for most practical purposes.  Many people think the <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/en.wikipedia.org\/wiki\/CAP_theorem');\"  href=\"http:\/\/en.wikipedia.org\/wiki\/CAP_theorem\">CAP theorem<\/a> makes that impossible, but I believe their interpretation of the theorem is too narrow: most real applications can have their cake and eat it too, given the right distribution model.   By the way, graph\/object databases also provide ACID consistency, as does <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/voltdb.com');\"  href=\"http:\/\/voltdb.com\">VoltDB<\/a>, but as I mentioned I consider them a different category.  <\/p>\n<p><strong>Q8: I notice you have an unpublished paper on your website, called <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/www.cattell.net\/datastores\/ScalabilityRequirements.html');\"  href=\"http:\/\/www.cattell.net\/datastores\/ScalabilityRequirements.html\">2x2x2 Requirements for Scalability<\/a>.  Can you explain what the 2x2x2 means?<\/strong><\/p>\n<p><strong>Rick Cattell: <\/strong> Well, the first 2x means that there are two different kinds of scalability: horizontal scaling over multiple servers, and vertical scaling for performance on a single server.  The remaining 2&#215;2 means that there are two key features needed to achieve the horizontal and vertical scaling, and for each of those, there are two additional things you have to do to make the features practical.  <\/p>\n<p><strong>Q9: What are those key features?<\/strong><\/p>\n<p><strong>Rick Cattell: <\/strong> For <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/en.wikipedia.org\/wiki\/Scalability#Horizontal_and_vertical_scaling');\"  href=\"http:\/\/en.wikipedia.org\/wiki\/Scalability#Horizontal_and_vertical_scaling\">horizontal scaling<\/a>, you need to partition and replicate your data.  But you also need automatic failure recovery and database evolution with no downtime, because when your database runs on 200 nodes, you can&#8217;t afford to take the database offline and you can&#8217;t afford operator intervention on every failure.<br \/>\nTo achieve v<a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/en.wikipedia.org\/wiki\/Scalability#Horizontal_and_vertical_scaling');\"  href=\"http:\/\/en.wikipedia.org\/wiki\/Scalability#Horizontal_and_vertical_scaling\">ertical scaling<\/a>, you need to take advantage of RAM and you need to avoid random disk I\/O.  You also need to minimize the overhead for locking and latching, and you need to minimize network calls between servers.  There are various ways to do that.  The best systems have all eight of these key features.  These eight features represent my summary of scalable databases in a nutshell.<\/p>\n<p><strong>Q10: What do you see happening with NoSQL, going forward?<\/strong><\/p>\n<p><strong>Rick Cattell: <\/strong> Good question.  I see a lot of consolidation happening&#8230; there are too many players!  There aren&#8217;t enough open source contributors to keep projects competitive in features and performance, and the companies supporting the open source offerings will have trouble making enough money to keep the products competitive themselves.  Likewise, companies with closed source will have trouble finding customers willing to risk a closed source (or limited open source) solution.<br \/>\nIt will be interesting to see what happens.  But I don&#8217;t see NoSQL going away, there is a well-established following.<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n<strong>R. G. G. &#8220;Rick&#8221; Cattell <\/strong> <em> is an independent consultant in database systems.<br \/>\nHe previously worked as a Distinguished Engineer at Sun Microsystems, most recently on open source database systems and distributed database scaling.  Dr. Cattell served for 20+ years at Sun Microsystems in management and senior technical roles, and for 10 years in research at Xerox PARC and at Carnegie-Mellon University. Dr. Cattell is best known for his contributions in database systems and middleware, including database scalability, enterprise Java, object\/relational mapping, object-oriented databases, and database interfaces. He is the author of several dozen papers and five books, and a co-inventor of six U.S. patents.<br \/>\nAt Sun he instigated the Enterprise Java, Java DB, and Java Blend projects, and  was a contributor to a number of Java APIs and products.  He previously developed the Cedar DBMS at Xerox PARC, the Sun Simplify database GUI, and SunSoft&#8217;s CORBA-database integration.<br \/>\nHe is a co-founder of  SQL Access (a predecessor to ODBC), the founder and chair of the <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/www.odbms.org\/odmg\/');\"  href=\"http:\/\/www.odbms.org\/odmg\/\">Object Data Management Group<\/a> (ODMG), the co-creator of JDBC, the author of the world&#8217;s first monograph on object\/relational and object databases, a recipient of the ACM Outstanding PhD Dissertation Award, and an ACM Fellow.<\/em><\/p>\n<p><strong>Related Posts<\/strong><\/p>\n<p>&#8211;<strong><a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/www.odbms.org\/blog\/2013\/07\/on-oracle-nosql-database-interview-with-dave-segleau\/');\"  href=\"http:\/\/www.odbms.org\/blog\/2013\/07\/on-oracle-nosql-database-interview-with-dave-segleau\/\">On Oracle NoSQL Database \u2013Interview with Dave Segleau. July 2, 2013<\/a><\/strong><\/p>\n<p>&#8211;<strong><a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/www.odbms.org\/blog\/2013\/05\/on-real-time-nosql-interview-with-brian-bulkowski\/');\"  href=\"http:\/\/www.odbms.org\/blog\/2013\/05\/on-real-time-nosql-interview-with-brian-bulkowski\/\">On Real Time NoSQL. Interview with Brian Bulkowski. May 21, 2013<\/a><\/strong><\/p>\n<p><strong>Resources<\/strong><\/p>\n<p>&#8211;<strong> <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/www.cattell.net\/rick\/index.html');\"  href=\"http:\/\/www.cattell.net\/rick\/index.html\">Rick Cattell home page.<\/a><\/strong><\/p>\n<p>&#8211; <strong><a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/www.odbms.org\/downloads.aspx');\"  href=\"http:\/\/www.odbms.org\/downloads.aspx\">ODBMS.org Free Downloads and Links<\/a><\/strong><br \/>\n<em>In this section you can download free resources covering the following topics:<\/em><br \/>\n<a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/www.odbms.org\/downloads.aspx#adp');\"  href=\"http:\/\/www.odbms.org\/downloads.aspx#adp\">Big Data and Analytical Data Platforms<\/a><br \/>\n<a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/www.odbms.org\/downloads.aspx#cloud');\"  href=\"http:\/\/www.odbms.org\/downloads.aspx#cloud\">Cloud Data Stores<\/a><br \/>\n<a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/www.odbms.org\/downloads.aspx#odbms');\"  href=\"http:\/\/www.odbms.org\/downloads.aspx#odbms\">Object Databases<\/a><br \/>\n<a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/www.odbms.org\/downloads.aspx#nosql');\"  href=\"http:\/\/www.odbms.org\/downloads.aspx#nosql\">NoSQL Data Stores<\/a><br \/>\n<a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/www.odbms.org\/downloads.aspx#graphs');\"  href=\"http:\/\/www.odbms.org\/downloads.aspx#graphs\">Graphs and Data Stores<\/a><br \/>\n<a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/www.odbms.org\/downloads.aspx#oop');\"  href=\"http:\/\/www.odbms.org\/downloads.aspx#oop\">Object-Oriented Programming<\/a><br \/>\n<a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/www.odbms.org\/downloads.aspx#ef');\"  href=\"http:\/\/www.odbms.org\/downloads.aspx#ef\">Entity Framework (EF) Resources<\/a><br \/>\n<a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/www.odbms.org\/downloads.aspx#orm');\"  href=\"http:\/\/www.odbms.org\/downloads.aspx#orm\">ORM Technology<\/a><br \/>\n<a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/www.odbms.org\/downloads.aspx#im');\"  href=\"http:\/\/www.odbms.org\/downloads.aspx#im\">Object-Relational Impedance Mismatch<\/a><br \/>\n<a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/www.odbms.org\/downloads.aspx#dbms');\"  href=\"http:\/\/www.odbms.org\/downloads.aspx#dbms\">NewSQL, XML, RDF Data Stores, RDBMS<\/a><\/p>\n<p><em>Follow ODBMS.org on Twitter<\/em>: <strong><a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/twitter.com\/odbmsorg');\"  href=\"https:\/\/twitter.com\/odbmsorg\">@odbmsorg<\/a><\/strong><\/p>\n<p>##<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>&#8221; There aren&#8217;t enough open source contributors to keep projects competitive in features and performance, and the companies supporting the open source offerings will have trouble making enough money to keep the products competitive themselves. Likewise, companies with closed source will have trouble finding customers willing to risk a closed source (or limited open source) [&hellip;]<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[27,35,66,92,115,224,239,246,391,412,413,416,428,446,449,450,495,502,504,507,616],"_links":{"self":[{"href":"https:\/\/www.odbms.org\/blog\/wp-json\/wp\/v2\/posts\/2576"}],"collection":[{"href":"https:\/\/www.odbms.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.odbms.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.odbms.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.odbms.org\/blog\/wp-json\/wp\/v2\/comments?post=2576"}],"version-history":[{"count":0,"href":"https:\/\/www.odbms.org\/blog\/wp-json\/wp\/v2\/posts\/2576\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.odbms.org\/blog\/wp-json\/wp\/v2\/media?parent=2576"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.odbms.org\/blog\/wp-json\/wp\/v2\/categories?post=2576"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.odbms.org\/blog\/wp-json\/wp\/v2\/tags?post=2576"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}