{"id":15920,"date":"2013-07-30T13:00:39","date_gmt":"2013-07-30T10:00:39","guid":{"rendered":"http:\/\/www.javacodegeeks.com\/?p=15920"},"modified":"2013-07-30T08:57:21","modified_gmt":"2013-07-30T05:57:21","slug":"resql","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2013\/07\/resql.html","title":{"rendered":"ReSQL?"},"content":{"rendered":"<p>The NoSQL moniker that was coined circa 2009 marked a move from the \u201ctraditional\u201d relational model. There were quite a few non-relational databases around prior to 2009, but in the last few years we\u2019ve seen an explosion of new offerings (you can see,for example,\u00a0<a title=\"The NoSQL landscape in diagrams\" href=\"http:\/\/arnon.me\/2012\/11\/nosql-landscape-diagrams\/\">the \u201cNoSQL landscape\u201d in a previous post I made<\/a>). Generally speaking, and everything here is a wild generalization, since not all solutions are created equal and there are many types of solutions \u2013 NoSQL solutions mostly means some relaxation of <a href=\"http:\/\/en.wikipedia.org\/wiki\/ACID\">ACID<\/a> constraints, and, as the name implies, the removal of the \u201cStructured Query Language\u201d (SQL) both as a data definition language, and more importantly, as a data manipulation language, in particular SQL\u2019s query capabilities.<a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2013\/07\/nosql.png\"><img decoding=\"async\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2013\/07\/nosql-150x150.png\" alt=\"nosql\" width=\"150\" height=\"150\" class=\"alignright size-thumbnail wp-image-16080\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2013\/07\/nosql-150x150.png 150w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2013\/07\/nosql-200x200.png 200w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2013\/07\/nosql-100x100.png 100w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2013\/07\/nosql-42x42.png 42w\" sizes=\"(max-width: 150px) 100vw, 150px\" \/><\/a><\/p>\n<p>ACID and SQL are a lot to lose and NoSQL solutions offer a few benefits to augment them mainly:<\/p>\n<ul>\n<li>Scalability \u2013 either as relative scalability, meaning scale cheaper than a comparable RDBMS at same scale point; or absolutely \u2013 \u00a0as in scale better than an RDBMS can. Scalability is usually achieved by preferring partition tolerance \u00a0over consistency in Eric Brewer\u2019s\u00a0<a href=\"http:\/\/www.julianbrowne.com\/article\/viewer\/brewers-cap-theorem\">CAP<\/a>\u00a0theorem and relying on \u201ceventual consistency\u201d \u00a0(more on this later)<\/li>\n<li>Simpler models \u2013 i.e. the mapping of programming structures to storage structure is straight forward and thus avoid the whole \u201cobject\/relations mapping quagmire\u201d (or as Ted Neward called it\u00a0\u201d<a href=\"http:\/\/www.codinghorror.com\/blog\/2006\/06\/object-relational-mapping-is-the-vietnam-of-computer-science.html\">Vietnam of computer science\u201d<\/a>\u00a0). I have to say that in my experience this is only a half truth as it only holds to a point and when you need to scale and\/or have high-performance requirements you need to carefully design your schemas and it isn\u2019t always \u201csimple\u201d.<\/li>\n<li>Late binding schemas \u2013 This is a real flexibility boon as you can store data in forms that are close to the origin form and apply the schemas on read so you can deliver poly-strctured data and handle semi-structured data easily.<\/li>\n<\/ul>\n<p>Eventual consistency and simple \u00a0query mechanisms can work for a while and some use cases but as adoption of NoSQL solutions got more widespread we can see that markets needs more.<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<h2>Eventual consistency<\/h2>\n<p>Eventual consistency means that if new updates stop flowing in after a while all reads will return the last updated value \u2013 \u00a0As new updates rarely stops and as \u201cafter a while\u201d is not well defined \u2013 \u00a0this is a rather weak guarantee and we see some efforts to make stronger guarantees. Peter Bailis and Ali Ghodsi, published a good paper called \u201c<a href=\"http:\/\/queue.acm.org\/detail.cfm?id=2462076\">Eventual Consistency Today: Limitations, Extensions, and Beyond<\/a>\u201d where they go over some of the options. The NoSQL landscape is too wide to say this is happens everywhere but some solutions move in this direction, for example, in HBase (the NoSQL I\u2019ve used most in the past few years) we\u2019ve seen the addition of <a href=\"https:\/\/blogs.apache.org\/hbase\/entry\/apache_hbase_internals_locking_and\">\u201cMulti-Version Concurrency Control\u201d <\/a>\u00a0which provide <a href=\"http:\/\/hbase.apache.org\/acid-semantics.html\">ACID guarantees for single row operations<\/a> (which can be tuned down for performance)<\/p>\n<p>Nevertheless, providing real guarantees under real conditions can prove to be rather tricky. I highly recommend reading \u00a0<a href=\"http:\/\/aphyr.com\/tags\/jepsen\">Kyle Kingsbury \u00a0series of great posts on Jepsen<\/a>\u00a0where he looks at how Postgres, MongoDB, Redis and Riak handle writes under network partitioning.<\/p>\n<h2>Queries<\/h2>\n<p>When we look at the NoSQL space we see that a lot of the technologies get better, more advance query\u00a0languages\u00a0e.g. <a href=\"http:\/\/docs.mongodb.org\/manual\/core\/read\/\">mongoDB find some nice features<\/a> ; <a href=\"http:\/\/cassandra.apache.org\/doc\/cql3\/CQL.html#CQLSyntax\">cassandra\u2019s query language <\/a>is at its third version but one technology where introducing queries in general and SQL specifically is becoming form a trend into a\u00a0stampede\u00a0 is Hadoop. Hadoop has a multi-vendor, multi-distro ecosystem (not unlike Linux) and it seems each and everyone of them wants to introduce its own SQL solution : Cloudera offers <a href=\"http:\/\/blog.cloudera.com\/blog\/2012\/10\/cloudera-impala-real-time-queries-in-apache-hadoop-for-real\/\">Impala<\/a>, Hortonworks is working on <a href=\"http:\/\/hortonworks.com\/stinger\/\">Stinger initiative<\/a> to enhance Hive, Pivotal (nee EMC greenplum) has <a href=\"http:\/\/www.gopivotal.com\/sites\/default\/files\/Hawq_WP_042313_FINAL.pdf\">Hawq<\/a> , IBM is working on <a href=\"https:\/\/www.ibm.com\/developerworks\/community\/blogs\/SusanVisser\/entry\/introducing_the_ibm_big_sql_technology_preview1?lang=en\">BigSQL<\/a> and even SalesForce.com (which does not offer a distro) offers an SQL skin for HBase called <a href=\"https:\/\/github.com\/forcedotcom\/phoenix\">Phoenix<\/a>\u00a0. The last <a href=\"http:\/\/hadoopsummit.org\/san-jose\/schedule\/\">Hadoop summit<\/a> <a href=\"http:\/\/www.youtube.com\/watch?v=bzrQnpXnoCI\">had a panel <\/a>where some of these players debated the merits of their respective platforms which is worth listening to<\/p>\n<p>The examples I\u2019ve given above are mainly around hadoop \u2013 naturally, as this is the environment I\u2019ve been working with I am more familiar with it, but more importantly it seems Hadoop has managed to place itself as the main NoSQL, large scale (a.k.a. big data) solution and as such this reSQL trend is more apparent there and it will (and it does) also affect other NoSQL offerings.<\/p>\n<p>The thing is that NoSQL dropped SQL capabilities for simplicity \u2013 wider adoption draws all the capabilities and complexity back,I guess the main problem is that the situation is even more complicated when we\u2019re also dealing with big data and its implications (e.g. late binding schema vs. the schema needs for the *structured* query language; immovable or hard to move data vs joins etc.)<br \/>\n&nbsp;<\/p>\n<div style=\"border: 1px solid #D8D8D8; background: #FAFAFA; width: 100%; padding-left: 5px;\"><b><i>Reference: <\/i><\/b><a href=\"http:\/\/arnon.me\/2013\/07\/nosql-resql\/\">ReSQL?<\/a> from our <a href=\"http:\/\/www.javacodegeeks.com\/jcg\">JCG partner<\/a> Arnon Rotem Gal Oz at the <a href=\"http:\/\/arnon.me\/\">Cirrus Minor<\/a> blog.<\/div>\n","protected":false},"excerpt":{"rendered":"<p>The NoSQL moniker that was coined circa 2009 marked a move from the \u201ctraditional\u201d relational model. There were quite a few non-relational databases around prior to 2009, but in the last few years we\u2019ve seen an explosion of new offerings (you can see,for example,\u00a0the \u201cNoSQL landscape\u201d in a previous post I made). Generally speaking, and &hellip;<\/p>\n","protected":false},"author":368,"featured_media":194,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[372,113],"class_list":["post-15920","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprise-java","tag-big-data","tag-nosql"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>ReSQL?<\/title>\n<meta name=\"description\" content=\"The NoSQL moniker that was coined circa 2009 marked a move from the \u201ctraditional\u201d relational model. There were quite a few non-relational databases around\" \/>\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.javacodegeeks.com\/2013\/07\/resql.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"ReSQL?\" \/>\n<meta property=\"og:description\" content=\"The NoSQL moniker that was coined circa 2009 marked a move from the \u201ctraditional\u201d relational model. There were quite a few non-relational databases around\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2013\/07\/resql.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2013-07-30T10:00:39+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/nosqlunit-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Arnon Rotem Gal Oz\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Arnon Rotem Gal Oz\" \/>\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.javacodegeeks.com\\\/2013\\\/07\\\/resql.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/07\\\/resql.html\"},\"author\":{\"name\":\"Arnon Rotem Gal Oz\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/7c050d119fb422def126f505e56ba6bd\"},\"headline\":\"ReSQL?\",\"datePublished\":\"2013-07-30T10:00:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/07\\\/resql.html\"},\"wordCount\":815,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/07\\\/resql.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/nosqlunit-logo.jpg\",\"keywords\":[\"Big Data\",\"NoSQL\"],\"articleSection\":[\"Enterprise Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/07\\\/resql.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/07\\\/resql.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/07\\\/resql.html\",\"name\":\"ReSQL?\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/07\\\/resql.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/07\\\/resql.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/nosqlunit-logo.jpg\",\"datePublished\":\"2013-07-30T10:00:39+00:00\",\"description\":\"The NoSQL moniker that was coined circa 2009 marked a move from the \u201ctraditional\u201d relational model. There were quite a few non-relational databases around\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/07\\\/resql.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/07\\\/resql.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/07\\\/resql.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/nosqlunit-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/nosqlunit-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/07\\\/resql.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Enterprise Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\\\/enterprise-java\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"ReSQL?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/7c050d119fb422def126f505e56ba6bd\",\"name\":\"Arnon Rotem Gal Oz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/90c5419fe75c8db1c623161efa6ba07ddd0d542952e0687a738eb42046ae34d6?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/90c5419fe75c8db1c623161efa6ba07ddd0d542952e0687a738eb42046ae34d6?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/90c5419fe75c8db1c623161efa6ba07ddd0d542952e0687a738eb42046ae34d6?s=96&d=mm&r=g\",\"caption\":\"Arnon Rotem Gal Oz\"},\"sameAs\":[\"http:\\\/\\\/arnon.me\\\/\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/arnon-rotem-gal-oz\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"ReSQL?","description":"The NoSQL moniker that was coined circa 2009 marked a move from the \u201ctraditional\u201d relational model. There were quite a few non-relational databases around","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.javacodegeeks.com\/2013\/07\/resql.html","og_locale":"en_US","og_type":"article","og_title":"ReSQL?","og_description":"The NoSQL moniker that was coined circa 2009 marked a move from the \u201ctraditional\u201d relational model. There were quite a few non-relational databases around","og_url":"https:\/\/www.javacodegeeks.com\/2013\/07\/resql.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2013-07-30T10:00:39+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/nosqlunit-logo.jpg","type":"image\/jpeg"}],"author":"Arnon Rotem Gal Oz","twitter_card":"summary_large_image","twitter_creator":"@javacodegeeks","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Arnon Rotem Gal Oz","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2013\/07\/resql.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/07\/resql.html"},"author":{"name":"Arnon Rotem Gal Oz","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/7c050d119fb422def126f505e56ba6bd"},"headline":"ReSQL?","datePublished":"2013-07-30T10:00:39+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/07\/resql.html"},"wordCount":815,"commentCount":0,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/07\/resql.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/nosqlunit-logo.jpg","keywords":["Big Data","NoSQL"],"articleSection":["Enterprise Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2013\/07\/resql.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2013\/07\/resql.html","url":"https:\/\/www.javacodegeeks.com\/2013\/07\/resql.html","name":"ReSQL?","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/07\/resql.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/07\/resql.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/nosqlunit-logo.jpg","datePublished":"2013-07-30T10:00:39+00:00","description":"The NoSQL moniker that was coined circa 2009 marked a move from the \u201ctraditional\u201d relational model. There were quite a few non-relational databases around","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/07\/resql.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2013\/07\/resql.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2013\/07\/resql.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/nosqlunit-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/nosqlunit-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2013\/07\/resql.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Enterprise Java","item":"https:\/\/www.javacodegeeks.com\/category\/java\/enterprise-java"},{"@type":"ListItem","position":4,"name":"ReSQL?"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/7c050d119fb422def126f505e56ba6bd","name":"Arnon Rotem Gal Oz","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/90c5419fe75c8db1c623161efa6ba07ddd0d542952e0687a738eb42046ae34d6?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/90c5419fe75c8db1c623161efa6ba07ddd0d542952e0687a738eb42046ae34d6?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/90c5419fe75c8db1c623161efa6ba07ddd0d542952e0687a738eb42046ae34d6?s=96&d=mm&r=g","caption":"Arnon Rotem Gal Oz"},"sameAs":["http:\/\/arnon.me\/"],"url":"https:\/\/www.javacodegeeks.com\/author\/arnon-rotem-gal-oz"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/15920","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/368"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=15920"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/15920\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/194"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=15920"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=15920"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=15920"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}