{"id":1567,"date":"2009-06-15T01:39:00","date_gmt":"2009-06-15T01:39:00","guid":{"rendered":"http:\/\/www.smartdatacollective.com\/index.php\/post\/19590\/"},"modified":"2009-06-15T01:39:00","modified_gmt":"2009-06-15T01:39:00","slug":"19590","status":"publish","type":"post","link":"https:\/\/www.smartdatacollective.com\/19590\/","title":{"rendered":"The problem with the RDBMS (Part 3) \u2013 Let&#8217;s Get Real"},"content":{"rendered":"<p class=\"zemanta-img\" jquery1245027689050=\"2731\" style=\"margin: 1em; display: block; float: right; width: 250px;\"><a href=\"http:\/\/www.flickr.com\/photos\/53552950@N00\/2283676770\" target=\"_blank\" data-wpel-link=\"external\" rel=\"external noopener noreferrer ugc\"><img loading=\"lazy\" loading=\"lazy\" decoding=\"async\" alt=\"The Passage of Time\" src=\"http:\/\/farm4.static.flickr.com\/3214\/2283676770_6b53f8b77f_m.jpg\" style=\"border: medium none ; display: block;\" width=\"240\" height=\"180\"><\/a><span class=\"zemanta-img-attribution\">Image by <a href=\"http:\/\/www.flickr.com\/photos\/53552950@N00\/2283676770\" target=\"_blank\" data-wpel-link=\"external\" rel=\"external noopener noreferrer ugc\">ToniVC<\/a> via Flickr<\/span><\/p>\n<li><a href=\"http:\/\/blog.tonybain.com\/tony_bain\/2009\/05\/the-problem-with-the-relational-database.html\" target=\"_blank\" data-wpel-link=\"external\" rel=\"external noopener noreferrer ugc\">Introduction<\/a><a href=\"http:\/\/blog.tonybain.com\/tony_bain\/2009\/05\/the-problem-with-the-relational-database.html\" target=\"_blank\" data-wpel-link=\"external\" rel=\"external noopener noreferrer ugc\"><\/a>   <\/li>\n<li><a href=\"http:\/\/blog.tonybain.com\/tony_bain\/2009\/05\/the-problem-with-the-relational-database-part-1-the-deployment-model.html\" target=\"_blank\" data-wpel-link=\"external\" rel=\"external noopener noreferrer ugc\">The Problem with the Relational Database (Part 1 ) \u2013The Deployment Model<\/a><a href=\"http:\/\/blog.tonybain.com\/tony_bain\/2009\/05\/the-problem-with-the-relational-database.html\" target=\"_blank\" data-wpel-link=\"external\" rel=\"external noopener noreferrer ugc\"><\/a><\/li>\n<li><a href=\"http:\/\/blog.tonybain.com\/tony_bain\/2009\/05\/the-problem-with-the-relational-database-part-2-predictability.html\" target=\"_blank\" data-wpel-link=\"external\" rel=\"external noopener noreferrer ugc\">The Problem with the Relational Database (Part 2) \u2013 Predictability<\/a><\/li>\n<p>The two primary trends in data management that have been happening for as long as I can remember are:<\/p>\n<ol>\n<li>The expectations of the volume of data we are can produce and consume is growing rapidly<\/li>\n<li>The expected delay between data production and consumption are decreasing rapidly<\/li>\n<\/ol>\n<p>We have seen \u2018typical\u2019 data volumes of databases grow from MB through GB to a point currently where TB databases are common, and PB databases are the \u201cbig guys\u201d.&nbsp;&nbsp; But at the same time we have seen the expectations around the timeliness of response from these databases also change.&nbsp; What used to be a monthly report became a weekly, then a daily and finally it is not uncommon to have near real-time expectations for databases in terms of data retrieval and analysis.&nbsp; We have been on a continual path towards the point where data is consumed at the same moment in which it is created, either in raw form or in an aggregated or otherwise processed state.&nbsp; <\/p>\n<p>At the other end of the <span class=\"dots\">&#8230;<\/span><br \/>\n<!--more--><\/p>\n<p><!--break--><\/p>\n<p class=\"zemanta-img\" jquery1245027689050=\"2731\" style=\"margin: 1em; display: block; float: right; width: 250px;\"><a href=\"http:\/\/www.flickr.com\/photos\/53552950@N00\/2283676770\" target=\"_blank\" data-wpel-link=\"external\" rel=\"external noopener noreferrer ugc\"><img loading=\"lazy\" loading=\"lazy\" decoding=\"async\" alt=\"The Passage of Time\" src=\"http:\/\/farm4.static.flickr.com\/3214\/2283676770_6b53f8b77f_m.jpg\" style=\"border: medium none ; display: block;\" width=\"240\" height=\"180\"><\/a><span class=\"zemanta-img-attribution\">Image by <a href=\"http:\/\/www.flickr.com\/photos\/53552950@N00\/2283676770\" target=\"_blank\" data-wpel-link=\"external\" rel=\"external noopener noreferrer ugc\">ToniVC<\/a> via Flickr<\/span><\/p>\n<li><a href=\"http:\/\/blog.tonybain.com\/tony_bain\/2009\/05\/the-problem-with-the-relational-database.html\" target=\"_blank\" data-wpel-link=\"external\" rel=\"external noopener noreferrer ugc\">Introduction<\/a><a href=\"http:\/\/blog.tonybain.com\/tony_bain\/2009\/05\/the-problem-with-the-relational-database.html\" target=\"_blank\" data-wpel-link=\"external\" rel=\"external noopener noreferrer ugc\"><\/a>\n<\/li>\n<li><a href=\"http:\/\/blog.tonybain.com\/tony_bain\/2009\/05\/the-problem-with-the-relational-database-part-1-the-deployment-model.html\" target=\"_blank\" data-wpel-link=\"external\" rel=\"external noopener noreferrer ugc\">The Problem with the Relational Database (Part 1 ) \u2013The Deployment Model<\/a><a href=\"http:\/\/blog.tonybain.com\/tony_bain\/2009\/05\/the-problem-with-the-relational-database.html\" target=\"_blank\" data-wpel-link=\"external\" rel=\"external noopener noreferrer ugc\"><\/a><\/li>\n<li><a href=\"http:\/\/blog.tonybain.com\/tony_bain\/2009\/05\/the-problem-with-the-relational-database-part-2-predictability.html\" target=\"_blank\" data-wpel-link=\"external\" rel=\"external noopener noreferrer ugc\">The Problem with the Relational Database (Part 2) \u2013 Predictability<\/a><\/li>\n<p>The two primary trends in data management that have been happening for as long as I can remember are:<\/p>\n<ol>\n<li>The expectations of the volume of data we are can produce and consume is growing rapidly<\/li>\n<li>The expected delay between data production and consumption are decreasing rapidly<\/li>\n<\/ol>\n<p>We have seen \u2018typical\u2019 data volumes of databases grow from MB through GB to a point currently where TB databases are common, and PB databases are the \u201cbig guys\u201d.&nbsp;&nbsp; But at the same time we have seen the expectations around the timeliness of response from these databases also change.&nbsp; What used to be a monthly report became a weekly, then a daily and finally it is not uncommon to have near real-time expectations for databases in terms of data retrieval and analysis.&nbsp; We have been on a continual path towards the point where data is consumed at the same moment in which it is created, either in raw form or in an aggregated or otherwise processed state.&nbsp; <\/p>\n<p>At the other end of the application stack, our ability to move more data around faster has led to new styles of applications that provide users near immediate access to data as it is created.&nbsp; Popular consumer web examples of such applications include Facebook, Twitter, Friend Feed etc.<\/p>\n<p>But at the moment these applications aren\u2019t real time, they are near real time.&nbsp; This means there is a delay of some form between data creation and consumption.&nbsp; These delays may be very short or several minutes depending on the particular application and its current workload.&nbsp; These delays may seem irrelevant for the above mentioned apps, but the difference between \u201cnear real-time\u201d and \u201creal-time\u201d can have a significant impact on the application functionality.&nbsp; I am sure we have all been frustrated when checking in at the airport and choosing a seat, only to get the \u201csorry that seat is no longer available\u201d once you click the ok button for your selection for example.<\/p>\n<\/p>\n<h2>The Problem with the RDBMS<\/h2>\n<p>The problem with the traditional RDBMS is that it is not a real time system.&nbsp; It is poll based.&nbsp; This means a query is constructed, submitted and the results are returned to the application.&nbsp; This itself may happen very quickly, maybe only a few ms to execute and receive a resultset.&nbsp; However the problem is of course, the data is only \u201cvalid\u201d for the exact moment when the query was executed.&nbsp; From that moment onwards the data becomes stale and numerous changes could be happening on the data within the RDBMS while the extracted resultset is processed. <\/p>\n<\/p>\n<p><em><span style=\"font-family: Arial; background-color: rgb(230, 230, 230);\">NOTE: Yes I am aware that the disconnected approach is modern and a server side cursor approach used to be common.&nbsp; We moved away from server side results processing for scalability purposes, but regardless even with server side resultset processing you weren\u2019t automatically updated with the data changed.<\/span><\/em><\/p>\n<p>Using my example above, while I am deciding if I want a window or an isle or if it is better to have a middle seat at the front of the plane or an isle at the back, the underlying data set could be receiving numerous updates.&nbsp; When I finally make my selection the dataset could be completely invalid requiring me to start the whole process again.<\/p>\n<p>While this is a very simplistic example, the issue here is the trend towards real-time in the user experience layer is not supported by the current interfacing mechanisms to a RDBMS.&nbsp; While we are seeing <a class=\"zem_slink\" href=\"http:\/\/en.wikipedia.org\/wiki\/Ajax_%28programming%29\" rel=\"wikipedia external noopener noreferrer ugc\" title=\"Ajax (programming)\" target=\"_blank\" data-wpel-link=\"external\">AJAX<\/a> etc being used to provide an interface which can update data in real time, underneath likely that data is still being collected from polled queries running intermittently.<\/p>\n<h2>Real time &amp; Efficiency<br \/><\/h2>\n<p>One solution to this problem may be simply to run our polling cycles are such a high rate that the difference between real-time and near real-time becomes indistinguishable.&nbsp; This is possible but of course, it comes at a high cost in terms of impact on scalability.<\/p>\n<p>Let me use a fictitious example to highlight this.&nbsp; Imagine a Twitter like messaging system.&nbsp; This system is to provide a real time like experience to their users so they set a 2 second polling cycle for all client update queries.<\/p>\n<p>For the purpose of this example, let us assume that we have 1 million users.&nbsp; Those 1 million users have a different usage profiles, for this example let us assume that:<\/p>\n<ul>\n<li>50% of users get 1 message a day<\/li>\n<li>20% of users get 10 messages a day<\/li>\n<li>15% of users get 30 messages a day<\/li>\n<li>10% of users get 200 messages a day<\/li>\n<li>4% of users get 1000 messages a day<\/li>\n<li>1% of users get 5000 messages a day<\/li>\n<\/ul>\n<p>Ok, a couple more assumptions:<\/p>\n<ul>\n<li>To poll and retrieve an empty poll requires 5 \u201cresources\u201d (CPU, DISK, NETWORK)<\/li>\n<li>To poll and retrieve a message empty poll requires 50 \u201cresources\u201d (CPU, DISK, NETWORK)<\/li>\n<\/ul>\n<p>Now let\u2019s compare a system which polls the database every 2 seconds with an alternative system in which messages are pushed from the database on creation to the client on creation.<\/p>\n<p><\/p>\n<table style=\"width: 359pt; border-collapse: collapse;\" width=\"479\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n<colgroup>\n<col style=\"width: 65pt;\" width=\"87\">\n<col style=\"width: 82pt;\" width=\"109\">\n<col style=\"width: 90pt;\" width=\"120\">\n<col style=\"width: 74pt;\" width=\"99\">\n<col style=\"width: 48pt;\" width=\"64\"><\/colgroup>\n<tbody>\n<tr style=\"height: 38.25pt;\" height=\"51\">\n<td class=\"xl63\" style=\"border: 0.5pt solid rgb(216, 216, 216); width: 65pt; height: 38.25pt; background-color: rgb(242, 242, 242);\" width=\"87\" height=\"51\"><strong><span style=\"font-size: 11pt; font-family: Calibri;\">% User Base<\/span><\/strong><\/td>\n<td class=\"xl63\" style=\"border-style: solid solid solid none; border-color: rgb(216, 216, 216); border-width: 0.5pt 0.5pt 0.5pt medium; font-weight: bold; font-size: 11pt; width: 82pt; font-family: Calibri; background-color: rgb(242, 242, 242);\" width=\"109\">Replies per day<\/td>\n<td class=\"xl63\" style=\"border-style: solid solid solid none; border-color: rgb(216, 216, 216); border-width: 0.5pt 0.5pt 0.5pt medium; font-weight: bold; font-size: 11pt; width: 90pt; font-family: Calibri; background-color: rgb(242, 242, 242);\" width=\"120\">Poll Resources<\/td>\n<td class=\"xl63\" style=\"border-style: solid solid solid none; border-color: rgb(216, 216, 216); border-width: 0.5pt 0.5pt 0.5pt medium; font-weight: bold; font-size: 11pt; width: 74pt; font-family: Calibri; background-color: rgb(242, 242, 242);\" width=\"99\">Push Resources<\/td>\n<td class=\"xl63\" style=\"border-style: solid solid solid none; border-color: rgb(216, 216, 216); border-width: 0.5pt 0.5pt 0.5pt medium; font-weight: bold; font-size: 11pt; width: 48pt; font-family: Calibri; background-color: rgb(242, 242, 242);\" width=\"64\">Push % of Poll<\/td>\n<\/tr>\n<tr style=\"font-weight: bold; font-size: 11pt; font-family: Calibri; height: 15pt;\" height=\"20\">\n<td class=\"xl64\" style=\"border-style: none solid solid; border-color: rgb(216, 216, 216); border-width: medium 0.5pt 0.5pt; height: 15pt; background-color: transparent;\" align=\"right\" height=\"20\">50<\/td>\n<td class=\"xl64\" style=\"border-style: none solid solid none; border-color: rgb(216, 216, 216); border-width: medium 0.5pt 0.5pt medium; background-color: transparent;\" align=\"right\">1<\/td>\n<td class=\"xl65\" style=\"border-style: none solid solid none; border-color: rgb(216, 216, 216); border-width: medium 0.5pt 0.5pt medium; background-color: transparent;\" align=\"right\">108025000000<\/td>\n<td class=\"xl64\" style=\"border-style: none solid solid none; border-color: rgb(216, 216, 216); border-width: medium 0.5pt 0.5pt medium; background-color: transparent;\" align=\"right\">25000000<\/td>\n<td class=\"xl66\" style=\"border-style: none solid solid none; border-color: rgb(216, 216, 216); border-width: medium 0.5pt 0.5pt medium; background-color: transparent;\" align=\"right\">0.0%<\/td>\n<\/tr>\n<tr style=\"font-size: 11pt; font-family: Calibri; height: 15pt;\" height=\"20\">\n<td class=\"xl64\" style=\"border-style: none solid solid; border-color: rgb(216, 216, 216); border-width: medium 0.5pt 0.5pt; height: 15pt; background-color: transparent;\" align=\"right\" height=\"20\">20<\/td>\n<td class=\"xl64\" style=\"border-style: none solid solid none; border-color: rgb(216, 216, 216); border-width: medium 0.5pt 0.5pt medium; background-color: transparent;\" align=\"right\">10<\/td>\n<td class=\"xl65\" style=\"border-style: none solid solid none; border-color: rgb(216, 216, 216); border-width: medium 0.5pt 0.5pt medium; background-color: transparent;\" align=\"right\">43300000000<\/td>\n<td class=\"xl64\" style=\"border-style: none solid solid none; border-color: rgb(216, 216, 216); border-width: medium 0.5pt 0.5pt medium; background-color: transparent;\" align=\"right\">100000000<\/td>\n<td class=\"xl66\" style=\"border-style: none solid solid none; border-color: rgb(216, 216, 216); border-width: medium 0.5pt 0.5pt medium; background-color: transparent;\" align=\"right\">0.2%<\/td>\n<\/tr>\n<tr style=\"font-size: 11pt; font-family: Calibri; height: 15pt;\" height=\"20\">\n<td class=\"xl64\" style=\"border-style: none solid solid; border-color: rgb(216, 216, 216); border-width: medium 0.5pt 0.5pt; height: 15pt; background-color: transparent;\" align=\"right\" height=\"20\">15<\/td>\n<td class=\"xl64\" style=\"border-style: none solid solid none; border-color: rgb(216, 216, 216); border-width: medium 0.5pt 0.5pt medium; background-color: transparent;\" align=\"right\">30<\/td>\n<td class=\"xl65\" style=\"border-style: none solid solid none; border-color: rgb(216, 216, 216); border-width: medium 0.5pt 0.5pt medium; background-color: transparent;\" align=\"right\">32625000000<\/td>\n<td class=\"xl64\" style=\"border-style: none solid solid none; border-color: rgb(216, 216, 216); border-width: medium 0.5pt 0.5pt medium; background-color: transparent;\" align=\"right\">225000000<\/td>\n<td class=\"xl66\" style=\"border-style: none solid solid none; border-color: rgb(216, 216, 216); border-width: medium 0.5pt 0.5pt medium; background-color: transparent;\" align=\"right\">0.7%<\/td>\n<\/tr>\n<tr style=\"font-size: 11pt; font-family: Calibri; height: 15pt;\" height=\"20\">\n<td class=\"xl64\" style=\"border-style: none solid solid; border-color: rgb(216, 216, 216); border-width: medium 0.5pt 0.5pt; height: 15pt; background-color: transparent;\" align=\"right\" height=\"20\">10<\/td>\n<td class=\"xl64\" style=\"border-style: none solid solid none; border-color: rgb(216, 216, 216); border-width: medium 0.5pt 0.5pt medium; background-color: transparent;\" align=\"right\">200<\/td>\n<td class=\"xl65\" style=\"border-style: none solid solid none; border-color: rgb(216, 216, 216); border-width: medium 0.5pt 0.5pt medium; background-color: transparent;\" align=\"right\">22600000000<\/td>\n<td class=\"xl64\" style=\"border-style: none solid solid none; border-color: rgb(216, 216, 216); border-width: medium 0.5pt 0.5pt medium; background-color: transparent;\" align=\"right\">1000000000<\/td>\n<td class=\"xl66\" style=\"border-style: none solid solid none; border-color: rgb(216, 216, 216); border-width: medium 0.5pt 0.5pt medium; background-color: transparent;\" align=\"right\">4.4%<\/td>\n<\/tr>\n<tr style=\"font-size: 11pt; font-family: Calibri; height: 15pt;\" height=\"20\">\n<td class=\"xl64\" style=\"border-style: none solid solid; border-color: rgb(216, 216, 216); border-width: medium 0.5pt 0.5pt; height: 15pt; background-color: transparent;\" align=\"right\" height=\"20\">4<\/td>\n<td class=\"xl64\" style=\"border-style: none solid solid none; border-color: rgb(216, 216, 216); border-width: medium 0.5pt 0.5pt medium; background-color: transparent;\" align=\"right\">1000<\/td>\n<td class=\"xl65\" style=\"border-style: none solid solid none; border-color: rgb(216, 216, 216); border-width: medium 0.5pt 0.5pt medium; background-color: transparent;\" align=\"right\">10640000000<\/td>\n<td class=\"xl64\" style=\"border-style: none solid solid none; border-color: rgb(216, 216, 216); border-width: medium 0.5pt 0.5pt medium; background-color: transparent;\" align=\"right\">2000000000<\/td>\n<td class=\"xl66\" style=\"border-style: none solid solid none; border-color: rgb(216, 216, 216); border-width: medium 0.5pt 0.5pt medium; background-color: transparent;\" align=\"right\">18.8%<\/td>\n<\/tr>\n<tr style=\"font-size: 11pt; font-family: Calibri; height: 15pt;\" height=\"20\">\n<td class=\"xl67\" style=\"border-style: none solid; border-color: rgb(216, 216, 216) rgb(216, 216, 216) rgb(236, 233, 216); border-width: medium 0.5pt; height: 15pt; background-color: transparent;\" align=\"right\" height=\"20\">1<\/td>\n<td class=\"xl67\" style=\"border-style: none solid none none; border-color: rgb(216, 216, 216) rgb(216, 216, 216) rgb(236, 233, 216); border-width: medium 0.5pt medium medium; background-color: transparent;\" align=\"right\">5000<\/td>\n<td class=\"xl68\" style=\"border-style: none solid none none; border-color: rgb(216, 216, 216) rgb(216, 216, 216) rgb(236, 233, 216); border-width: medium 0.5pt medium medium; background-color: transparent;\" align=\"right\">4660000000<\/td>\n<td class=\"xl67\" style=\"border-style: none solid none none; border-color: rgb(216, 216, 216) rgb(216, 216, 216) rgb(236, 233, 216); border-width: medium 0.5pt medium medium; background-color: transparent;\" align=\"right\">2500000000<\/td>\n<td class=\"xl69\" style=\"border-style: none solid none none; border-color: rgb(216, 216, 216) rgb(216, 216, 216) rgb(236, 233, 216); border-width: medium 0.5pt medium medium; background-color: transparent;\" align=\"right\">53.6%<\/td>\n<\/tr>\n<tr style=\"font-size: 11pt; font-family: Calibri; height: 15.75pt;\" height=\"21\">\n<td class=\"xl70\" style=\"border-style: solid solid double; border-color: windowtext rgb(216, 216, 216); border-width: 0.5pt 0.5pt 2pt; height: 15.75pt; background-color: transparent;\" align=\"right\" height=\"21\">100<\/td>\n<td class=\"xl70\" style=\"border-style: solid solid double none; border-color: windowtext rgb(216, 216, 216); border-width: 0.5pt 0.5pt 2pt medium; background-color: transparent;\">&nbsp;<\/td>\n<td class=\"xl71\" style=\"border-style: solid solid double none; border-color: windowtext rgb(216, 216, 216); border-width: 0.5pt 0.5pt 2pt medium; background-color: transparent;\" align=\"right\">221850000000<\/td>\n<td class=\"xl70\" style=\"border-style: solid solid double none; border-color: windowtext rgb(216, 216, 216); border-width: 0.5pt 0.5pt 2pt medium; background-color: transparent;\" align=\"right\">5850000000<\/td>\n<td class=\"xl72\" style=\"border-style: solid solid double none; border-color: windowtext rgb(216, 216, 216); border-width: 0.5pt 0.5pt 2pt medium; background-color: transparent;\" align=\"right\">2.6%<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>With the above distributions we would see that a 2 second poll time would have a resource requirement equal to <strong>38x a push based database<\/strong>.&nbsp; This huge overhead is obviously going to be a major overhead and a significant limitation to the upper level of scalability possible.<\/p>\n<\/p>\n<h2>So What to Do?<\/h2>\n<\/p>\n<p>I will really address the resolution path for the limitations of the RDBMS when I complete this series in my summing up post.&nbsp; However specific to this issue, there are a couple of things happening which you should be aware of.<\/p>\n<p>Firstly, traditional RDBMS vendors are trying to shoehorn some form of push based results notifications into existing database platforms.&nbsp; For example, <a href=\"http:\/\/www.bigdatabaselist.com\/wiki\/SQL_Server\" target=\"_blank\" data-wpel-link=\"external\" rel=\"external noopener noreferrer ugc\">SQL Server<\/a> 2005 and above has query notifications and <a href=\"http:\/\/www.bigdatabaselist.com\/wiki\/Oracle\" target=\"_blank\" data-wpel-link=\"external\" rel=\"external noopener noreferrer ugc\">Oracle<\/a> &amp; <a href=\"http:\/\/www.bigdatabaselist.com\/wiki\/MySQL\" target=\"_blank\" data-wpel-link=\"external\" rel=\"external noopener noreferrer ugc\">MySQL<\/a> has something similar (please post in the comments).&nbsp; Current implementations are rudimentary and not suitable for large scale deployment (meant more as a global cache \u201crefresh\u201d event than a user specific resultset update).<\/p>\n<p>Also to watch, there are a couple of startups which have identified <a href=\"http:\/\/www.techcrunch.com\/2009\/06\/03\/ron-conway-to-focus-angel-investments-on-real-time-data\/\" target=\"_blank\" data-wpel-link=\"external\" rel=\"external noopener noreferrer ugc\">the real-time trend that is happening in Silicon Valley<\/a>, and have also identified that existing RDBMS\u2019s aren\u2019t going to be able to fulfill this trend in current form.&nbsp; They are focusing on re-architecting the RDBMS to be push rather than pull based.&nbsp; <a href=\"http:\/\/www.groovycorp.com\/\" target=\"_blank\" data-wpel-link=\"external\" rel=\"external noopener noreferrer ugc\">GroovyCorp<\/a> with their <a href=\"http:\/\/www.groovycorp.com\/index.php?option=com_content&amp;task=view&amp;id=5&amp;Itemid=18\" target=\"_blank\" data-wpel-link=\"external\" rel=\"external noopener noreferrer ugc\">SQL Switch<\/a> product is an organization that I have been speaking to recently.&nbsp; Groovy is the furthest down this particular road that I am aware of, with a real-time push based RDBMS being launched next month.<br \/>&nbsp;<\/p>\n<fieldset class=\"zemanta-related\">\n<legend class=\"zemanta-related-title\">Related articles by Zemanta<\/legend>\n<ul class=\"zemanta-article-ul\">\n<li class=\"zemanta-article-ul-li\"><a href=\"http:\/\/www.readwriteweb.com\/archives\/the_new_friendfeed_real-time_direct_messages_better_filters.php\" target=\"_blank\" data-wpel-link=\"external\" rel=\"external noopener noreferrer ugc\">The New FriendFeed: Real-Time, Direct Messages, Better Filters <\/a>(readwriteweb.com)<\/li>\n<li class=\"zemanta-article-ul-li\"><a href=\"http:\/\/www.technologyquestions.com\/2009\/05\/07\/race-real-time-search834.html\" target=\"_blank\" data-wpel-link=\"external\" rel=\"external noopener noreferrer ugc\">The race to real-time search <\/a>(technologyquestions.com)<\/li>\n<li class=\"zemanta-article-ul-li\"><a href=\"http:\/\/www.techcrunch.com\/2009\/05\/04\/facebook-were-doing-it-live-sort-of\/\" target=\"_blank\" data-wpel-link=\"external\" rel=\"external noopener noreferrer ugc\">Facebook: We&#8217;re Doing It Live, Sort Of <\/a>(techcrunch.com)<\/li>\n<\/ul>\n<\/fieldset>\n<p>\n<div class=\"feedflare\">\n<a href=\"http:\/\/feeds2.feedburner.com\/%7Eff\/TonyBain?a=XWu3TDZtWOo:Nynzf6C135U:yIl2AUoC8zA\" target=\"_blank\" data-wpel-link=\"external\" rel=\"external noopener noreferrer ugc\"><img decoding=\"async\" src=\"http:\/\/feeds2.feedburner.com\/%7Eff\/TonyBain?d=yIl2AUoC8zA\" border=\"0\"><\/a> <a href=\"http:\/\/feeds2.feedburner.com\/%7Eff\/TonyBain?a=XWu3TDZtWOo:Nynzf6C135U:F7zBnMyn0Lo\" target=\"_blank\" data-wpel-link=\"external\" rel=\"external noopener noreferrer ugc\"><img decoding=\"async\" src=\"http:\/\/feeds2.feedburner.com\/%7Eff\/TonyBain?i=XWu3TDZtWOo:Nynzf6C135U:F7zBnMyn0Lo\" border=\"0\"><\/a> <a href=\"http:\/\/feeds2.feedburner.com\/%7Eff\/TonyBain?a=XWu3TDZtWOo:Nynzf6C135U:V_sGLiPBpWU\" target=\"_blank\" data-wpel-link=\"external\" rel=\"external noopener noreferrer ugc\"><img decoding=\"async\" src=\"http:\/\/feeds2.feedburner.com\/%7Eff\/TonyBain?i=XWu3TDZtWOo:Nynzf6C135U:V_sGLiPBpWU\" border=\"0\"><\/a>\n<\/div>\n<p><img loading=\"lazy\" loading=\"lazy\" decoding=\"async\" src=\"http:\/\/feeds2.feedburner.com\/%7Er\/TonyBain\/%7E4\/XWu3TDZtWOo\" width=\"1\" height=\"1\"><br \/><a href=\"http:\/\/blog.tonybain.com\/tony_bain\/2009\/06\/the-problem-with-the-rdbms-part-3-lets-get-real.html\" title=\"http:\/\/blog.tonybain.com\/tony_bain\/2009\/06\/the-problem-with-the-rdbms-part-3-lets-get-real.html\" data-wpel-link=\"external\" rel=\"external noopener noreferrer ugc\">Link to original post&nbsp;<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Image by ToniVC via Flickr Introduction The Problem with the Relational Database (Part 1 ) \u2013The Deployment Model The Problem with the Relational Database (Part 2) \u2013 Predictability The two primary trends in data management that have been happening for as long as I can remember are: The expectations of the volume of data we [&hellip;]<\/p>\n","protected":false},"author":25,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"","_seopress_titles_title":"","_seopress_titles_desc":"","_seopress_robots_index":"","footnotes":""},"categories":[2,4],"tags":[],"class_list":{"0":"post-1567","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-business-intelligence","7":"category-data-mining"},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.smartdatacollective.com\/wp-json\/wp\/v2\/posts\/1567","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.smartdatacollective.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.smartdatacollective.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.smartdatacollective.com\/wp-json\/wp\/v2\/users\/25"}],"replies":[{"embeddable":true,"href":"https:\/\/www.smartdatacollective.com\/wp-json\/wp\/v2\/comments?post=1567"}],"version-history":[{"count":0,"href":"https:\/\/www.smartdatacollective.com\/wp-json\/wp\/v2\/posts\/1567\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.smartdatacollective.com\/wp-json\/wp\/v2\/media?parent=1567"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.smartdatacollective.com\/wp-json\/wp\/v2\/categories?post=1567"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.smartdatacollective.com\/wp-json\/wp\/v2\/tags?post=1567"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}