{"id":2219,"date":"2016-04-12T15:00:00","date_gmt":"2016-04-12T15:00:00","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2219"},"modified":"2023-06-23T05:12:02","modified_gmt":"2023-06-23T12:12:02","slug":"moving-from-mysql-to-couchbase","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/moving-from-mysql-to-couchbase\/","title":{"rendered":"Moving from MySQL to Couchbase"},"content":{"rendered":"<p>I think it is safe to assume that every developer or system administrator has touched MySQL at some point in time. It was often the<br \/>\nrite of passage for any new developer a few years ago when langauges like PHP were flourishing. Now you might be in a situation where<br \/>\nthings have changed and now your database might need a change. More specifically a change to schema-less NoSQL database.<\/p>\n<p>At first glance, if you&#8217;re skimming over the differences, it might seem like a scary task. What do I do about all my tables and<br \/>\nconstraints? How do I query my data? What development languages am I allowed to use?<\/p>\n<p>We&#8217;re going to slow it down and walk through a scenario where you&#8217;re using a MySQL RDBMS and would like to transition away to Couchbase.<\/p>\n<h2>Key Differences Between MySQL and Couchbase<\/h2>\n<p>Coming from MySQL, I take it you already know that it is a relational database that consists of tables, rows, and columns.<br \/>\nPretty standard when it comes to any relational database. This is not the case with a NoSQL document database like Couchbase.<br \/>\nInstead 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>For simplicity, let&#8217;s stick to a small data model. It can always be adjusted to accommodate a more complex scenario. Our data model<br \/>\nwill be as follows:<\/p>\n<p><strong>customer<\/strong><\/p>\n<ul>\n<li>id: numeric primary key<\/li>\n<li>firstname: varchar<\/li>\n<li>lastname: varchar<\/li>\n<\/ul>\n<p><strong>customer_address<\/strong><\/p>\n<ul>\n<li>id: numeric primary key<\/li>\n<li>city: varchar<\/li>\n<li>state: varchar<\/li>\n<li>zip: varchar<\/li>\n<li>customer_id: numeric foreign key<\/li>\n<\/ul>\n<p>The above two tables and their columns are not the most complex, but they still prove to be relational through the primary and<br \/>\nforeign key relationships.<\/p>\n<h3>Options for a NoSQL Data Model<\/h3>\n<p>NoSQL documents are a little different because in this case they are schema-less. This means that there are multiple options when it<br \/>\ncomes to modeling the data we saw for MySQL.<\/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 MySQL, you are referring<br \/>\nto 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<br \/>\nmean 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    \"city\": \"San Francisco\",\r\n    \"state\": \"CA\",\r\n    \"zip\": \"94101\",\r\n    \"customer_id\": \"c::1\"\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<br \/>\ncustomer 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<br \/>\nrelational database. For example one row of the <strong>customer<\/strong> MySQL table would be one document in<br \/>\n<a href=\"https:\/\/www.couchbase.com\">Couchbase<\/a>.<\/p>\n<p>Very similar, correct?<\/p>\n<h4>Embedding Documents<\/h4>\n<p>This is where things can become very different coming from MySQL. Being that JSON is complex data, we can have arrays within our<br \/>\ndocuments. 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>In the above document we are storing all addresses for a particular customer in an array within the document. This is instead of<br \/>\ncreating a new document for every address and referencing the customer document.<\/p>\n<p>You might be wondering what happens if you have very complex relationships in your MySQL data that, when transposed to<br \/>\nCouchbase, would result in the same data being embedded in more than one Couchbase document. This could happen, but it isn&#8217;t<br \/>\na 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<br \/>\nmix both approaches? Keep data such as say <strong>customer_history<\/strong> together without relationships and refer to<br \/>\nothers that might change more frequently.<\/p>\n<h3>Query Differences Between MySQL and Couchbase<\/h3>\n<h4>Couchbase N1QL vs MySQL SQL<\/h4>\n<p>MySQL, just like every relational database platform, uses its own flavor of SQL. Assuming we&#8217;re using the schema defined earlier<br \/>\nfor MySQL, we can query for customers and their addresses like so:<\/p>\n<pre><code>\r\nSELECT\r\n    c.firstname, c.lastname, ca.city, ca.state\r\nFROM customer_address ca\r\nLEFT JOIN customer c ON ca.customer_id = c.id\r\n<\/code><\/pre>\n<p>Now 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, ca.city, ca.state\r\nFROM `bucket-name` ca\r\nLEFT JOIN `bucket-name` c ON KEYS ca.customer_id\r\n<\/code><\/pre>\n<p>Not too different right? You might notice that we&#8217;re using <strong>`bucket-name`<\/strong> two times. This is because there are no<br \/>\ntables in NoSQL and all the different documents and document types will exist in the same bucket. The document key is the<br \/>\nvalue that we join on.<\/p>\n<p>Now let&#8217;s say you want to insert new data into the MySQL <strong>customer<\/strong> table. In MySQL, 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<p>More information on Couchbase N1QL can be seen <a href=\"https:\/\/www.couchbase.com\/n1ql\/\">here<\/a>.<\/p>\n<h2>Development Differences Between MySQL and Couchbase<\/h2>\n<p>In my previous article regarding <a href=\"https:\/\/www.couchbase.com\/blog\/moving-from-oracle-to-couchbase\/\">Oracle to Couchbase<\/a>, I wrote about the development differences in the perspective of Java. For<br \/>\nconsistency, I&#8217;ll use Java in the following examples. MySQL is certainly not restricted to Java and neither is Couchbase.<\/p>\n<h3>The MySQL JDBC Driver<\/h3>\n<p>In a Java application, if you wanted to connect to a MySQL database you&#8217;d use the Java Database Connector (JDBC) driver.<br \/>\nWith 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(\"com.mysql.jdbc.Driver\");\r\nProperties info = new Properties();\r\ninfo.put(\"user\", \"nraboy\");\r\ninfo.put(\"password\", \"password\");\r\nConnection connection = DriverManager.getConnection(\"jdbc:mysql:\/\/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<br \/>\none 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 MySQL you have many tools that you can use. For example, if you want to execute queries against the database you<br \/>\ncould use the <strong>MySQL CLI<\/strong>. You still have the ability to use comparable tools when making the switch to Couchbase.<br \/>\nIf you&#8217;re looking for a command line tool, you can use <strong>CBQ<\/strong> to query your data. If you&#8217;re a power user of<br \/>\nMySQL Workbench, don&#8217;t worry because Couchbase has its <strong>Query Workbench<\/strong> as<br \/>\nof <a href=\"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-server-4.5-developer-preview\/\">Couchbase Server 4.5<\/a>.<\/p>\n<h2>Data Migration<\/h2>\n<p>When it comes to your data, you might be wondering how you might get your data out of MySQL and into Couchbase as quickly as possible.<br \/>\nLaurent Doguin wrote an excellent migration tool for <a href=\"https:\/\/github.com\/ldoguin\/couchbase-java-importer\">moving data from MySQL to Couchbase<\/a>.<\/p>\n<p>Essentially what this tool does is it will connect to your MySQL database via Java and the JDBC driver. Each row of every table will be converted into a unique JSON document.<\/p>\n<p>Although there will be no database constraints in the new JSON documents, the keys will still exist and be query-able via N1QL.<\/p>\n<h2>Conclusion<\/h2>\n<p>MySQL and Couchbase are two very different database technologies, but how you use them doesn&#8217;t have to be. The relational data model<br \/>\ncan still be preserved to an extent in a NoSQL document database. Any data stored can then be queried in Couchbase just as you would<br \/>\nin a MySQL database using SQL queries. The major difference between the two is that you&#8217;re not limited to what data you can store<br \/>\nand how you can store it.<\/p>\n<p>If you&#8217;re an Oracle database user, <a href=\"https:\/\/www.couchbase.com\/blog\/moving-from-oracle-to-couchbase\/\">this<\/a> similar post I wrote on going from Oracle to Couchbase.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I think it is safe to assume that every developer or system administrator has touched MySQL at some point in time. It was often the rite of passage for any new developer a few years ago when langauges like PHP [&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,1818],"tags":[1458,1336],"ppma_author":[9032],"class_list":["post-2219","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-server","category-java","tag-migration","tag-mysql"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.0 (Yoast SEO v26.0) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Moving from MySQL 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-mysql-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 MySQL to Couchbase\" \/>\n<meta property=\"og:description\" content=\"I think it is safe to assume that every developer or system administrator has touched MySQL at some point in time. It was often the rite of passage for any new developer a few years ago when langauges like PHP [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/moving-from-mysql-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-04-12T15:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-06-23T12:12:02+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=\"7 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-mysql-to-couchbase\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-from-mysql-to-couchbase\/\"},\"author\":{\"name\":\"Nic Raboy, Developer Advocate, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1\"},\"headline\":\"Moving from MySQL to Couchbase\",\"datePublished\":\"2016-04-12T15:00:00+00:00\",\"dateModified\":\"2023-06-23T12:12:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-from-mysql-to-couchbase\/\"},\"wordCount\":1290,\"commentCount\":3,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-from-mysql-to-couchbase\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"migration\",\"mysql\"],\"articleSection\":[\"Couchbase Server\",\"Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/moving-from-mysql-to-couchbase\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-from-mysql-to-couchbase\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/moving-from-mysql-to-couchbase\/\",\"name\":\"Moving from MySQL to Couchbase - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-from-mysql-to-couchbase\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-from-mysql-to-couchbase\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2016-04-12T15:00:00+00:00\",\"dateModified\":\"2023-06-23T12:12:02+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-from-mysql-to-couchbase\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/moving-from-mysql-to-couchbase\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-from-mysql-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-mysql-to-couchbase\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Moving from MySQL 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 MySQL 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-mysql-to-couchbase\/","og_locale":"en_US","og_type":"article","og_title":"Moving from MySQL to Couchbase","og_description":"I think it is safe to assume that every developer or system administrator has touched MySQL at some point in time. It was often the rite of passage for any new developer a few years ago when langauges like PHP [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/moving-from-mysql-to-couchbase\/","og_site_name":"The Couchbase Blog","article_author":"https:\/\/www.facebook.com\/thepolyglotdeveloper","article_published_time":"2016-04-12T15:00:00+00:00","article_modified_time":"2023-06-23T12:12:02+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":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/moving-from-mysql-to-couchbase\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/moving-from-mysql-to-couchbase\/"},"author":{"name":"Nic Raboy, Developer Advocate, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1"},"headline":"Moving from MySQL to Couchbase","datePublished":"2016-04-12T15:00:00+00:00","dateModified":"2023-06-23T12:12:02+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/moving-from-mysql-to-couchbase\/"},"wordCount":1290,"commentCount":3,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/moving-from-mysql-to-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["migration","mysql"],"articleSection":["Couchbase Server","Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/moving-from-mysql-to-couchbase\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/moving-from-mysql-to-couchbase\/","url":"https:\/\/www.couchbase.com\/blog\/moving-from-mysql-to-couchbase\/","name":"Moving from MySQL to Couchbase - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/moving-from-mysql-to-couchbase\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/moving-from-mysql-to-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2016-04-12T15:00:00+00:00","dateModified":"2023-06-23T12:12:02+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/moving-from-mysql-to-couchbase\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/moving-from-mysql-to-couchbase\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/moving-from-mysql-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-mysql-to-couchbase\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Moving from MySQL 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\/2219","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=2219"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/2219\/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=2219"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=2219"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=2219"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=2219"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}