{"id":2167,"date":"2016-02-19T15:00:02","date_gmt":"2016-02-19T15:00:01","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2167"},"modified":"2023-11-22T22:48:05","modified_gmt":"2023-11-23T06:48:05","slug":"moving-from-oracle-to-couchbase","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/moving-from-oracle-to-couchbase\/","title":{"rendered":"Moving from Oracle to Couchbase"},"content":{"rendered":"<p>Oracle was the first database I developed with, so I know that thinking about switching to something like NoSQL and leaving behind the relational model can seem like a scary thing. The thing is, it really wasn&#8217;t scary when I finally opted to make the switch to the NoSQL document model that Couchbase offers. This is because unlike other NoSQL databases, Couchbase offers a SQL-like language that would seem very familiar to an RDBMS user.<\/p>\n<p>To make the transition easier, we&#8217;re going to walk through a scenario where you&#8217;re using an Oracle RDBMS and would like to transition away to Couchbase.<\/p>\n<h2>Key Differences Between Oracle and Couchbase<\/h2>\n<p>Coming from Oracle, I take it you already know that it is a relational database that consists of tables, rows, and columns. Pretty standard when it comes to any relational database. This is not the case with a NoSQL document database like Couchbase. Instead you&#8217;re working with JSON objects and arrays that have no structure and pretty much no limitations.<\/p>\n<p>Although data modeling is, in my opinion, the largest difference, it isn&#8217;t the only one. However, let&#8217;s start there.<\/p>\n<h3>The Relational Database Data Model<\/h3>\n<p>To keep things simple and easy to follow in this article, let&#8217;s assume we have the following tables:<\/p>\n<ul>\n<li>customer\n<ul>\n<li>id: numeric primary key<\/li>\n<li>first_name: varchar<\/li>\n<li>last_name: varchar<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>customer_history\n<ul>\n<li>id: numeric primary key<\/li>\n<li>product_id: numeric foreign key<\/li>\n<li>quantity: numeric<\/li>\n<li>customer_address<\/li>\n<li>id: numeric primary key<\/li>\n<li>customer_id: numeric foreign key<\/li>\n<li>city: varchar<\/li>\n<li>state: varchar<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>product\n<ul>\n<li>id: numeric primary key<\/li>\n<li>name: varchar<\/li>\n<li>description: varchar<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>product_review\n<ul>\n<li>id: numeric primary key<\/li>\n<li>product_id: numeric foreign key<\/li>\n<li>customer_id: numeric foreign key<\/li>\n<li>review: varchar<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>The above tables and columns are not the most complex, but they prove the relational model. They are all connected by the use of primary and foreign key relationships.<\/p>\n<h3>Options for a NoSQL Data Model<\/h3>\n<p>Because NoSQL is schema-less, there are multiple ways to model the data we just saw in Oracle.<\/p>\n<h4>Referring Documents<\/h4>\n<p>Referring documents will probably seem most familiar to you in terms of relational data. In an RDBMS like Oracle, you are referring to other rows of data through primary and foreign keys. There is no concept of a primary or foreign key in NoSQL, but that doesn&#8217;t mean you can&#8217;t rig together the same kind of relationship.<\/p>\n<p>For example, take the following NoSQL documents:<\/p>\n<p><strong>c::1<\/strong><\/p>\n<pre><code>\r\n{\r\n    \"type\": \"customer\",\r\n    \"first_name\": \"Nic\",\r\n    \"last_name\": \"Raboy\"\r\n}\r\n<\/code><\/pre>\n<p><strong>ca:1<\/strong><\/p>\n<pre><code>\r\n{\r\n    \"type\": \"customer_address\",\r\n    \"customer_id\": \"c::1\",\r\n    \"city\": \"San Francisco\",\r\n    \"state\": \"California\"\r\n}\r\n<\/code><\/pre>\n<p>Assume the above documents are modeled similarly to their RDBMS equivilent. <strong>c::1<\/strong> is just some id value I made up for the <strong>customer<\/strong> document and <strong>ca:1<\/strong> is an id I made up for the <strong>customer_address<\/strong> document.<\/p>\n<p>Now although we won&#8217;t query them yet, we can think of these documents as each being the equivalent of a single row in a relational database. For example one row of the <strong>customer<\/strong> Oracle table would be one document in Couchbase.<\/p>\n<p>Very similar, correct?<\/p>\n<h4>Embedding Documents<\/h4>\n<p>This is where things can become very different coming from Oracle. Being that JSON is complex data, we can have arrays within our documents. So what if we wanted to keep all like data together?<\/p>\n<pre><code>\r\n{\r\n    \"type\": \"customer\",\r\n    \"first_name\": \"Nic\",\r\n    \"last_name\": \"Raboy\",\r\n    \"addresses\": [\r\n        {\r\n            \"city\": \"San Francisco\",\r\n            \"state\": \"California\"\r\n        },\r\n        {\r\n            \"city\": \"Mountain View\",\r\n            \"state\": \"California\"\r\n        }\r\n    ]\r\n}\r\n<\/code><\/pre>\n<p>What do you think of that? With the above, instead of one address per document, we are now storing all addresses for any particular customer, with the customer data.<\/p>\n<p>You might be wondering what happens if you have very complex relationships in your Oracle data that, when transposed to Couchbase, would result in the same data being embedded in more than one Couchbase document. This could happen, but it isn&#8217;t a bad thing. You don&#8217;t need normalized data in a NoSQL database such as Couchbase. However, if you&#8217;re really concerned, why not mix both approaches? Keep data such as <strong>customer_history<\/strong> together without relationships and refer to others that might change more frequently.<\/p>\n<h3>Query Differences Between Oracle and Couchbase<\/h3>\n<h4>Oracle SQL vs Couchbase N1QL<\/h4>\n<p>It&#8217;s no secret that Oracle uses its own flavor of traditional SQL to query data in the database, but it is SQL. For example, if you wanted to return all product reviews and expand the relational tables around them, you would do a query like this:<\/p>\n<pre><code>\r\nSELECT\r\n    c.firstname, c.lastname, p.name, r.review\r\nFROM review r\r\nJOIN customer c ON r.customer_id = c.id\r\nJOIN product p ON r.product_id = p.id\r\n<\/code><\/pre>\n<p>What if I told you that you could do almost the same thing with Couchbase NoSQL data? Take the following Couchbase N1QL query:<\/p>\n<pre><code>\r\nSELECT\r\n    c.firstname, c.lastname, p.name, r.review\r\nFROM `bucket-name` r\r\nJOIN `bucket-name` c ON KEYS r.customer_id\r\nJOIN `bucket-name` p ON KEYS r.product_id\r\n<\/code><\/pre>\n<p>Not too different right? You might notice that we&#8217;re using <strong>`bucket-name`<\/strong> three times. This is because there are no tables in NoSQL and all the different documents and document types will exist in the same bucket. The document key is the value that we join on.<\/p>\n<p>Maybe you want to insert new data into the Oracle <strong>customer<\/strong> table. In Oracle, you might do something like this:<\/p>\n<pre><code>\r\nINSERT INTO customer (id, first_name, last_name)\r\nVALUES (1, 'Arun', 'Gupta');\r\n<\/code><\/pre>\n<p>If you wanted to insert data in Couchbase you can do the following:<\/p>\n<pre><code>\r\nINSERT INTO `bucket-name` (KEY, VALUE)\r\nVALUES (1, {\"first_name\": \"Arun\", \"last_name\": \"Gupta\"});\r\n<\/code><\/pre>\n<h2>Development Differences Between Oracle and Couchbase<\/h2>\n<p>From the developer perspective, many who use Oracle as their database tend to use Java. Oracle isn&#8217;t restricted to just Java, but since Java is Oracle, it often makes sense. This is why the next few examples will be based around Java specifically.<\/p>\n<h3>The Oracle JDBC Driver<\/h3>\n<p>In a Java application, if you wanted to connect to an Oracle database you&#8217;d use the Java Database Connector (JDBC) driver. With the driver included in your project, either through tools like Maven or manually, you can load it and start querying for data.<\/p>\n<p>An example of this might look like the following:<\/p>\n<pre><code>\r\nClass.forName(\"oracle.jdbc.driver.OracleDriver\");\r\nProperties info = new Properties();\r\ninfo.put(\"user\", \"nraboy\");\r\ninfo.put(\"password\", \"password\");\r\nConnection connection = DriverManager.getConnection(\"jdbc:oracle:thin:@\/\/HOST:PORT\/DATABASE\", info);\r\nStatement stmt = connection.getConnection().createStatement();\r\nResultSet rs = stmt.executeQuery(\"SELECT * FROM customer\");\r\nwhile(rs.next()) {\r\n    \/\/ rs.getString(\"first_name\");\r\n}\r\nstmt.close();\r\n<\/code><\/pre>\n<h3>The Couchbase Java SDK<\/h3>\n<p>To connect to Couchbase via a Java application you would use the Couchbase Java SDK rather than a JDBC driver, even though one does exist. The reason we would use the SDK is because things become incredibly easy with it.<\/p>\n<p>For example, with the Couchbase SDK, the same kind of operation as Oracle might look like the following:<\/p>\n<pre><code>\r\nCouchbaseCluster.create(HOST).openBucket(BUCKET, PASSWORD);\r\nString query = \"SELECT * FROM `bucket-name-here`\";\r\nN1qlQueryResult queryResult = bucket.query(query);\r\nfor (N1qlQueryRow row : queryResult) {\r\n    \/\/ row.value().toMap();\r\n}\r\n<\/code><\/pre>\n<p>The above assumes, of course, that you downloaded the Couchbase Java SDK or used Maven to obtain it.<\/p>\n<h2>Tool Differences<\/h2>\n<p>When using Oracle you have many tools that you can use. For example, if you want to execute queries against the database you could use the command line tool <strong>SQLPlus<\/strong>. You still have the ability to use comparable tools when making the switch to Couchbase. If you&#8217;re looking for a command line tool, you can use CBQ to query your data. If you&#8217;re a power user of Oracle&#8217;s <strong>SQL Developer<\/strong>, don&#8217;t worry because Couchbase has its <strong>Query Workbench<\/strong> in the works.<\/p>\n<h2>Data Migration Tools<\/h2>\n<p>When it comes to your data, you might be wondering how you might get your data out of Oracle and into Couchbase as quickly as possible. Manuel Hurtado wrote an excellent blog article for <a href=\"https:\/\/www.couchbase.com\/blog\/data-migration-from-oracle-to-couchbase\/\">moving data from Oracle to Couchbase<\/a>.<\/p>\n<p>In short, Manuel&#8217;s post walks through using a Java utility called <strong>oracle2couchbase<\/strong>. This tool will export rows of a table into JSON documents.<\/p>\n<h2>Conclusion<\/h2>\n<p>Even though Oracle and Couchbase are two very different database platforms, there are enough similarities to where a switch wouldn&#8217;t be so difficult to do. The relational data model can still be preserved to an extent using referred documents and these documents can still be queried using a SQL-like language similar enough to Oracle SQL that would make you feel right at home.<\/p>\n<p>If you&#8217;re an Oracle user, Couchbase should not be dismissed. The way data exists now is different than it did twenty years ago. Having the flexibility of NoSQL is great for the future.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Oracle was the first database I developed with, so I know that thinking about switching to something like NoSQL and leaving behind the relational model can seem like a scary thing. The thing is, it really wasn&#8217;t scary when I [&hellip;]<\/p>\n","protected":false},"author":63,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1816,1819],"tags":[1458,1593,1592],"ppma_author":[9032],"class_list":["post-2167","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-server","category-data-modeling","tag-migration","tag-modeling","tag-oracle"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.2 (Yoast SEO v26.2) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Moving from Oracle to Couchbase - The Couchbase 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.couchbase.com\/blog\/moving-from-oracle-to-couchbase\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Moving from Oracle to Couchbase\" \/>\n<meta property=\"og:description\" content=\"Oracle was the first database I developed with, so I know that thinking about switching to something like NoSQL and leaving behind the relational model can seem like a scary thing. The thing is, it really wasn&#8217;t scary when I [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/moving-from-oracle-to-couchbase\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/thepolyglotdeveloper\" \/>\n<meta property=\"article:published_time\" content=\"2016-02-19T15:00:01+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-11-23T06:48:05+00:00\" \/>\n<meta name=\"author\" content=\"Nic Raboy, Developer Advocate, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@nraboy\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nic Raboy, Developer Advocate, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-from-oracle-to-couchbase\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-from-oracle-to-couchbase\/\"},\"author\":{\"name\":\"Nic Raboy, Developer Advocate, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1\"},\"headline\":\"Moving from Oracle to Couchbase\",\"datePublished\":\"2016-02-19T15:00:01+00:00\",\"dateModified\":\"2023-11-23T06:48:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-from-oracle-to-couchbase\/\"},\"wordCount\":1249,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-from-oracle-to-couchbase\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"migration\",\"modeling\",\"oracle\"],\"articleSection\":[\"Couchbase Server\",\"Data Modeling\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/moving-from-oracle-to-couchbase\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-from-oracle-to-couchbase\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/moving-from-oracle-to-couchbase\/\",\"name\":\"Moving from Oracle to Couchbase - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-from-oracle-to-couchbase\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-from-oracle-to-couchbase\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2016-02-19T15:00:01+00:00\",\"dateModified\":\"2023-11-23T06:48:05+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-from-oracle-to-couchbase\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/moving-from-oracle-to-couchbase\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-from-oracle-to-couchbase\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-from-oracle-to-couchbase\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Moving from Oracle to Couchbase\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1\",\"name\":\"Nic Raboy, Developer Advocate, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8863514d8bed0cf6080f23db40e00354\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g\",\"caption\":\"Nic Raboy, Developer Advocate, Couchbase\"},\"description\":\"Nic Raboy is an advocate of modern web and mobile development technologies. He has experience in Java, JavaScript, Golang and a variety of frameworks such as Angular, NativeScript, and Apache Cordova. Nic writes about his development experiences related to making web and mobile development easier to understand.\",\"sameAs\":[\"https:\/\/www.thepolyglotdeveloper.com\",\"https:\/\/www.facebook.com\/thepolyglotdeveloper\",\"https:\/\/x.com\/nraboy\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/author\/nic-raboy-2\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Moving from Oracle to Couchbase - The Couchbase 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.couchbase.com\/blog\/moving-from-oracle-to-couchbase\/","og_locale":"en_US","og_type":"article","og_title":"Moving from Oracle to Couchbase","og_description":"Oracle was the first database I developed with, so I know that thinking about switching to something like NoSQL and leaving behind the relational model can seem like a scary thing. The thing is, it really wasn&#8217;t scary when I [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/moving-from-oracle-to-couchbase\/","og_site_name":"The Couchbase Blog","article_author":"https:\/\/www.facebook.com\/thepolyglotdeveloper","article_published_time":"2016-02-19T15:00:01+00:00","article_modified_time":"2023-11-23T06:48:05+00:00","author":"Nic Raboy, Developer Advocate, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@nraboy","twitter_misc":{"Written by":"Nic Raboy, Developer Advocate, Couchbase","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/moving-from-oracle-to-couchbase\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/moving-from-oracle-to-couchbase\/"},"author":{"name":"Nic Raboy, Developer Advocate, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1"},"headline":"Moving from Oracle to Couchbase","datePublished":"2016-02-19T15:00:01+00:00","dateModified":"2023-11-23T06:48:05+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/moving-from-oracle-to-couchbase\/"},"wordCount":1249,"commentCount":1,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/moving-from-oracle-to-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["migration","modeling","oracle"],"articleSection":["Couchbase Server","Data Modeling"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/moving-from-oracle-to-couchbase\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/moving-from-oracle-to-couchbase\/","url":"https:\/\/www.couchbase.com\/blog\/moving-from-oracle-to-couchbase\/","name":"Moving from Oracle to Couchbase - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/moving-from-oracle-to-couchbase\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/moving-from-oracle-to-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2016-02-19T15:00:01+00:00","dateModified":"2023-11-23T06:48:05+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/moving-from-oracle-to-couchbase\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/moving-from-oracle-to-couchbase\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/moving-from-oracle-to-couchbase\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/moving-from-oracle-to-couchbase\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Moving from Oracle to Couchbase"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"The Couchbase Blog","description":"Couchbase, the NoSQL Database","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"The Couchbase Blog","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1","name":"Nic Raboy, Developer Advocate, Couchbase","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8863514d8bed0cf6080f23db40e00354","url":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","caption":"Nic Raboy, Developer Advocate, Couchbase"},"description":"Nic Raboy is an advocate of modern web and mobile development technologies. He has experience in Java, JavaScript, Golang and a variety of frameworks such as Angular, NativeScript, and Apache Cordova. Nic writes about his development experiences related to making web and mobile development easier to understand.","sameAs":["https:\/\/www.thepolyglotdeveloper.com","https:\/\/www.facebook.com\/thepolyglotdeveloper","https:\/\/x.com\/nraboy"],"url":"https:\/\/www.couchbase.com\/blog\/author\/nic-raboy-2\/"}]}},"authors":[{"term_id":9032,"user_id":63,"is_guest":0,"slug":"nic-raboy-2","display_name":"Nic Raboy, Developer Advocate, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","author_category":"","last_name":"Raboy","first_name":"Nic","job_title":"","user_url":"https:\/\/www.thepolyglotdeveloper.com","description":"Nic Raboy is an advocate of modern web and mobile development technologies. He has experience in Java, JavaScript, Golang and a variety of frameworks such as Angular, NativeScript, and Apache Cordova. Nic writes about his development experiences related to making web and mobile development easier to understand."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/2167","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/users\/63"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=2167"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/2167\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=2167"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=2167"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=2167"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=2167"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}