{"id":10577,"date":"2021-02-16T09:00:15","date_gmt":"2021-02-16T17:00:15","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=10577"},"modified":"2021-02-10T06:05:47","modified_gmt":"2021-02-10T14:05:47","slug":"hands-on-migration-from-relational-to-collections","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/hands-on-migration-from-relational-to-collections\/","title":{"rendered":"Migra\u00e7\u00e3o pr\u00e1tica de relacional para cole\u00e7\u00f5es"},"content":{"rendered":"<p>O principal resultado deste blog \u00e9 ensinar como voc\u00ea pode migrar facilmente seus dados relacionais para o Couchbase, reduzindo seu TCO e capacitando sua plataforma de dados para responder aos ciclos de lan\u00e7amento r\u00e1pidos que conhecemos e amamos! Durante a migra\u00e7\u00e3o, voc\u00ea pode at\u00e9 mesmo manter os nomes individuais\/espa\u00e7os-chave que j\u00e1 estruturou usando escopos e cole\u00e7\u00f5es. Este blog \u00e9 uma esp\u00e9cie de am\u00e1lgama dos recursos rec\u00e9m-lan\u00e7ados explicados em outros blogs e atualiza\u00e7\u00f5es recentes, mas, diferentemente desses blogs, inclui alguns exemplos de como voc\u00ea pode migrar seus dados relacionais para o Couchbase.<\/p>\n<p>Uma das coisas brilhantes sobre o Couchbase \u00e9 que realmente ouvimos as necessidades da nossa comunidade e continuamos a desenvolver nossos produtos para oferecer a melhor experi\u00eancia poss\u00edvel aos nossos clientes. Escrevi este blog de forma pr\u00e1tica se voc\u00ea quiser acompanhar, mas tamb\u00e9m pode pular a etapa de extra\u00e7\u00e3o e trabalhar apenas com um TSV que forneci!<\/p>\n<p>Se voc\u00ea estiver acompanhando, os pr\u00e9-requisitos s\u00e3o um RDBMS para extrair dados, um interpretador python e um servidor Couchbase (seja no Docker, VM, f\u00edsico etc.).<\/p>\n<p>Vou usar um exemplo on-line para nosso banco de dados de demonstra\u00e7\u00e3o. Vinculado<a href=\"https:\/\/www.w3resource.com\/sql\/sql-table.php\"> aqui<\/a> \u00e9 o banco de dados de amostra com tr\u00eas tabelas: cliente, agentes e pedidos.<\/p>\n<p>Migrar dados para o Couchbase \u00e9 muito f\u00e1cil, pois vamos imitar nossa estrutura de tabela usando nosso novo recurso de escopos e cole\u00e7\u00f5es. Para come\u00e7ar, precisamos de um espa\u00e7o de armazenamento l\u00f3gico. Neste exemplo, estamos usando um bucket por banco de dados, portanto, s\u00f3 precisamos criar um bucket. O esquema ser\u00e1 mapeado para um escopo, portanto, um escopo. Por fim, cada uma das tabelas ser\u00e1 mapeada para uma cole\u00e7\u00e3o com o mesmo nome, ou seja, um total de tr\u00eas cole\u00e7\u00f5es.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-10578 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/02\/model.png\" alt=\"\" width=\"768\" height=\"378\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/model.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/model-300x148.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/model-20x10.png 20w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/p>\n<p><b>Cria\u00e7\u00e3o de buckets, escopos e cole\u00e7\u00f5es:<\/b><\/p>\n<p>Temos muitas op\u00e7\u00f5es dispon\u00edveis aqui. O SDK, a API REST, a CLI do Couchbase (sem esquecer o shell do Couchbase) e a GUI da Web. Vou usar a API REST, pois a vantagem \u00e9 que podemos acess\u00e1-la pela linha de comando e n\u00e3o h\u00e1 necessidade de instalar nada! Para quem n\u00e3o conhece a interface REST, a documenta\u00e7\u00e3o <a href=\"https:\/\/docs.couchbase.com\/server\/7.0\/manage\/manage-scopes-and-collections\/manage-scopes-and-collections.html\">aqui<\/a> explicar\u00e1 outros m\u00e9todos alternativos.<\/p>\n<p>As etapas a seguir especificar\u00e3o os comandos necess\u00e1rios para configurar seu bucket, escopo e cole\u00e7\u00f5es:<\/p>\n<p>Execute os dois comandos a seguir para criar seu bucket de dados e seu escopo:<\/p>\n<pre class=\"lang:sh decode:true\">curl -X POST -u Administrator:password https:\/\/127.0.0.1:8091\/pools\/default\/buckets -d name=migration -d bucketType=couchbase -d ramQuotaMB=100\r\ncurl -X POST -u Administrator:password <a href=\"https:\/\/127.0.0.1:8091\/pools\/default\/buckets\/migration\/collections\">https:\/\/127.0.0.1:8091\/pools\/default\/buckets\/migration\/collections<\/a> -d name=reference<\/pre>\n<p>Agora, crie as tr\u00eas cole\u00e7\u00f5es para as quais mapearemos os dados da tabela:<\/p>\n<pre class=\"lang:sh decode:true\">curl -u Administrator:password -X POST https:\/\/localhost:8091\/pools\/default\/buckets\/migration\/collections\/reference -d name=$TABLE_NAME<\/pre>\n<p>Basta alterar a vari\u00e1vel $TABLE_NAME conforme necess\u00e1rio para criar as cole\u00e7\u00f5es de agentes, pedidos e clientes, respectivamente.<\/p>\n<p>(H\u00e1 links para as p\u00e1ginas de documenta\u00e7\u00e3o dessas APIs no Ap\u00eandice)<\/p>\n<p>Com tudo criado, v\u00e1 at\u00e9 a se\u00e7\u00e3o Buckets e clique no link \"Scopes &amp; Collections\" (Escopos e cole\u00e7\u00f5es) ao lado do nome do bucket que voc\u00ea criou; o meu se chama migration (migra\u00e7\u00e3o). Se voc\u00ea expandir o escopo que criamos, ver\u00e1 as tr\u00eas cole\u00e7\u00f5es que criamos.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-10579 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/02\/scopes-collections-view.png\" alt=\"\" width=\"916\" height=\"504\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/scopes-collections-view.png 916w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/scopes-collections-view-300x165.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/scopes-collections-view-768x423.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/scopes-collections-view-20x11.png 20w\" sizes=\"auto, (max-width: 916px) 100vw, 916px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p><strong>Extra\u00e7\u00e3o de dados do nosso RDBMS<\/strong><\/p>\n<p>Agora que j\u00e1 temos nosso bucket, escopo e cole\u00e7\u00f5es, estamos prontos para exportar nossos dados relacionais. Escrevi um arquivo <a href=\"https:\/\/github.com\/tallbigsam\/mysql_tsv_export\">roteiro curto<\/a> que extrai os dados armazenados no banco de dados MySQL de amostra para TSV, o que \u00e9 compat\u00edvel com nossas ferramentas de importa\u00e7\u00e3o, ou voc\u00ea mesmo pode exportar os dados. Se j\u00e1 tiver configurado o banco de dados, basta executar o script e alterar as vari\u00e1veis para usar o nome de usu\u00e1rio e a senha que voc\u00ea configurou. Depois de executar o script, voc\u00ea ver\u00e1 tr\u00eas arquivos .tsv criados contendo os dados de cada tabela do banco de dados de amostra.<\/p>\n<pre class=\"lang:python decode:true\">#!\/usr\/bin\/python3\r\n\r\nimport subprocess\r\nimport json\r\nimport re\r\n\r\nsql_commands='{ \"commands\": { \"agents\": \"SELECT * FROM agents;\", \"customer\": \"SELECT * FROM customer\", \"orders\": \"SELECT * FROM orders;\" } }'\r\ndb_name = \"sample\"\r\nusername = \"root\"\r\npassword = \"rootroot\"\r\n\r\nsql_commands = json.loads(sql_commands)\r\nfor command_name in sql_commands[\"commands\"]:\r\n    print(\"Running command: \" + command_name)\r\n    \r\n    sql_statement = \"--execute={0}\".format(sql_commands[\"commands\"][command_name])\r\n    command = subprocess.run([\"\/usr\/local\/mysql\/bin\/mysql\", db_name, \"--user={0}\".format(username), \"--password={0}\".format(password), sql_statement], capture_output=True)\r\n    with open(command_name+\"_out.tsv\", 'w') as command_output_file:\r\n        command_without_trailing_white_space = re.sub(b\" +\\\\t\", b'\\\\t', command.stdout)\r\n        command_output_file.write(command_without_trailing_white_space.decode('ascii'))<\/pre>\n<p>Aqui est\u00e1 um exemplo de sa\u00edda TSV. Se estiver trabalhando apenas na parte de importa\u00e7\u00e3o, v\u00e1 em frente e use isso:<\/p>\n<pre class=\"lang:sh decode:true\">AGENT_CODE AGENT_NAME WORKING_AREA COMMISSION PHONE_NO COUNTRY\r\nA007 Ramasundar Bangalore 0.15 077-25814763\r\nA003 Alex London 0.13 075-12458969\r\nA008 Alford New York 0.12 044-25874365\r\nA011 Ravi Kumar Bangalore 0.15 077-45625874\r\nA010 Santakumar Chennai 0.14 007-22388644\r\nA012 Lucida San Jose 0.12 044-52981425\r\nA005 Anderson Brisban 0.13 045-21447739\r\nA001 Subbarao Bangalore 0.14 077-12346674\r\nA002 Mukesh Mumbai 0.11 029-12358964\r\nA006 McDen London 0.15 078-22255588\r\nA004 Ivan Torento 0.15 008-22544166\r\nA009 Benjamin Hampshair 0.11 008-22536178<\/pre>\n<p>&nbsp;<\/p>\n<p><strong>Importa\u00e7\u00e3o de dados para o Couchbase<\/strong><\/p>\n<p>Nossa ferramenta de importa\u00e7\u00e3o rica em recursos, o cbimport, facilita muito a importa\u00e7\u00e3o de dados de v\u00e1rios formatos. Recentemente, implementamos algumas funcionalidades de importa\u00e7\u00e3o em nossa interface gr\u00e1fica na Web, tornando o processo ainda mais acess\u00edvel. Veja abaixo uma captura de tela da nossa ferramenta de importa\u00e7\u00e3o Web Gui. Para chegar at\u00e9 aqui, fa\u00e7a login na GUI da Web do Couchbase e v\u00e1 para \"Documents\" (Documentos) -&gt; \"Import\" (Importar).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-10580 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/02\/cbimport.png\" alt=\"\" width=\"954\" height=\"614\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/cbimport.png 954w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/cbimport-300x193.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/cbimport-768x494.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/cbimport-20x13.png 20w\" sizes=\"auto, (max-width: 954px) 100vw, 954px\" \/><\/p>\n<p>Aqui, vamos importar nossos TSVs usando o bot\u00e3o \"Select File to Import\" (Selecionar arquivo para importar). Observe que, ao carregar um arquivo, muitos campos s\u00e3o preenchidos para voc\u00ea. D\u00ea uma olhada nos dados importados e verifique se eles correspondem ao que voc\u00ea espera, considerando a estrutura relacional anterior. Temos apenas algumas etapas curtas a serem conclu\u00eddas para importar nossos dados.<\/p>\n<p>Primeiro, especifique uma cole\u00e7\u00e3o para a qual importar os dados, por exemplo, agents_out.tsv mapeia para a cole\u00e7\u00e3o \"agents\". Tamb\u00e9m vamos fazer a correspond\u00eancia entre as linhas individuais do nosso banco de dados relacional anterior e os IDs de documentos no Couchbase. Novamente, isso \u00e9 feito facilmente com a nossa ferramenta de importa\u00e7\u00e3o usando a se\u00e7\u00e3o \"Import With Document ID\" (Importar com ID de documento). Em todas as minhas importa\u00e7\u00f5es de dados, usei a chave prim\u00e1ria dos dados relacionais como o ID do documento no Couchbase, o que \u00e9 muito \u00fatil, pois cada chave em uma cole\u00e7\u00e3o deve ser exclusiva. Por exemplo, em agents_out.tsv, usei a chave prim\u00e1ria \"AGENT_CODE\". Execute essa etapa para cada um dos .tsvs: agentes, pedidos e clientes.<\/p>\n<p>&nbsp;<\/p>\n<p>E a\u00ed est\u00e1, apenas para recapitular, fizemos o seguinte:<\/p>\n<ol>\n<li>Exportamos nossos dados do banco de dados legado para TSV<\/li>\n<li>Criamos um escopo e cole\u00e7\u00f5es com base nas tabelas que estamos importando<\/li>\n<li>Importou os dados usando a ferramenta de migra\u00e7\u00e3o de dados para uma cole\u00e7\u00e3o espec\u00edfica, dentro de um escopo.<\/li>\n<\/ol>\n<p>Ok, ent\u00e3o agora que tenho meus dados no Couchbase, preciso aprender uma nova maneira de consultar os dados? Muito pelo contr\u00e1rio, por que n\u00e3o ir at\u00e9 a GUI da Web do Couchbase e consultar alguns de seus dados rec\u00e9m-importados usando N1QL? <a href=\"https:\/\/query-tutorial.couchbase.com\/tutorial\/#1\">Ele \u00e9 compat\u00edvel com SQL++ e, se voc\u00ea j\u00e1 escreveu uma consulta SQL antes, vai se sentir em casa<\/a>O port\u00e3o est\u00e1 aberto, entrem! N\u00e3o s\u00f3 facilitaremos a elabora\u00e7\u00e3o de consultas, como tamb\u00e9m ajudaremos voc\u00ea a criar o \u00edndice certo com nosso <a href=\"https:\/\/index-advisor.couchbase.com\/indexadvisor\/#1\">Servi\u00e7o de consultor de \u00edndices<\/a>Se voc\u00ea quiser usar um \u00edndice, basta inserir a consulta que deseja realizar e o consultor sugerir\u00e1 um \u00edndice. Oferecemos suporte at\u00e9 mesmo a JOINs:<\/p>\n<pre class=\"lang:tsql decode:true\">SELECT orders.AGENT_CODE, orders.ORD_AMOUNT, agents.AGENT_NAME\r\nFROM `bigdata`.reference.orders as orders\r\nJOIN `bigdata`.reference.agents as agents\r\nON orders.AGENT_CODE = meta(agents).id;<\/pre>\n<p>Esse \u00e9 um \u00f3timo come\u00e7o na dire\u00e7\u00e3o certa para fazer a transi\u00e7\u00e3o do sistema relacional para o NoSQL, se voc\u00ea quiser saber mais sobre como modelar seus dados para aproveitar ao m\u00e1ximo o Couchbase, <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/a-json-data-modeling-guide\/\">confira nosso guia de modelagem de dados<\/a>.<\/p>\n<p>Quer saber mais sobre escopos e cole\u00e7\u00f5es?<a href=\"https:\/\/www.couchbase.com\/blog\/pt\/scopes-and-collections-for-modern-multi-tenant-applications-couchbase-7-0\/\"> Recomendo o blog da Shivani<\/a><\/p>\n<p>&nbsp;<\/p>\n<p><b>Ap\u00eandice:<\/b><\/p>\n<ul>\n<li aria-level=\"1\"><a href=\"https:\/\/www.digitalocean.com\/community\/tutorials\/how-to-import-and-export-databases-in-mysql-or-mariadb\">O link a seguir informar\u00e1 aos usu\u00e1rios exatamente como configurar o banco de dados de amostra.<\/a><\/li>\n<li aria-level=\"1\"><a href=\"https:\/\/hub.docker.com\/_\/couchbase\">Cont\u00eainer do Docker do Couchbase<\/a><\/li>\n<li aria-level=\"1\"><a href=\"https:\/\/docs.couchbase.com\/server\/7.0\/rest-api\/creating-a-scope.html\">7.0 REST API - Documenta\u00e7\u00e3o de cria\u00e7\u00e3o de escopo<\/a><\/li>\n<li aria-level=\"1\"><a href=\"https:\/\/docs.couchbase.com\/server\/7.0\/rest-api\/rest-bucket-create.html\">7.0 Documenta\u00e7\u00e3o de cria\u00e7\u00e3o de balde da API REST<\/a><\/li>\n<li aria-level=\"1\"><a href=\"https:\/\/docs.couchbase.com\/server\/7.0\/rest-api\/creating-a-collection.html\">API REST 7.0 - Documenta\u00e7\u00e3o de cria\u00e7\u00e3o de cole\u00e7\u00e3o<\/a><\/li>\n<\/ul>\n<p>&nbsp;<\/p>","protected":false},"excerpt":{"rendered":"<p>The key outcome of this blog is to teach you how you can easily migrate your relational data over to Couchbase, lowering your TCO and empowering your data platform to respond to the fast paced release cycles we know and [&hellip;]<\/p>","protected":false},"author":76077,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1815,1819],"tags":[],"ppma_author":[9168],"class_list":["post-10577","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices-and-tutorials","category-data-modeling"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.8 (Yoast SEO v25.8) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Hands-on Migration From Relational to Collections - 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\/pt\/hands-on-migration-from-relational-to-collections\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Hands-on Migration From Relational to Collections\" \/>\n<meta property=\"og:description\" content=\"The key outcome of this blog is to teach you how you can easily migrate your relational data over to Couchbase, lowering your TCO and empowering your data platform to respond to the fast paced release cycles we know and [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/hands-on-migration-from-relational-to-collections\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2021-02-16T17:00:15+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/11\/couchbase-nosql-dbaas.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1800\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Sam Redman, Solutions Engineer\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sam Redman, Solutions Engineer\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/hands-on-migration-from-relational-to-collections\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/hands-on-migration-from-relational-to-collections\/\"},\"author\":{\"name\":\"Sam Redman\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/512e4ed8ed1188a93cb7c3aee277f408\"},\"headline\":\"Hands-on Migration From Relational to Collections\",\"datePublished\":\"2021-02-16T17:00:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/hands-on-migration-from-relational-to-collections\/\"},\"wordCount\":1121,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/hands-on-migration-from-relational-to-collections\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"articleSection\":[\"Best Practices and Tutorials\",\"Data Modeling\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/hands-on-migration-from-relational-to-collections\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/hands-on-migration-from-relational-to-collections\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/hands-on-migration-from-relational-to-collections\/\",\"name\":\"Hands-on Migration From Relational to Collections - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/hands-on-migration-from-relational-to-collections\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/hands-on-migration-from-relational-to-collections\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2021-02-16T17:00:15+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/hands-on-migration-from-relational-to-collections\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/hands-on-migration-from-relational-to-collections\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/hands-on-migration-from-relational-to-collections\/#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\/hands-on-migration-from-relational-to-collections\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Hands-on Migration From Relational to Collections\"}]},{\"@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\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@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\/512e4ed8ed1188a93cb7c3aee277f408\",\"name\":\"Sam Redman\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/69dc9b1e46ceb237d29e1e4b626c6bcc\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ee34f7b9f2c46328736cdab03babdfd5ddc97cdd4a12ddd4b1b2d0f455eba51d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ee34f7b9f2c46328736cdab03babdfd5ddc97cdd4a12ddd4b1b2d0f455eba51d?s=96&d=mm&r=g\",\"caption\":\"Sam Redman\"},\"description\":\"Solutions Engineer at Couchbase. Sam has previously as a developer and an SRE before joining Couchbase.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/sam-redman\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Hands-on Migration From Relational to Collections - 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\/pt\/hands-on-migration-from-relational-to-collections\/","og_locale":"pt_BR","og_type":"article","og_title":"Hands-on Migration From Relational to Collections","og_description":"The key outcome of this blog is to teach you how you can easily migrate your relational data over to Couchbase, lowering your TCO and empowering your data platform to respond to the fast paced release cycles we know and [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/hands-on-migration-from-relational-to-collections\/","og_site_name":"The Couchbase Blog","article_published_time":"2021-02-16T17:00:15+00:00","og_image":[{"width":1800,"height":630,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/11\/couchbase-nosql-dbaas.png","type":"image\/png"}],"author":"Sam Redman, Solutions Engineer","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Sam Redman, Solutions Engineer","Est. reading time":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/hands-on-migration-from-relational-to-collections\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/hands-on-migration-from-relational-to-collections\/"},"author":{"name":"Sam Redman","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/512e4ed8ed1188a93cb7c3aee277f408"},"headline":"Hands-on Migration From Relational to Collections","datePublished":"2021-02-16T17:00:15+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/hands-on-migration-from-relational-to-collections\/"},"wordCount":1121,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/hands-on-migration-from-relational-to-collections\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","articleSection":["Best Practices and Tutorials","Data Modeling"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/hands-on-migration-from-relational-to-collections\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/hands-on-migration-from-relational-to-collections\/","url":"https:\/\/www.couchbase.com\/blog\/hands-on-migration-from-relational-to-collections\/","name":"Hands-on Migration From Relational to Collections - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/hands-on-migration-from-relational-to-collections\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/hands-on-migration-from-relational-to-collections\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2021-02-16T17:00:15+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/hands-on-migration-from-relational-to-collections\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/hands-on-migration-from-relational-to-collections\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/hands-on-migration-from-relational-to-collections\/#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\/hands-on-migration-from-relational-to-collections\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Hands-on Migration From Relational to Collections"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"Blog do Couchbase","description":"Couchbase, o banco de dados NoSQL","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":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@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\/512e4ed8ed1188a93cb7c3aee277f408","name":"Sam Redman","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/69dc9b1e46ceb237d29e1e4b626c6bcc","url":"https:\/\/secure.gravatar.com\/avatar\/ee34f7b9f2c46328736cdab03babdfd5ddc97cdd4a12ddd4b1b2d0f455eba51d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ee34f7b9f2c46328736cdab03babdfd5ddc97cdd4a12ddd4b1b2d0f455eba51d?s=96&d=mm&r=g","caption":"Sam Redman"},"description":"Engenheiro de solu\u00e7\u00f5es da Couchbase. Sam j\u00e1 trabalhou como desenvolvedor e SRE antes de ingressar na Couchbase.","url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/sam-redman\/"}]}},"authors":[{"term_id":9168,"user_id":76077,"is_guest":0,"slug":"sam-redman","display_name":"Sam Redman, Solutions Engineer","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/ee34f7b9f2c46328736cdab03babdfd5ddc97cdd4a12ddd4b1b2d0f455eba51d?s=96&d=mm&r=g","author_category":"","last_name":"Redman","first_name":"Sam","job_title":"","user_url":"","description":"Sam Redman \u00e9 engenheiro de solu\u00e7\u00f5es na Couchbase. Sam trabalhou anteriormente em ambientes de desenvolvimento e SRE antes de ingressar na Couchbase."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/10577","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/76077"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=10577"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/10577\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=10577"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=10577"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=10577"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=10577"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}