{"id":14442,"date":"2020-07-21T08:18:18","date_gmt":"2020-07-21T06:18:18","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/myth-nosql-vs-rdbms-relational-queries-are-unbounded\/"},"modified":"2023-07-13T16:18:47","modified_gmt":"2023-07-13T14:18:47","slug":"myth-nosql-vs-rdbms-relational-queries-are-unbounded","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/myth-nosql-vs-rdbms-relational-queries-are-unbounded\/","title":{"rendered":"The myth of NoSQL (vs. RDBMS) &#8220;a simpler API to bound resources&#8221;"},"content":{"rendered":"<h2>By Franck Pachot<\/h2>\n<p>.<br \/>\nNoSQL provides an API that is much simpler than SQL. And one advantage of it is that users cannot exceed a defined amount of resources in one call. You can read this in <a href=\"http:\/\/alexbdebrie\" target=\"_blank\" rel=\"noopener noreferrer\">Alex DeBrie<\/a> article <a href=\"https:\/\/www.alexdebrie.com\/posts\/dynamodb-no-bad-queries\/#relational-queries-are-unbounded\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/www.alexdebrie.com\/posts\/dynamodb-no-bad-queries\/#relational-queries-are-unbounded<\/a> which I take as a base for some of my &#8220;Myth of NoSQL vs RDBMS&#8221; posts because he explains very well how SQL and NoSQL are perceived by the users. But this idea of simpler API to limit what users can do is is quite common, precedes the NoSQL era, and is still valid with some SQL databases. Here I&#8217;m demonstrating that some RDBMS provide a powerful API and still can bound what users can do. Oracle Database has a resource manager for a long time, like defining resource limits on a per-service base, and those features are very simple to use in the Oracle Autonomous Database &#8211; the managed database in the Oracle Cloud.<\/p>\n<p>I am using the example schema from the ATP database in the free tier, so that anyone can play with this. As usual, what I show on 1 million rows, and one thread, can scale to multiples vCPU and nodes. Once you get the algorithms (execution plan) you know how it scales.<\/p>\n<pre><code>\n06:36:08 SQL&gt; set echo on serveroutput on time on timing on\n\n06:36:14 SQL&gt; select count(*) ,sum(s.amount_sold),sum(p.prod_list_price) \n              from sh.sales s join sh.products p using(prod_id);\n\n\n   COUNT(*)    SUM(S.AMOUNT_SOLD)    SUM(P.PROD_LIST_PRICE)\n___________ _____________________ _________________________\n     918843           98205831.21               86564235.57\n\nElapsed: 00:00:00.092\n\n<\/code><\/pre>\n<p>I have scanned nearly one million rows from the SALES table and joined it to the PRODUCTS table, aggregated data to show the sum from both tables columns. That takes 92 milliseconds here (including network roundtrip). You are not surprised to get fast response with a join because you have read <a href=\"https:\/\/www.dbi-services.com\/blog\/the-myth-of-nosql-vs-rdbms-joins-dont-scale\/\" target=\"_blank\" rel=\"noopener noreferrer\">The myth of NoSQL (vs. RDBMS) \u201cjoins dont scale\u201d<\/a> \ud83d\ude09<\/p>\n<p>Ok, now let&#8217;s say that a developer never learned about SQL joins and wants to do the same with a simpler scan\/query API:<\/p>\n<pre><code>\n06:36:14 SQL&gt; declare\n    l_count_sales    number:=0;\n    l_amount_sold    number:=0;\n    l_sum_list_price number:=0;\n   begin\n    -- scan SALES\n    for s in (select * from sh.sales) loop\n     -- query PRODUCTS\n     for p in (select * from sh.products where prod_id=s.prod_id) loop\n      -- aggregate SUM and COUNT\n      l_count_sales:=l_count_sales+1;\n      l_amount_sold:=l_amount_sold+s.amount_sold;\n      l_sum_list_price:=l_sum_list_price+p.prod_list_price;\n     end loop;\n    end loop;\n    dbms_output.put_line('count_sales='||l_count_sales||' amount_sold='||l_amount_sold||' sum_list_price='||l_sum_list_price);\n   end;\n   \/\n\nPL\/SQL procedure successfully completed.\n\nElapsed: 00:02:00.374\n\n<\/code><\/pre>\n<p>I have run this within the database with PL\/SQL because I don&#8217;t want to add network rountrips and process switches to this bad design. You see that it takes 2 minutes here. Why? Because the risk when providing an API that doesn&#8217;t support joins is that the developer will do the join in his procedural code. Without SQL, the developer has no efficient and agile way to do this GROUP BY and SUM that was a one-liner in SQL: he will either loop on this simple scan\/get API, or she will add a lot of code to initialize and maintain an aggregate derived from this table.<\/p>\n<p>So, what can I do to avoid a user running this kind of query that will take a lot of CPU and IO resources? A simpler API will not solve this problem as the user will workaround this with many small queries. In the Oracle Autonomous Database, the admin can set some limits per service:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-41940\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Annotation-2020-07-21-084607.jpg\" alt=\"\" width=\"1024\" height=\"498\" \/><\/p>\n<p>This says: when connected to the &#8216;TP&#8217; service (which is the one for transactional processing with high concurrency) a user query cannot use more than 5 seconds of elapsed time or the query is canceled.<\/p>\n<p>Now if I run the statement again:<\/p>\n<pre><code>\nError starting at line : 54 File @ \/home\/opc\/demo\/tmp\/atp-resource-mgmt-rules.sql\nIn command -\ndeclare\n l_count_sales    number:=0;\n l_amount_sold    number:=0;\n l_sum_list_price number:=0;\nbegin\n -- scan SALES\n for s in (select * from sh.sales) loop\n  -- query PRODUCTS\n  for p in (select * from sh.products where prod_id=s.prod_id) loop\n   -- aggregate SUM and COUNT\n   l_count_sales:=l_count_sales+1;\n   l_amount_sold:=l_amount_sold+s.amount_sold;\n   l_sum_list_price:=l_sum_list_price+p.prod_list_price;\n  end loop;\n end loop;\n dbms_output.put_line('count_sales='||l_count_sales||' amount_sold='||l_amount_sold||' sum_list_price='||l_sum_list_price);\nend;\nError report -\nORA-56735: elapsed time limit exceeded - call aborted\nORA-06512: at line 9\nORA-06512: at line 9\n56735. 00000 -  \"elapsed time limit exceeded - call aborted\"\n*Cause:    The Resource Manager SWITCH_ELAPSED_TIME limit was exceeded.\n*Action:   Reduce the complexity of the update or query, or contact your\n           database administrator for more information.\n\nElapsed: 00:00:05.930\n<\/code><\/pre>\n<p>I get a message that I exceeded the limit. I hope that, from the message &#8220;Action: Reduce the complexity&#8221;, the user will understand something like &#8220;Please use SQL to process data sets&#8221; and will write a query with the join.<\/p>\n<p>Of course, if the developer is thick-headed he will run his loop from his application code and will run one million short queries that will not exceed the time limit per execution. And it will be worse because of the roundtrips between the application and the database. The &#8220;Set Resource Management Rules&#8221; has another tab than &#8220;Run-away criteria&#8221;, which is &#8220;CPU\/IO shares&#8221;, so that one service can be throttled when the overall resources are saturated. With this, we can give higher priority to critical services. But I prefer to address the root cause and show to the developer that when you need to join data, the most efficient is a SQL JOIN. And when you need to aggregate data, the most efficient is SQL GROUP BY. Of course, we can also re-design the tables to pre-join (<a href=\"https:\/\/www.dbi-services.com\/blog\/oracle-index-on-joins\/\" target=\"_blank\" rel=\"noopener noreferrer\">materialized views in SQL<\/a> or <a href=\"https:\/\/docs.aws.amazon.com\/amazondynamodb\/latest\/developerguide\/bp-modeling-nosql-B.html\" target=\"_blank\" rel=\"noopener noreferrer\">single-table design in DynamoDB<\/a> for example) when data is ingested, but that&#8217;s another topic.<\/p>\n<p>In the autonomous database, the GUI makes it simple, but you can query V$ views to monitor it. For example:<\/p>\n<pre><code>\n06:38:20 SQL&gt; select sid,current_consumer_group_id,state,active,yields,sql_canceled,last_action,last_action_reason,last_action_time,current_active_time,active_time,current_consumed_cpu_time,consumed_cpu_time \n              from v$rsrc_session_info where sid=sys_context('userenv','sid');\n\n\n     SID    CURRENT_CONSUMER_GROUP_ID      STATE    ACTIVE    YIELDS    SQL_CANCELED    LAST_ACTION     LAST_ACTION_REASON       LAST_ACTION_TIME    CURRENT_ACTIVE_TIME    ACTIVE_TIME    CURRENT_CONSUMED_CPU_TIME    CONSUMED_CPU_TIME\n________ ____________________________ __________ _________ _________ _______________ ______________ ______________________ ______________________ ______________________ ______________ ____________________________ ____________________\n   41150                        30407 RUNNING    TRUE             21               1 CANCEL_SQL     SWITCH_ELAPSED_TIME    2020-07-21 06:38:21                       168           5731                         5731                 5731\n\n\n06:39:02 SQL&gt; select id,name,cpu_wait_time,cpu_waits,consumed_cpu_time,yields,sql_canceled \n              from v$rsrc_consumer_group;\n\n\n      ID            NAME    CPU_WAIT_TIME    CPU_WAITS    CONSUMED_CPU_TIME    YIELDS    SQL_CANCELED\n________ _______________ ________________ ____________ ____________________ _________ _______________\n   30409 MEDIUM                         0            0                    0         0               0\n   30406 TPURGENT                       0            0                    0         0               0\n   30407 TP                           286           21                 5764        21               1\n   30408 HIGH                           0            0                    0         0               0\n   30410 LOW                            0            0                    0         0               0\n   19515 OTHER_GROUPS                 324           33                18320        33               0\n\n<\/code><\/pre>\n<p>You can see one SQL canceled here in the TP consumer group and my session was at 5.7 consumed CPU time.<\/p>\n<p>I could have set the same programmatically with:<\/p>\n<pre><code>\nexec cs_resource_manager.update_plan_directive(consumer_group =&gt; 'TP', elapsed_time_limit =&gt; 5);\n<\/code><\/pre>\n<p>So, rather than limiting the API, better to give full SQL possibilities and limit the resources used per service: it makes sense to accept only short queries from the Transaction Processing services (TP\/TPURGENT) and allow more time, but less shares, for the reporting ones (LOW\/MEDIUM\/HIGH)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>By Franck Pachot . NoSQL provides an API that is much simpler than SQL. And one advantage of it is that users cannot exceed a defined amount of resources in one call. You can read this in Alex DeBrie article https:\/\/www.alexdebrie.com\/posts\/dynamodb-no-bad-queries\/#relational-queries-are-unbounded which I take as a base for some of my &#8220;Myth of NoSQL vs [&hellip;]<\/p>\n","protected":false},"author":27,"featured_media":14443,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1739,59],"tags":[1191,947,96,2039,2040,98],"type_dbi":[],"class_list":["post-14442","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-nosql","category-oracle","tag-autonomous","tag-nosql","tag-oracle","tag-resource","tag-runaway","tag-sql"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.5) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>The myth of NoSQL (vs. RDBMS) &quot;a simpler API to bound resources&quot; - dbi Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbi-services.com\/blog\/myth-nosql-vs-rdbms-relational-queries-are-unbounded\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The myth of NoSQL (vs. RDBMS) &quot;a simpler API to bound resources&quot;\" \/>\n<meta property=\"og:description\" content=\"By Franck Pachot . NoSQL provides an API that is much simpler than SQL. And one advantage of it is that users cannot exceed a defined amount of resources in one call. You can read this in Alex DeBrie article https:\/\/www.alexdebrie.com\/posts\/dynamodb-no-bad-queries\/#relational-queries-are-unbounded which I take as a base for some of my &#8220;Myth of NoSQL vs [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/myth-nosql-vs-rdbms-relational-queries-are-unbounded\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2020-07-21T06:18:18+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-07-13T14:18:47+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Annotation-2020-07-21-084607.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1403\" \/>\n\t<meta property=\"og:image:height\" content=\"682\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Oracle Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Oracle Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/myth-nosql-vs-rdbms-relational-queries-are-unbounded\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/myth-nosql-vs-rdbms-relational-queries-are-unbounded\\\/\"},\"author\":{\"name\":\"Oracle Team\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/66ab87129f2d357f09971bc7936a77ee\"},\"headline\":\"The myth of NoSQL (vs. RDBMS) &#8220;a simpler API to bound resources&#8221;\",\"datePublished\":\"2020-07-21T06:18:18+00:00\",\"dateModified\":\"2023-07-13T14:18:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/myth-nosql-vs-rdbms-relational-queries-are-unbounded\\\/\"},\"wordCount\":807,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/myth-nosql-vs-rdbms-relational-queries-are-unbounded\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2022\\\/04\\\/Annotation-2020-07-21-084607.jpg\",\"keywords\":[\"Autonomous\",\"NoSQL\",\"Oracle\",\"resource\",\"runaway\",\"SQL\"],\"articleSection\":[\"NoSQL\",\"Oracle\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/myth-nosql-vs-rdbms-relational-queries-are-unbounded\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/myth-nosql-vs-rdbms-relational-queries-are-unbounded\\\/\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/myth-nosql-vs-rdbms-relational-queries-are-unbounded\\\/\",\"name\":\"The myth of NoSQL (vs. RDBMS) \\\"a simpler API to bound resources\\\" - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/myth-nosql-vs-rdbms-relational-queries-are-unbounded\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/myth-nosql-vs-rdbms-relational-queries-are-unbounded\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2022\\\/04\\\/Annotation-2020-07-21-084607.jpg\",\"datePublished\":\"2020-07-21T06:18:18+00:00\",\"dateModified\":\"2023-07-13T14:18:47+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/66ab87129f2d357f09971bc7936a77ee\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/myth-nosql-vs-rdbms-relational-queries-are-unbounded\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/myth-nosql-vs-rdbms-relational-queries-are-unbounded\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/myth-nosql-vs-rdbms-relational-queries-are-unbounded\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2022\\\/04\\\/Annotation-2020-07-21-084607.jpg\",\"contentUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2022\\\/04\\\/Annotation-2020-07-21-084607.jpg\",\"width\":1403,\"height\":682},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/myth-nosql-vs-rdbms-relational-queries-are-unbounded\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"The myth of NoSQL (vs. RDBMS) &#8220;a simpler API to bound resources&#8221;\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/66ab87129f2d357f09971bc7936a77ee\",\"name\":\"Oracle Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g\",\"caption\":\"Oracle Team\"},\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/author\\\/oracle-team\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"The myth of NoSQL (vs. RDBMS) \"a simpler API to bound resources\" - dbi Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dbi-services.com\/blog\/myth-nosql-vs-rdbms-relational-queries-are-unbounded\/","og_locale":"en_US","og_type":"article","og_title":"The myth of NoSQL (vs. RDBMS) \"a simpler API to bound resources\"","og_description":"By Franck Pachot . NoSQL provides an API that is much simpler than SQL. And one advantage of it is that users cannot exceed a defined amount of resources in one call. You can read this in Alex DeBrie article https:\/\/www.alexdebrie.com\/posts\/dynamodb-no-bad-queries\/#relational-queries-are-unbounded which I take as a base for some of my &#8220;Myth of NoSQL vs [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/myth-nosql-vs-rdbms-relational-queries-are-unbounded\/","og_site_name":"dbi Blog","article_published_time":"2020-07-21T06:18:18+00:00","article_modified_time":"2023-07-13T14:18:47+00:00","og_image":[{"width":1403,"height":682,"url":"http:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Annotation-2020-07-21-084607.jpg","type":"image\/jpeg"}],"author":"Oracle Team","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Oracle Team","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/myth-nosql-vs-rdbms-relational-queries-are-unbounded\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/myth-nosql-vs-rdbms-relational-queries-are-unbounded\/"},"author":{"name":"Oracle Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee"},"headline":"The myth of NoSQL (vs. RDBMS) &#8220;a simpler API to bound resources&#8221;","datePublished":"2020-07-21T06:18:18+00:00","dateModified":"2023-07-13T14:18:47+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/myth-nosql-vs-rdbms-relational-queries-are-unbounded\/"},"wordCount":807,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/myth-nosql-vs-rdbms-relational-queries-are-unbounded\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Annotation-2020-07-21-084607.jpg","keywords":["Autonomous","NoSQL","Oracle","resource","runaway","SQL"],"articleSection":["NoSQL","Oracle"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/myth-nosql-vs-rdbms-relational-queries-are-unbounded\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/myth-nosql-vs-rdbms-relational-queries-are-unbounded\/","url":"https:\/\/www.dbi-services.com\/blog\/myth-nosql-vs-rdbms-relational-queries-are-unbounded\/","name":"The myth of NoSQL (vs. RDBMS) \"a simpler API to bound resources\" - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/myth-nosql-vs-rdbms-relational-queries-are-unbounded\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/myth-nosql-vs-rdbms-relational-queries-are-unbounded\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Annotation-2020-07-21-084607.jpg","datePublished":"2020-07-21T06:18:18+00:00","dateModified":"2023-07-13T14:18:47+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/myth-nosql-vs-rdbms-relational-queries-are-unbounded\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/myth-nosql-vs-rdbms-relational-queries-are-unbounded\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/myth-nosql-vs-rdbms-relational-queries-are-unbounded\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Annotation-2020-07-21-084607.jpg","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Annotation-2020-07-21-084607.jpg","width":1403,"height":682},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/myth-nosql-vs-rdbms-relational-queries-are-unbounded\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"The myth of NoSQL (vs. RDBMS) &#8220;a simpler API to bound resources&#8221;"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee","name":"Oracle Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g","caption":"Oracle Team"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/oracle-team\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/14442","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/27"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=14442"}],"version-history":[{"count":1,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/14442\/revisions"}],"predecessor-version":[{"id":26692,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/14442\/revisions\/26692"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media\/14443"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=14442"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=14442"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=14442"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=14442"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}