{"id":3302,"date":"2012-09-25T07:00:07","date_gmt":"2012-09-25T15:00:07","guid":{"rendered":"http:\/\/www.formtek.com\/blog\/?p=3302"},"modified":"2012-09-25T07:00:07","modified_gmt":"2012-09-25T15:00:07","slug":"nosql-polyglot-persistence-matching-the-data-storage-tool-to-the-data","status":"publish","type":"post","link":"https:\/\/formtek.com\/blog\/nosql-polyglot-persistence-matching-the-data-storage-tool-to-the-data\/","title":{"rendered":"NoSQL: Polyglot Persistence &#8212; Matching the Data Storage Tool to the Data"},"content":{"rendered":"<p>&#8220;<a title=\"NoSQL Distilled on Amazon \" href=\"http:\/\/www.amazon.com\/NoSQL-Distilled-Emerging-Polyglot-Persistence\/dp\/0321826620\/ref=cm_cr_pr_product_top\" target=\"_blank\">NoSQL Distilled<\/a>, A brief guide to the world of Polyglot Persistence&#8221; is a great new book by <a title=\"Pramod J. Sadalage\" href=\"http:\/\/sadalage.com\/\" target=\"_blank\">Pramod J. Sadalage<\/a> and <a title=\"Martin Fowler bio\" href=\"http:\/\/martinfowler.com\/nosql.html\" target=\"_blank\">Martin Fowler<\/a>, published by Pearson\u2019s Addison-Wesley Professional. \u00a0Both Sadalage and Fowler now work at\u00a0<a title=\"Thoughtworks.com\" href=\"http:\/\/www.thoughtworks.com\/\" target=\"_blank\">ThoughtWorks<\/a>, a consultancy that specializes in data storage technologies.<\/p>\n<p>The book provides a concise and easy-to-understand overview of NoSQL databases. \u00a0The writing style is very accessible and the total length of the book comes in at only 150 pages. \u00a0It is perhaps one of very few technical books that most of its readers will be able to easily read from cover to cover. \u00a0It&#8217;s a great starting point for coming up to speed on NoSQL technologies. \u00a0[Chapter 13 of the book is available on-line for free <a title=\"NoSQL Distilled book\" href=\"http:\/\/www.informit.com\/articles\/article.aspx?p=1930511\" target=\"_blank\">here<\/a>.]<\/p>\n<p>The book provides good insight into understanding the basic differences between the many available NoSQL options, and the authors provide scenarios that demonstrate which types of data are best handled by different types of NoSQL databases.<\/p>\n<p>The authors cite two primary motivations for adopting NoSQL technology:<\/p>\n<ul>\n<li>To improve programmer productivity<\/li>\n<li>To improve data access performance by being able to better handle large data volumes, reduce latency, and improve throughput<\/li>\n<\/ul>\n<p>Sadalage and Fowler argue that, rather than force-fitting all data into the mold of a relational database,\u00a0a case can be made for considering &#8216;polyglot persistence&#8217;, or the use of multiple types of data stores, selectively choosing the storage technology based on the structure of the data being handled. \u00a0<a title=\"Sadalage and Fowler on polyglot persistence\" href=\"http:\/\/martinfowler.com\/articles\/nosql-intro.pdf\" target=\"_blank\">In a slidedeck from a presentation<\/a> made earlier in 2012, Sadalage and Fowler say that &#8220;Polyglot Persistence is the use of multiple data storage technologies, chosen based on the way data is used by the individual application. Why store binary images in a relational database, when there are better storage systems?&#8221;<\/p>\n<p>The book &#8220;NoSQL Distilled&#8221; classifies NoSQL databases into four categories. \u00a0The breakdown of NoSQL technologies into those four categories, as described in the book, is shown below. \u00a0A more extensive listing of NoSQL databases can be found <a title=\"NoSQL Database listing\" href=\"http:\/\/nosql-database.org\/\" target=\"_blank\">here<\/a> and detailed comments about NoSQL technology is also available online on a site written by <a title=\"Alex Popescu\" href=\"http:\/\/nosql.mypopescu.com\" target=\"_blank\">Alex Popescu<\/a>.\u00a0 \u00a0Fowler and Sadalage note that while most NoSQL databases treat data as aggregations, there are some exceptions to this, like Graph databases.<\/p>\n<div style=\"margin-left: 150px;\">\n<table border=\"1\">\n<tbody>\n<tr>\n<td style=\"width: 250px;\" valign=\"top\"><span style=\"color: blue; font-size: 14px; margin-left: 5px;\">Key-Value Databases<\/span><\/td>\n<td style=\"width: 400px;\"><span style=\"font-size: 14px; margin-left: 5px;\"><a title=\"BerkeleyDB site\" href=\"http:\/\/www.oracle.com\/us\/products\/database\/berkeley-db\" target=\"_blank\">BerkeleyDB<\/a><\/span><\/p>\n<p><span style=\"font-size: 14px; margin-left: 5px;\"><a title=\"LevelDB site\" href=\"http:\/\/code.google.com\/p\/leveldb\" target=\"_blank\">LevelDB<\/a><\/span><\/p>\n<p><span style=\"font-size: 14px; margin-left: 5px;\"><a title=\"memcached site\" href=\"http:\/\/memcached.org\" target=\"_blank\">Memcached<\/a><\/span><\/p>\n<p><span style=\"font-size: 14px; margin-left: 5px;\"><a title=\"Project Voldemort site\" href=\"http:\/\/project-voldemort.com\" target=\"_blank\">Project Voldemort<\/a><\/span><\/p>\n<p><span style=\"font-size: 14px; margin-left: 5px;\"><a title=\"Redis site\" href=\"http:\/\/redis.io\" target=\"_blank\">Redis<\/a><\/span><\/p>\n<p><span style=\"font-size: 14px; margin-left: 5px;\"><a title=\"Riak site\" href=\"http:\/\/wiki.basho.com\/Riak.html\" target=\"_blank\">Riak<\/a><\/span><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\"><span style=\"color: blue; font-size: 14px; margin-left: 5px;\">Document Databases<\/span><\/td>\n<td><span style=\"font-size: 14px; margin-left: 5px;\"><a title=\"CouchDB site\" href=\"http:\/\/couchdb.apache.org\" target=\"_blank\">CouchDB<\/a><\/span><\/p>\n<p><span style=\"font-size: 14px; margin-left: 5px;\"><a title=\"Mongodb site\" href=\"http:\/\/mongodb.org\" target=\"_blank\">MongoDB<\/a><\/span><\/p>\n<p><span style=\"font-size: 14px; margin-left: 5px;\"><a title=\"OrientDB site\" href=\"http:\/\/orientdb.org\" target=\"_blank\">OrientDB<\/a><\/span><\/p>\n<p><span style=\"font-size: 14px; margin-left: 5px;\"><a title=\"RavenDB site\" href=\"http:\/\/ravendb.net\" target=\"_blank\">RavenDB<\/a><\/span><\/p>\n<p><span style=\"font-size: 14px; margin-left: 5px;\"><a title=\"Reids site\" href=\"http:\/\/redis.io\" target=\"_blank\">Redis<\/a><\/span><\/p>\n<p><span style=\"font-size: 14px; margin-left: 5px;\"><a title=\"Terrastore site\" href=\"http:\/\/code.google.com\/p\/terrastore\" target=\"_blank\">Terrastore<\/a><\/span><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\"><span style=\"color: blue; font-size: 14px; margin-left: 5px;\">Column-Family Stores<\/span><\/td>\n<td><span style=\"font-size: 14px; margin-left: 5px;\"><a title=\"Amazon SimpleDB site\" href=\"http:\/\/aws.amazon.com\/simpledb\" target=\"_blank\">Amazon SimpleDB<\/a><\/span><\/p>\n<p><span style=\"font-size: 14px; margin-left: 5px;\"><a title=\"CassandraDB site\" href=\"http:\/\/cassandra.apache.org\" target=\"_blank\">Cassandra<\/a><\/span><\/p>\n<p><span style=\"font-size: 14px; margin-left: 5px;\"><a title=\"HBase site\" href=\"http:\/\/hbase.apache.org\" target=\"_blank\">HBase<\/a><\/span><\/p>\n<p><span style=\"font-size: 14px; margin-left: 5px;\"><a title=\"Hypertable site\" href=\"http:\/\/hypertable.org\" target=\"_blank\">HyperTable<\/a><\/span><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\"><span style=\"color: blue; font-size: 14px; margin-left: 5px;\">Graph Databases<\/span><\/td>\n<td><span style=\"font-size: 14px; margin-left: 5px;\"><a title=\"FlockDB site\" href=\"http:\/\/github.com\/twitter\/flockdb\" target=\"_blank\">FlockDB<\/a><\/span><\/p>\n<p><span style=\"font-size: 14px; margin-left: 5px;\"><a title=\"Hypertable site\" href=\"http:\/\/hypertable.org\" target=\"_blank\">HyperGraphDB<\/a><\/span><\/p>\n<p><span style=\"font-size: 14px; margin-left: 5px;\"><a title=\"Infinite Graph site\" href=\"http:\/\/infinitegraph.com\" target=\"_blank\">Infinite Graph<\/a><\/span><\/p>\n<p><span style=\"font-size: 14px; margin-left: 5px;\"><a title=\"Neo4j site\" href=\"http:\/\/neo4j.org\" target=\"_blank\">Neo4J<\/a><\/span><\/p>\n<p><span style=\"font-size: 14px; margin-left: 5px;\"><a title=\"OrientDB Site\" href=\"http:\/\/orientdb.org\" target=\"_blank\">OrientDB<\/a><\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div class=\"lightsocial_container\"><div class=\"lightsocial_element\"><a class=\"lightsocial_a\" href=\"http:\/\/digg.com\/submit?url=https%3A%2F%2Fformtek.com%2Fblog%2Fnosql-polyglot-persistence-matching-the-data-storage-tool-to-the-data%2F&amp;title=\" target=\"_blank\"><img decoding=\"async\" class=\"lightsocial_img\" src=\"https:\/\/formtek.com\/blog\/wp-content\/plugins\/light-social\/digg.png\" alt=\"Digg This\" title=\"Digg This\" \/><\/a><\/div><div class=\"lightsocial_element\"><a class=\"lightsocial_a\" href=\"http:\/\/www.reddit.com\/submit?url=https%3A%2F%2Fformtek.com%2Fblog%2Fnosql-polyglot-persistence-matching-the-data-storage-tool-to-the-data%2F&amp;title=\" target=\"_blank\"><img decoding=\"async\" class=\"lightsocial_img\" src=\"https:\/\/formtek.com\/blog\/wp-content\/plugins\/light-social\/reddit.png\" alt=\"Reddit This\" title=\"Reddit This\" \/><\/a><\/div><div class=\"lightsocial_element\"><a class=\"lightsocial_a\" href=\"http:\/\/www.stumbleupon.com\/submit?url=https%3A%2F%2Fformtek.com%2Fblog%2Fnosql-polyglot-persistence-matching-the-data-storage-tool-to-the-data%2F&amp;title=\" target=\"_blank\"><img decoding=\"async\" class=\"lightsocial_img\" src=\"https:\/\/formtek.com\/blog\/wp-content\/plugins\/light-social\/stumbleupon.png\" alt=\"Stumble Now!\" title=\"Stumble Now!\" \/><\/a><\/div><div class=\"lightsocial_element\"><a class=\"lightsocial_a\" href=\"http:\/\/buzz.yahoo.com\/buzz?targetUrl=https%3A%2F%2Fformtek.com%2Fblog%2Fnosql-polyglot-persistence-matching-the-data-storage-tool-to-the-data%2F&amp;headline=\" target=\"_blank\"><img decoding=\"async\" class=\"lightsocial_img\" src=\"https:\/\/formtek.com\/blog\/wp-content\/plugins\/light-social\/yahoo_buzz.png\" alt=\"Buzz This\" title=\"Buzz This\" \/><\/a><\/div><div class=\"lightsocial_element\"><a class=\"lightsocial_a\" href=\"http:\/\/www.dzone.com\/links\/add.html?title=&amp;url=https%3A%2F%2Fformtek.com%2Fblog%2Fnosql-polyglot-persistence-matching-the-data-storage-tool-to-the-data%2F\" target=\"_blank\"><img decoding=\"async\" class=\"lightsocial_img\" src=\"https:\/\/formtek.com\/blog\/wp-content\/plugins\/light-social\/dzone.png\" alt=\"Vote on DZone\" title=\"Vote on DZone\" \/><\/a><\/div><div class=\"lightsocial_element\"><a class=\"lightsocial_a\" href=\"http:\/\/www.facebook.com\/sharer.php?t=&amp;u=https%3A%2F%2Fformtek.com%2Fblog%2Fnosql-polyglot-persistence-matching-the-data-storage-tool-to-the-data%2F\" target=\"_blank\"><img decoding=\"async\" class=\"lightsocial_img\" src=\"https:\/\/formtek.com\/blog\/wp-content\/plugins\/light-social\/facebook.png\" alt=\"Share on Facebook\" title=\"Share on Facebook\" \/><\/a><\/div><div class=\"lightsocial_element\"><a class=\"lightsocial_a\" href=\"http:\/\/delicious.com\/save?title=&amp;url=https%3A%2F%2Fformtek.com%2Fblog%2Fnosql-polyglot-persistence-matching-the-data-storage-tool-to-the-data%2F\" target=\"_blank\"><img decoding=\"async\" class=\"lightsocial_img\" src=\"https:\/\/formtek.com\/blog\/wp-content\/plugins\/light-social\/delicious.png\" alt=\"Bookmark this on Delicious\" title=\"Bookmark this on Delicious\" \/><\/a><\/div><div class=\"lightsocial_element\"><a class=\"lightsocial_a\" href=\"http:\/\/www.dotnetkicks.com\/kick\/?title=&amp;url=https%3A%2F%2Fformtek.com%2Fblog%2Fnosql-polyglot-persistence-matching-the-data-storage-tool-to-the-data%2F\" target=\"_blank\"><img decoding=\"async\" class=\"lightsocial_img\" src=\"https:\/\/formtek.com\/blog\/wp-content\/plugins\/light-social\/dotnetkicks.png\" alt=\"Kick It on DotNetKicks.com\" title=\"Kick It on DotNetKicks.com\" \/><\/a><\/div><div class=\"lightsocial_element\"><a class=\"lightsocial_a\" href=\"http:\/\/dotnetshoutout.com\/Submit?title=&amp;url=https%3A%2F%2Fformtek.com%2Fblog%2Fnosql-polyglot-persistence-matching-the-data-storage-tool-to-the-data%2F\" target=\"_blank\"><img decoding=\"async\" class=\"lightsocial_img\" src=\"https:\/\/formtek.com\/blog\/wp-content\/plugins\/light-social\/dotnetshoutout.png\" alt=\"Shout it\" title=\"Shout it\" \/><\/a><\/div><div class=\"lightsocial_element\"><a class=\"lightsocial_a\" href=\"http:\/\/www.linkedin.com\/shareArticle?mini=true&amp;url=https%3A%2F%2Fformtek.com%2Fblog%2Fnosql-polyglot-persistence-matching-the-data-storage-tool-to-the-data%2F&amp;title=&amp;summary=&amp;source=\" target=\"_blank\"><img decoding=\"async\" class=\"lightsocial_img\" src=\"https:\/\/formtek.com\/blog\/wp-content\/plugins\/light-social\/linkedin.png\" alt=\"Share on LinkedIn\" title=\"Share on LinkedIn\" \/><\/a><\/div><div class=\"lightsocial_element\"><a class=\"lightsocial_a\" href=\"http:\/\/www.technorati.com\/faves?add=https%3A%2F%2Fformtek.com%2Fblog%2Fnosql-polyglot-persistence-matching-the-data-storage-tool-to-the-data%2F\" target=\"_blank\"><img decoding=\"async\" class=\"lightsocial_img\" src=\"https:\/\/formtek.com\/blog\/wp-content\/plugins\/light-social\/technorati.png\" alt=\"Bookmark this on Technorati\" title=\"Bookmark this on Technorati\" \/><\/a><\/div><div class=\"lightsocial_element\"><a class=\"lightsocial_a\" href=\"http:\/\/twitter.com\/home?status=Reading+https%3A%2F%2Fformtek.com%2Fblog%2Fnosql-polyglot-persistence-matching-the-data-storage-tool-to-the-data%2F\" target=\"_blank\"><img decoding=\"async\" class=\"lightsocial_img\" src=\"https:\/\/formtek.com\/blog\/wp-content\/plugins\/light-social\/twitter.png\" alt=\"Post on Twitter\" title=\"Post on Twitter\" \/><\/a><\/div><div class=\"lightsocial_element\"><a class=\"lightsocial_a\" href=\"http:\/\/www.google.com\/buzz\/post?url=https%3A%2F%2Fformtek.com%2Fblog%2Fnosql-polyglot-persistence-matching-the-data-storage-tool-to-the-data%2F\" target=\"_blank\"><img decoding=\"async\" class=\"lightsocial_img\" src=\"https:\/\/formtek.com\/blog\/wp-content\/plugins\/light-social\/google_buzz.png\" alt=\"Google Buzz (aka. Google Reader)\" title=\"Google Buzz (aka. Google Reader)\" \/><\/a><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>&#8220;NoSQL Distilled, A brief guide to the world of Polyglot Persistence&#8221; is a great new book by Pramod J. Sadalage and Martin Fowler, published by Pearson\u2019s Addison-Wesley Professional. \u00a0Both Sadalage and Fowler now work at\u00a0ThoughtWorks, a consultancy that specializes in<span class=\"ellipsis\">&hellip;<\/span><\/p>\n<div class=\"read-more\"><a href=\"https:\/\/formtek.com\/blog\/nosql-polyglot-persistence-matching-the-data-storage-tool-to-the-data\/\">Read more &#8250;<\/a><\/div>\n<p><!-- end of .read-more --><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-3302","post","type-post","status-publish","format-standard","hentry","category-big-data"],"_links":{"self":[{"href":"https:\/\/formtek.com\/blog\/wp-json\/wp\/v2\/posts\/3302","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/formtek.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/formtek.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/formtek.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/formtek.com\/blog\/wp-json\/wp\/v2\/comments?post=3302"}],"version-history":[{"count":0,"href":"https:\/\/formtek.com\/blog\/wp-json\/wp\/v2\/posts\/3302\/revisions"}],"wp:attachment":[{"href":"https:\/\/formtek.com\/blog\/wp-json\/wp\/v2\/media?parent=3302"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/formtek.com\/blog\/wp-json\/wp\/v2\/categories?post=3302"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/formtek.com\/blog\/wp-json\/wp\/v2\/tags?post=3302"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}