{"id":204,"date":"2020-04-22T17:00:09","date_gmt":"2020-04-22T17:00:09","guid":{"rendered":"http:\/\/oracle-internals.com\/blog\/?p=204"},"modified":"2020-04-22T17:40:42","modified_gmt":"2020-04-22T17:40:42","slug":"what-happened-to-nextgres","status":"publish","type":"post","link":"https:\/\/oracle-internals.com\/blog\/2020\/04\/22\/what-happened-to-nextgres\/","title":{"rendered":"What happened to NEXTGRES?"},"content":{"rendered":"\n<p>I&#8217;ve received a few questions in regard to the state of my company, <a rel=\"noreferrer noopener\" href=\"http:\/\/nextgres.com\/\" target=\"_blank\">NEXTGRES<\/a>, and why the site now only contains a terse reference to the Janus Database Compatibility System. While it&#8217;s not specifically related to Oracle Database internals, as it&#8217;s been discussed on my blog and Twitter for many years, here&#8217;s an update.<\/p>\n\n\n\n<p><strong>Misconceptions<\/strong><br>Over the years, people seemed to think NEXTGRES was about migrating away from commercial databases, specifically SQL Server and Oracle Database; this was never the case. The premise behind NEXTGRES was, and always will be, to promote freedom of data. In fact, I spoke to just as many MySQL users who wanted to migrate their databases to Oracle Database as Oracle Database users wanting to migrate to Postgres. I understand where this misconception originated, however, and this is that story.<\/p>\n\n\n\n<p><strong>The History of NEXTGRES<\/strong><br>When I first started NEXTGRES, the software was designed to be a database migration platform not tied to any single database vendor. Originally, the platform supported applications developed for <a rel=\"noreferrer noopener\" href=\"https:\/\/www.postgresql.org\/\" target=\"_blank\">Postgres<\/a>, <a rel=\"noreferrer noopener\" href=\"https:\/\/www.mysql.com\/\" target=\"_blank\">MySQL<\/a>, <a rel=\"noreferrer noopener\" href=\"https:\/\/www.microsoft.com\/en-us\/sql-server\/default.aspx\" target=\"_blank\">SQL Server<\/a>, <a rel=\"noreferrer noopener\" href=\"https:\/\/www.ibm.com\/products\/db2-database\" target=\"_blank\">DB2<\/a>, and <a rel=\"noreferrer noopener\" href=\"https:\/\/www.oracle.com\/database\/\" target=\"_blank\">Oracle Database<\/a>. Unlike other vendors offering a compatible database, the NEXTGRES platform did this in a unique way: by emulating the network protocol, the SQL dialect, the procedural language, and&#8211;most importantly&#8211;the behavior of a database engine. And, it did this in such a way that it was completely transparent to the application &#8211; the application didn&#8217;t even know it was running on a different database. As a result, in many cases, zero lines of code had to be changed &#8211; significantly reducing the overall cost and time involved in migrating.<\/p>\n\n\n\n<p>Paired with a native in-database runtime, as the platform was originally written to use an ODBC connection to the backend database, it was able to emulate the above-mentioned systems on top of whatever database vendor the customer wanted to use &#8211; hence, freedom. Because of this, one could emulate MySQL on top of Oracle Database just as easily as MySQL on top of SQL Server &#8211; and vice versa. In terms of development resources, though, emulating behaviors outside the database is extremely difficult to accomplish in a performant way, and supporting this many database combinations was too much to handle. Consequently, I had to reduce the product to only emulating MySQL, SQL Server, and Oracle Database on top of Postgres.<\/p>\n\n\n\n<p>By limiting the backend database support to only Postgres, which I have a significant amount of development knowledge in, I could focus on adding everything needed to support better and faster emulation. While this created a much better product, in terms of customers, something I&#8217;d faced back in 2005-2008 kept creeping in.<\/p>\n\n\n\n<p>When I worked at <a rel=\"noreferrer noopener\" href=\"https:\/\/www.enterprisedb.com\/\" target=\"_blank\">EnterpriseDB<\/a>, our most difficult selling point was not the feature set we supported, it was convincing businesses to abandon their current database (Oracle Database, SQL Server, or MySQL) in favor of us. There&#8217;s an old saying that goes, &#8220;Nobody ever got fired for choosing (insert big commercial database company name here.)&#8221; While I tend to think anyone who says that should probably be fired, I acknowledge that, when a company is looking to put all its eggs in one basket, it&#8217;s a big risk. Accordingly, companies want some <a rel=\"noreferrer noopener\" href=\"https:\/\/en.wikipedia.org\/wiki\/Social_proof\" target=\"_blank\">social proof<\/a> to boost their confidence in this type of decision.<\/p>\n\n\n\n<p>Regardless of how good a product is, as a small business, it&#8217;s difficult to convince companies to accept this level of risk. EnterpriseDB struggled with this for a long time, which is why they started targeting smaller, unimportant, databases, and new development projects instead. Doing this, over the last 15 years, they&#8217;ve gained pretty good market traction. What I learned there, however, is that most companies don&#8217;t want a wholesale switch &#8211; they just want options. Janus is solely about options.<\/p>\n\n\n\n<p><strong>The Future of NEXTGRES<\/strong><br>The Janus Database Compatibility System is a Postgres-based database system that represents the culmination of all my NEXTGRES efforts. The SQL Dialect Interface (SDI) has been integrated directly into Postgres and supports parsing almost the entirety of MySQL, SQL Server, and Oracle Database syntax. Similarly, the optimizing Universal Procedural Language Compiler was incorporated and supports a large subset of SQL\/PSM, Transact-SQL, and PL\/SQL. Lastly, the protocol support code has also been implemented directly within the database engine, which means there is no significant overhead caused by ODBC or as a man-in-the-middle proxy. The new system even supports a subset of the memcached, Redis, and MongoDB protocol and functionality. While it sounds as though this design is intended to replace a database&#8211;and it <em>can<\/em> be used that way&#8211;it was designed to act as a federated database system.<\/p>\n\n\n\n<p>Not only do companies have data all over the place, on-prem and in the cloud, but also stored in several different databases. Janus builds upon Postgres&#8217; enhanced foreign data wrapper interface to provide companies with a single point of access to their data, wherever it&#8217;s stored, in a way that is compatible with what they&#8217;re currently using. <span style=\"text-decoration: underline;\">A really cool demo demonstrating the transparent use of Janus as a single interface to data stored in MySQL, Postgres, SQL Server, Oracle Database, TimesTen, eXtremeDB, Amazon Redshift, Amazon Aurora, and SQLite will be coming soon.<\/span><\/p>\n\n\n\n<p>In short, while making one database look like another has been a fun career, it&#8217;s not where the market is going. The volume of data companies now retain requires a completely different focus &#8211; one that makes it easy for them to access that data wherever and however it&#8217;s stored. The future of the industry isn&#8217;t about which database is better than the other, it&#8217;s about using the right database for the job.<\/p>\n\n\n\n<p>With Janus, companies are encouraged to choose whichever database they want &#8211; it will simply reduce friction and make it easier for their databases to work together. To me, that&#8217;s freedom.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I&#8217;ve received a few questions in regard to the state of my company, NEXTGRES, and why the site now only contains a terse reference to the Janus Database Compatibility System. While it&#8217;s not specifically related to Oracle Database internals, as it&#8217;s been discussed on my blog and Twitter for many years, here&#8217;s an update. MisconceptionsOver [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7,11],"tags":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>What happened to NEXTGRES? - Oracle Internals<\/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:\/\/oracle-internals.com\/blog\/2020\/04\/22\/what-happened-to-nextgres\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"What happened to NEXTGRES? - Oracle Internals\" \/>\n<meta property=\"og:description\" content=\"I&#8217;ve received a few questions in regard to the state of my company, NEXTGRES, and why the site now only contains a terse reference to the Janus Database Compatibility System. While it&#8217;s not specifically related to Oracle Database internals, as it&#8217;s been discussed on my blog and Twitter for many years, here&#8217;s an update. MisconceptionsOver [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/oracle-internals.com\/blog\/2020\/04\/22\/what-happened-to-nextgres\/\" \/>\n<meta property=\"og:site_name\" content=\"Oracle Internals\" \/>\n<meta property=\"article:published_time\" content=\"2020-04-22T17:00:09+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-04-22T17:40:42+00:00\" \/>\n<meta name=\"author\" content=\"Jonah Harris\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@jonahharris\" \/>\n<meta name=\"twitter:site\" content=\"@jonahharris\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jonah Harris\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/oracle-internals.com\/blog\/2020\/04\/22\/what-happened-to-nextgres\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/oracle-internals.com\/blog\/2020\/04\/22\/what-happened-to-nextgres\/\"},\"author\":{\"name\":\"Jonah Harris\",\"@id\":\"https:\/\/oracle-internals.com\/blog\/#\/schema\/person\/549d9c522c3960b062618b600bb762a4\"},\"headline\":\"What happened to NEXTGRES?\",\"datePublished\":\"2020-04-22T17:00:09+00:00\",\"dateModified\":\"2020-04-22T17:40:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/oracle-internals.com\/blog\/2020\/04\/22\/what-happened-to-nextgres\/\"},\"wordCount\":980,\"publisher\":{\"@id\":\"https:\/\/oracle-internals.com\/blog\/#\/schema\/person\/549d9c522c3960b062618b600bb762a4\"},\"articleSection\":[\"Databases\",\"Tools\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/oracle-internals.com\/blog\/2020\/04\/22\/what-happened-to-nextgres\/\",\"url\":\"https:\/\/oracle-internals.com\/blog\/2020\/04\/22\/what-happened-to-nextgres\/\",\"name\":\"What happened to NEXTGRES? - Oracle Internals\",\"isPartOf\":{\"@id\":\"https:\/\/oracle-internals.com\/blog\/#website\"},\"datePublished\":\"2020-04-22T17:00:09+00:00\",\"dateModified\":\"2020-04-22T17:40:42+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/oracle-internals.com\/blog\/2020\/04\/22\/what-happened-to-nextgres\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/oracle-internals.com\/blog\/2020\/04\/22\/what-happened-to-nextgres\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/oracle-internals.com\/blog\/2020\/04\/22\/what-happened-to-nextgres\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/oracle-internals.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"What happened to NEXTGRES?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/oracle-internals.com\/blog\/#website\",\"url\":\"https:\/\/oracle-internals.com\/blog\/\",\"name\":\"Oracle Internals\",\"description\":\"Researching the Inner Workings of the World&#039;s Most Powerful Database\",\"publisher\":{\"@id\":\"https:\/\/oracle-internals.com\/blog\/#\/schema\/person\/549d9c522c3960b062618b600bb762a4\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/oracle-internals.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/oracle-internals.com\/blog\/#\/schema\/person\/549d9c522c3960b062618b600bb762a4\",\"name\":\"Jonah Harris\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/oracle-internals.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/a6d16ed0f510e8de0929f129471dc1e5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/a6d16ed0f510e8de0929f129471dc1e5?s=96&d=mm&r=g\",\"caption\":\"Jonah Harris\"},\"logo\":{\"@id\":\"https:\/\/oracle-internals.com\/blog\/#\/schema\/person\/image\/\"},\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/jonahharris\/\",\"https:\/\/x.com\/jonahharris\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"What happened to NEXTGRES? - Oracle Internals","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:\/\/oracle-internals.com\/blog\/2020\/04\/22\/what-happened-to-nextgres\/","og_locale":"en_US","og_type":"article","og_title":"What happened to NEXTGRES? - Oracle Internals","og_description":"I&#8217;ve received a few questions in regard to the state of my company, NEXTGRES, and why the site now only contains a terse reference to the Janus Database Compatibility System. While it&#8217;s not specifically related to Oracle Database internals, as it&#8217;s been discussed on my blog and Twitter for many years, here&#8217;s an update. MisconceptionsOver [&hellip;]","og_url":"https:\/\/oracle-internals.com\/blog\/2020\/04\/22\/what-happened-to-nextgres\/","og_site_name":"Oracle Internals","article_published_time":"2020-04-22T17:00:09+00:00","article_modified_time":"2020-04-22T17:40:42+00:00","author":"Jonah Harris","twitter_card":"summary_large_image","twitter_creator":"@jonahharris","twitter_site":"@jonahharris","twitter_misc":{"Written by":"Jonah Harris","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/oracle-internals.com\/blog\/2020\/04\/22\/what-happened-to-nextgres\/#article","isPartOf":{"@id":"https:\/\/oracle-internals.com\/blog\/2020\/04\/22\/what-happened-to-nextgres\/"},"author":{"name":"Jonah Harris","@id":"https:\/\/oracle-internals.com\/blog\/#\/schema\/person\/549d9c522c3960b062618b600bb762a4"},"headline":"What happened to NEXTGRES?","datePublished":"2020-04-22T17:00:09+00:00","dateModified":"2020-04-22T17:40:42+00:00","mainEntityOfPage":{"@id":"https:\/\/oracle-internals.com\/blog\/2020\/04\/22\/what-happened-to-nextgres\/"},"wordCount":980,"publisher":{"@id":"https:\/\/oracle-internals.com\/blog\/#\/schema\/person\/549d9c522c3960b062618b600bb762a4"},"articleSection":["Databases","Tools"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/oracle-internals.com\/blog\/2020\/04\/22\/what-happened-to-nextgres\/","url":"https:\/\/oracle-internals.com\/blog\/2020\/04\/22\/what-happened-to-nextgres\/","name":"What happened to NEXTGRES? - Oracle Internals","isPartOf":{"@id":"https:\/\/oracle-internals.com\/blog\/#website"},"datePublished":"2020-04-22T17:00:09+00:00","dateModified":"2020-04-22T17:40:42+00:00","breadcrumb":{"@id":"https:\/\/oracle-internals.com\/blog\/2020\/04\/22\/what-happened-to-nextgres\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/oracle-internals.com\/blog\/2020\/04\/22\/what-happened-to-nextgres\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/oracle-internals.com\/blog\/2020\/04\/22\/what-happened-to-nextgres\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/oracle-internals.com\/blog\/"},{"@type":"ListItem","position":2,"name":"What happened to NEXTGRES?"}]},{"@type":"WebSite","@id":"https:\/\/oracle-internals.com\/blog\/#website","url":"https:\/\/oracle-internals.com\/blog\/","name":"Oracle Internals","description":"Researching the Inner Workings of the World&#039;s Most Powerful Database","publisher":{"@id":"https:\/\/oracle-internals.com\/blog\/#\/schema\/person\/549d9c522c3960b062618b600bb762a4"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/oracle-internals.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/oracle-internals.com\/blog\/#\/schema\/person\/549d9c522c3960b062618b600bb762a4","name":"Jonah Harris","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/oracle-internals.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/a6d16ed0f510e8de0929f129471dc1e5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a6d16ed0f510e8de0929f129471dc1e5?s=96&d=mm&r=g","caption":"Jonah Harris"},"logo":{"@id":"https:\/\/oracle-internals.com\/blog\/#\/schema\/person\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/in\/jonahharris\/","https:\/\/x.com\/jonahharris"]}]}},"_links":{"self":[{"href":"https:\/\/oracle-internals.com\/blog\/wp-json\/wp\/v2\/posts\/204"}],"collection":[{"href":"https:\/\/oracle-internals.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/oracle-internals.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/oracle-internals.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/oracle-internals.com\/blog\/wp-json\/wp\/v2\/comments?post=204"}],"version-history":[{"count":48,"href":"https:\/\/oracle-internals.com\/blog\/wp-json\/wp\/v2\/posts\/204\/revisions"}],"predecessor-version":[{"id":257,"href":"https:\/\/oracle-internals.com\/blog\/wp-json\/wp\/v2\/posts\/204\/revisions\/257"}],"wp:attachment":[{"href":"https:\/\/oracle-internals.com\/blog\/wp-json\/wp\/v2\/media?parent=204"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/oracle-internals.com\/blog\/wp-json\/wp\/v2\/categories?post=204"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/oracle-internals.com\/blog\/wp-json\/wp\/v2\/tags?post=204"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}