{"id":1199,"date":"2012-11-10T23:30:20","date_gmt":"2012-11-11T02:30:20","guid":{"rendered":"https:\/\/devkico.itexto.com.br\/?p=1199"},"modified":"2012-11-12T20:58:09","modified_gmt":"2012-11-12T23:58:09","slug":"nosql-ou-sql-quando-uso-um-outro-ou-ambos","status":"publish","type":"post","link":"https:\/\/devkico.itexto.com.br\/?p=1199","title":{"rendered":"NoSQL ou SQL? Quando uso um, outro ou ambos"},"content":{"rendered":"<figure id=\"attachment_1200\" aria-describedby=\"caption-attachment-1200\" style=\"width: 202px\" class=\"wp-caption alignleft\"><a href=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2012\/11\/nosql_logos.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-1200\" title=\"nosql_logos\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2012\/11\/nosql_logos.png\" alt=\"\" width=\"202\" height=\"296\" \/><\/a><figcaption id=\"caption-attachment-1200\" class=\"wp-caption-text\">Bancos de dados NoSQL<\/figcaption><\/figure>\n<p>Na minha opini\u00e3o o grande ganho que tivemos com o NoSQL foi o de nos acordar para o fato de que est\u00e1vamos usando bancos de dados relacionais como a \u00fanica op\u00e7\u00e3o para qualquer problema. Da at\u00e9 para parafrasear um famoso ditado:<\/p>\n<blockquote><p>&#8220;D\u00ea para um desenvolvedor um banco de dados relacional e o mundo se torna um conjunto de tabelas&#8221;<\/p><\/blockquote>\n<figure id=\"attachment_1202\" aria-describedby=\"caption-attachment-1202\" style=\"width: 133px\" class=\"wp-caption alignright\"><a href=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2012\/11\/nosql_estupido.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-1202 \" title=\"nosql_estupido\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2012\/11\/nosql_estupido.jpg\" alt=\"\" width=\"133\" height=\"122\" \/><\/a><figcaption id=\"caption-attachment-1202\" class=\"wp-caption-text\">Logotipo cretino<\/figcaption><\/figure>\n<p>O interessante \u00e9 que foi criado tanto hype em cima destes bancos de dados que estes em diversas situa\u00e7\u00f5es passaram de solu\u00e7\u00e3o a problema por serem mal aplicados. Sobre a origem do hype j\u00e1 falei a respeito alguns posts atr\u00e1s: \u00e9 o <a href=\"https:\/\/devkico.itexto.com.br\/?p=1148\">desconhecimento do conceito de valor<\/a>. Talvez seja at\u00e9 mesmo um sentimento pueril, a paix\u00e3o por estar lidando com algo novo, o que fica bem claro quando topamos com o &#8220;logotipo padr\u00e3o&#8221; do &#8220;<em>movimento&#8221;<\/em>: a sigla SQL riscada, uma das met\u00e1foras mais tolas que j\u00e1 vi.<\/p>\n<p>Neste post meu objetivo \u00e9 expor quais os crit\u00e9rios que uso na ado\u00e7\u00e3o de um banco de dados, indiferente do fato deste ser relacional ou n\u00e3o.<\/p>\n<h2>Defini\u00e7\u00e3o r\u00e1pida: o que v\u00eam a ser NoSQL?<\/h2>\n<p>Simples: qualquer banco de dados que n\u00e3o adote o paradigma relacional. Levando ao extremo o conceito, uma API que trabalhe com arquivos textuais poderia ser considerada um banco de dados NoSQL. \u00a0O termo possu\u00ed duas conota\u00e7\u00f5es, uma inteligente e outra nem tanto, respectivamente <em>not only SQL<\/em> e <em>no SQL<\/em>.<\/p>\n<p>A grosso modo vejo tr\u00eas grandes categorias: documentais, baseados em grafos e chave\/valor. S\u00e3o as categorias com as quais tenho alguma experi\u00eancia e que tratarei neste post.<\/p>\n<h2>Breve descri\u00e7\u00e3o de cada categoria de banco de dados<\/h2>\n<p>(Como o modelo relacional j\u00e1 \u00e9 velho conhecido da esmagadora maioria dos programadores vou me dedicar aqui apenas \u00e0s categorias NoSQL)<\/p>\n<h3>Documental<\/h3>\n<p>Talvez seja a categoria mais popular dos bancos de dados NoSQL. Se caracteriza pelo fato de n\u00e3o termos tabelas com um n\u00famero fixo de campos bem definidos, mas sim cole\u00e7\u00f5es. Cada cole\u00e7\u00e3o pode armazenar um ou mais documentos (no lugar de registros em uma tabela). A grosso modo um documento \u00e9 apenas um agregado de atributos que n\u00e3o possui uma regra r\u00edgida que definda quais os tipos de cada atributo e qual tipo cada um deve possuir (s\u00e3o sem esquema, <em>schemaless<\/em>). Normalmente os documentos s\u00e3o salvos num formato similar ao JSON, tal como pode ser visto no exemplo abaixo:<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n\r\n\/\/ Um documento usado para representar uma pessoa\r\n{nome: &quot;Henrique&quot;, sobrenome:&quot;Lobo Weissmann&quot;, apelido:&quot;Kico&quot;, cidade:&quot;Belo Horizonte&quot;}\r\n\/\/ Um outro documenot para representar uma pessoa na mesma cole\u00e7\u00e3o\r\n{nome: &quot;Maria Ang\u00e9lica&quot;, sobrenome:&quot;\u00c1lvares da Silva e Silva&quot;, profissao:&quot;Advogada&quot;, caes:&#x5B;'Z\u00e9','Fraude']}\r\n<\/pre>\n<p>Como pode ser visto no exemplo, eu posso ter registros bem diferentes um do outro dentro de uma mesma cole\u00e7\u00e3o. Soa estranho em um primeiro momento este tipo de abordagem, mas no modelo relacional a usamos de forma ineficiente o tempo inteiro sob a forma de tabelas esparsas. Uma tabela esparsa \u00e9 aquela na qual v\u00eamos uma multid\u00e3o de colunas das quais apenas algumas s\u00e3o sempre preenchidas, e as demais apenas raramente. Para ilustrar esta situa\u00e7\u00e3o, d\u00ea uma olhada na imagem a seguir, que representa um cadastro de equipamentos e materiais usados em uma obra.<\/p>\n<p><a href=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2012\/11\/tabela_esparsa.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1210\" title=\"tabela_esparsa\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2012\/11\/tabela_esparsa.png\" alt=\"\" width=\"783\" height=\"151\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2012\/11\/tabela_esparsa.png 783w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2012\/11\/tabela_esparsa-300x57.png 300w\" sizes=\"(max-width: 783px) 100vw, 783px\" \/><\/a><\/p>\n<p>Nesta tabela podemos ver um uso ruim do modelo relacional. Repare que h\u00e1 colunas cujo valor rar\u00edssimas vezes \u00e9 preenchido, tal como pode ser visto no exemplo das colunas <em>Altura de eleva\u00e7\u00e3o<\/em> e <em>Di\u00e2metro<\/em>. Ao incluir colunas raramente usadas em nossa tabela, estamos na realidade jogando fora espa\u00e7o de armazenamento e reduzindo a performance do sistema como um todo. Isto sem mencionar que tratamos objetos completamente diferentes como se fossem iguais, \u00a0o que nem sempre \u00e9 uma boa id\u00e9ia. Podemos ver a seguir os mesmos dados sendo representados no modelo documental:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\n{codigo:1, tipo:&quot;Britador&quot;, potencia:&quot;300 cv&quot;, peso:&quot;2000 kg&quot;, tag:&quot;BR-121&quot;, motores:3}\r\n{codigo:2, tipo:&quot;Cimento&quot;}\r\n{codigo:3, tipo:&quot;Rompedor de matacos&quot;, altura:&quot;4 metros&quot;, peso:&quot;300 kg&quot;, tag:&quot;RM-11&quot;}\r\n{codigo:4, tipo:&quot;Empilhadeira&quot;, potencia:&quot;10 cv&quot;, peso:&quot;400 kg&quot;}\r\n{codigo:5, tipo:&quot;Transportador de correia&quot;, altura_elevacao:&quot;2 m&quot;}\r\n{codigo:6, tipo:&quot;Tubula\u00e7\u00e3o&quot;, diametro:&quot;30 cm&quot;}\r\n<\/pre>\n<p>Se em seu sistema h\u00e1 \u00a0tabelas esparsas, talvez seja um bom momento para que voc\u00ea avaliar um banco de dados documental. Ali\u00e1s, eu j\u00e1 escrevi alguma coisa mais detalhada sobre este modelo neste blog, que voc\u00ea pode conferir neste <a href=\"https:\/\/devkico.itexto.com.br\/?p=682\">link<\/a>.<\/p>\n<p>Bancos de dados que adotam este modelo: MongoDB, CouchDB.<\/p>\n<h3>Chave-valor<\/h3>\n<p><a href=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2012\/11\/hashTable.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-medium wp-image-1215\" title=\"hashTable\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2012\/11\/hashTable-300x279.png\" alt=\"\" width=\"180\" height=\"167\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2012\/11\/hashTable-300x279.png 300w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2012\/11\/hashTable.png 372w\" sizes=\"(max-width: 180px) 100vw, 180px\" \/><\/a>Trata-se da categoria mais simples e que talvez traga os maiores ganhos de performance quando bem aplicada. Neste modelo, toda consulta ao banco de dados \u00e9 feita apenas atrav\u00e9s de uma chave, que pode ou n\u00e3o ter algum valor (de qualquer tipo) relacionado. \u00c9 muito usado na implementa\u00e7\u00e3o de caches de sistema ou acesso a informa\u00e7\u00f5es que s\u00e3o alteradas em tempo real. De todos os modelos, \u00e9 o que possu\u00ed tempo de pesquisa mais curto: basicamente \u00e9 uma pesquisa baseada no hash da chave.<\/p>\n<p>Em 2010 tive uma experi\u00eancia muito bem sucedida com um banco de dados que usa esta abordagem, o Memcached, que voc\u00ea pode ver neste <a href=\"https:\/\/devkico.itexto.com.br\/?p=692\">link<\/a>. \u00c9 um tipo de banco de dados muito usado tamb\u00e9m para substituir sistemas de mensageria como JMS, pois oferece um modelo mais simples de programa\u00e7\u00e3o. No entanto, de todos os modelos \u00e9 tamb\u00e9m o menos confi\u00e1vel sob o ponto de vista de persist\u00eancia, pois s\u00e3o normalmente bancos desenvolvidos para armazenar informa\u00e7\u00f5es em mem\u00f3ria, com pouco foco na garantia de persist\u00eancia (h\u00e1 excess\u00f5es, mas leve isto como regra).<\/p>\n<p>Bancos de dados que adotam este modelo: Berkeley DB, Memcached, Redis<\/p>\n<h3>Baseados em grafo<\/h3>\n<p><a href=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2012\/11\/graf.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-1217\" title=\"graf\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2012\/11\/graf.png\" alt=\"\" width=\"250\" height=\"165\" \/><\/a>Talvez a menos popular das categorias, este modelo tem como foco o relacionamento entre os objetos. A met\u00e1fora neste caso \u00e9 o grafo. N\u00e3o temos mais cole\u00e7\u00f5es, apenas v\u00e9rtices representando os objetos de nosso sistema e arestas indicando o relacionamento entre estes. Normalmente cada v\u00e9rtice representa um agregado de atributos, muito similar ao modelo documental.<\/p>\n<p>A pesquisa pode ser feita tanto por algum dos atributos dos v\u00e9rtices quanto pelos relacionamentos entre os mesmos. Neste tipo de banco de dados podemos fazer pesquisas do tipo &#8220;amigo do amigo&#8221;. A aplica\u00e7\u00e3o mais \u00f3bvia \u00e9 a sua lista de contatos em uma rede social. Outro exemplo interessante poderia ser a representa\u00e7\u00e3o de alguma estrutura do tipo causa\/efeito, como uma f\u00e1brica, em que cada etapa de produ\u00e7\u00e3o gera a entrada para uma ou mais etapas que precisem ser monitoradas.<\/p>\n<p>\u00c9 interessante observar que aqui estamos lidando com um tipo de banco de dados que permite a aplica\u00e7\u00e3o de um modelo navegacional entre os elementos persistidos. O desenvolvedor pode, se quiser, <em>caminhar no grafo<\/em> ao implementar algoritmos de busca em profundidade ou busca do menor caminho.<\/p>\n<p>Dica: escrever consultas por relacionamentos nestes bancos pdoe ser um processo muito chato. Uma ferramenta que tornar\u00e1 sua vida mais f\u00e1cil se chama Gremlin, que a grosso modo \u00e9 usado para escrever consultas mais complexas de forma simples. Depois d\u00ea uma olhada neste <a href=\"https:\/\/github.com\/tinkerpop\/gremlin\/wiki\">link<\/a>.<\/p>\n<p>Bancos de dados que adotam este modelo: Neo4J, VertexDB<\/p>\n<h2>Ganho em escalabilidade<\/h2>\n<p>Esse \u00e9 um ponto controverso para mim. Vejo muita gente usando bases de dados NoSQL apenas para obter escalabilidade. Normalmente esta \u00e9 obtida porque estes bancos de dados n\u00e3o implementam 100% do ACID e portanto passam a possuir funcionamento mais simples. Nem sempre isto \u00e9 verdade: no caso do Neo4J, por exemplo, temos uma base de dados que o implementa 100%. Um outro argumento a favor destes bancos de dados \u00e9 o de que consomem menos mem\u00f3ria e configurar um cluster \u00e9 mais simples. T\u00e1: pode at\u00e9 ser, mas na minha opini\u00e3o s\u00e3o argumentos que n\u00e3o tocam o n\u00facleo da quest\u00e3o.<\/p>\n<p>De nada adianta eu ter um banco de dados super leve se a estrutura de dados usada para armazenamento n\u00e3o for compat\u00edvel com a modelagem do meu sistema. Se eu tenho um sistema simples como um blog, por exemplo, que ganho eu teria em implement\u00e1-lo usando um banco de dados do tipo chave\/valor, documental ou baseado em grafos? Prov\u00e1velmente nenhum, e o tal ganho em performance por parte do banco de dados seria perdido no parseamento feito pela minha aplica\u00e7\u00e3o.<\/p>\n<p>Quando opto por uma base NoSQL dif\u00edcilmente escalabilidade \u00e9 <strong>A<\/strong> raz\u00e3o. O que realmente importa \u00e9 que o modelo de persist\u00eancia seja pr\u00f3ximo da modelagem do meu sistema e que, com isto, minhas consultas sejam mais f\u00e1ceis de serem escritas e o mapeamento entre o que est\u00e1 no banco de dados e minhas classes seja mais f\u00e1cil e r\u00e1pido de ser implementado e executado. Yeap: \u00e9 <strong>neste ponto<\/strong> que o NoSQL passa a <strong>agregar valor<\/strong>.<\/p>\n<p>Com rela\u00e7\u00e3o a ganho de escalabilidade real, na minha experi\u00eancia o \u00fanico caso em que vejo isto ocorrer de forma mais f\u00e1cil \u00e9 com o modelo chave\/valor implementando alguma forma de cacheamento. Em segundo lugar viria o uso de uma base documental quando lido com tabelas esparsas. Infelizmente ainda n\u00e3o tive a oportunidade de trabalhar em um sistema gigantesco em que pudesse ver isto funcionando (mas a itexto se interessa por este tipo de trabalho, sendo assim, caso queira implementar algo assim, nos procure ok? :D ).<\/p>\n<h2>Dificuldades com NoSQL<\/h2>\n<p>Nem tudo \u00e9 lindo no mundo NoSQL. H\u00e1 alguns problemas que ainda hoje podem me fazer evitar o uso de uma destas bases de dados. O primeiro destes problemas \u00e9 o fato de que o <strong>vendor lock-in<\/strong><em> \u00e9 certo<\/em>. Como n\u00e3o h\u00e1 um padr\u00e3o (e tamb\u00e9m n\u00e3o faz sentido existir um) a migra\u00e7\u00e3o de um banco de dados para outro dentro de uma mesma categoria pode se mostrar uma tarefa bem trabalhosa.<\/p>\n<p>Outro problema \u00e9 a aus\u00eancia de ferramentas de alto n\u00edvel como as que encontramos no modelo relacional. Na maior parte das vezes me vejo usando apenas a linha de comando para fazer tudo o que preciso. No caso dos bancos de dados baseados em grafos a coisa est\u00e1 come\u00e7ando a melhorar com projetos como Gephi, por exemplo, mas ainda falta muito para que tenhamos um n\u00edvel de qualidade satisfat\u00f3rio.<\/p>\n<p>A curva de aprendizado tamb\u00e9m pode ser um problema. Como cada banco de dados apresenta a sua pr\u00f3pria linguagem de consulta e manipula\u00e7\u00e3o, o desenvolvedor precisar\u00e1 adicionar cada vez mais e mais linguagens no seu cinto de utilidades.<\/p>\n<h2>Crit\u00e9rios de escolha: quando uso um ou outro (brinde incluso)<\/h2>\n<p>Desenvolvi uma planilha que atualmente possu\u00ed 15 crit\u00e9rios que me ajudam na escolha do modelo e voc\u00ea pode acess\u00e1-la a hora que quiser, bastando para isto clicar neste <a href=\"https:\/\/docs.google.com\/spreadsheet\/ccc?key=0AjOJsJtcnOlEdE1tcFJ0d29IcExZT1daT2xPRmxJcmc\">link<\/a> (este \u00e9 o brinde). O principal crit\u00e9rio diz respeito \u00e0 conformidade da minha modelagem com os modelos que conhe\u00e7o (incluindo o relacional). Caso o relacional se mostre o mais apto, sem sombra de d\u00favidas \u00e9 o que irei adotar, deixando de lado os demais. Na maior parte das vezes, pelo menos o chave\/valor \u00e9 usado para otimizar uma ou outra parte dos meus sistemas.<\/p>\n<p>\u00c9 interessante observar que em 100% dos casos o modelo relacional sempre est\u00e1 presente. A raz\u00e3o para isto \u00e9 muito simples: \u00e9 o que atende ao maior n\u00famero de casos e at\u00e9 hoje sempre me atendeu com excess\u00e3o das situa\u00e7\u00f5es que citei na breve descri\u00e7\u00e3o das categorias de bancos de dados que fiz acima. Ai que entra um detalhe muito importante pra mim:<\/p>\n<blockquote><p>Na pr\u00e1tica os bancos de dados NoSQL complementam e n\u00e3o substituem o modelo relacional em minha experi\u00eancia.<\/p><\/blockquote>\n<p>Caro <a href=\"https:\/\/devkico.itexto.com.br\/?p=1148\">Hypista<\/a>, me desculpe jogar este banho de \u00e1gua fria em sua empolga\u00e7\u00e3o, mas a verdade para mim at\u00e9 este momento tem sido esta. Minhas tabelas relacionadas querendo ou n\u00e3o ainda atendem <strong>muito bem<\/strong> a esmagadora maioria das minhas necessidades enquanto arquiteto\/desenvolvedor.<\/p>\n<h2>Concluindo<\/h2>\n<p>As bases de dados NoSQL s\u00e3o um excelente complemento para o modelo relacional, evitando que o apliquemos em situa\u00e7\u00f5es para as quais n\u00e3o foi desenvolvido. A escolha por um modelo n\u00e3o relacional deve estar diretamente relacionada \u00e0 compatibilidade da sua modelagem com uma ou outra categoria mais do que o mero ganho de performance.<\/p>\n<p><a href=\"https:\/\/docs.google.com\/spreadsheet\/ccc?key=0AjOJsJtcnOlEdE1tcFJ0d29IcExZT1daT2xPRmxJcmc\">Link para a planilha de crit\u00e9rios de sele\u00e7\u00e3o do modelo de banco de dados<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Na minha opini\u00e3o o grande ganho que tivemos com o NoSQL foi o de nos acordar para o fato de que est\u00e1vamos usando bancos de dados relacionais como a \u00fanica op\u00e7\u00e3o para qualquer problema. Da at\u00e9 para parafrasear um famoso ditado: &#8220;D\u00ea para um desenvolvedor um banco de dados relacional e o mundo se torna [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""}},"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[54],"tags":[],"class_list":["post-1199","post","type-post","status-publish","format-standard","hentry","category-nosql"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>NoSQL ou SQL? Quando uso um, outro ou ambos - \/dev\/Kico<\/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:\/\/devkico.itexto.com.br\/?p=1199\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"NoSQL ou SQL? Quando uso um, outro ou ambos - \/dev\/Kico\" \/>\n<meta property=\"og:description\" content=\"Na minha opini\u00e3o o grande ganho que tivemos com o NoSQL foi o de nos acordar para o fato de que est\u00e1vamos usando bancos de dados relacionais como a \u00fanica op\u00e7\u00e3o para qualquer problema. Da at\u00e9 para parafrasear um famoso ditado: &#8220;D\u00ea para um desenvolvedor um banco de dados relacional e o mundo se torna [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/devkico.itexto.com.br\/?p=1199\" \/>\n<meta property=\"og:site_name\" content=\"\/dev\/Kico\" \/>\n<meta property=\"article:published_time\" content=\"2012-11-11T02:30:20+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2012-11-12T23:58:09+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/www.itexto.net\/devkico\/wp-content\/uploads\/2012\/11\/nosql_logos.png\" \/>\n<meta name=\"author\" content=\"Kico (Henrique Lobo Weissmann)\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@loboweissmann\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kico (Henrique Lobo Weissmann)\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=1199\",\"url\":\"https:\/\/devkico.itexto.com.br\/?p=1199\",\"name\":\"NoSQL ou SQL? Quando uso um, outro ou ambos - \/dev\/Kico\",\"isPartOf\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=1199#primaryimage\"},\"image\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=1199#primaryimage\"},\"thumbnailUrl\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2012\/11\/nosql_logos.png\",\"datePublished\":\"2012-11-11T02:30:20+00:00\",\"dateModified\":\"2012-11-12T23:58:09+00:00\",\"author\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7\"},\"breadcrumb\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=1199#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/devkico.itexto.com.br\/?p=1199\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=1199#primaryimage\",\"url\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2012\/11\/nosql_logos.png\",\"contentUrl\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2012\/11\/nosql_logos.png\",\"width\":\"202\",\"height\":\"296\",\"caption\":\"Bancos de dados NoSQL\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=1199#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/devkico.itexto.com.br\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"NoSQL ou SQL? Quando uso um, outro ou ambos\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/devkico.itexto.com.br\/#website\",\"url\":\"https:\/\/devkico.itexto.com.br\/\",\"name\":\"\/dev\/Kico\",\"description\":\"Desenvolvendo software\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/devkico.itexto.com.br\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7\",\"name\":\"Kico (Henrique Lobo Weissmann)\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g\",\"caption\":\"Kico (Henrique Lobo Weissmann)\"},\"sameAs\":[\"https:\/\/x.com\/loboweissmann\"],\"url\":\"https:\/\/devkico.itexto.com.br\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"NoSQL ou SQL? Quando uso um, outro ou ambos - \/dev\/Kico","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:\/\/devkico.itexto.com.br\/?p=1199","og_locale":"pt_BR","og_type":"article","og_title":"NoSQL ou SQL? Quando uso um, outro ou ambos - \/dev\/Kico","og_description":"Na minha opini\u00e3o o grande ganho que tivemos com o NoSQL foi o de nos acordar para o fato de que est\u00e1vamos usando bancos de dados relacionais como a \u00fanica op\u00e7\u00e3o para qualquer problema. Da at\u00e9 para parafrasear um famoso ditado: &#8220;D\u00ea para um desenvolvedor um banco de dados relacional e o mundo se torna [&hellip;]","og_url":"https:\/\/devkico.itexto.com.br\/?p=1199","og_site_name":"\/dev\/Kico","article_published_time":"2012-11-11T02:30:20+00:00","article_modified_time":"2012-11-12T23:58:09+00:00","og_image":[{"url":"http:\/\/www.itexto.net\/devkico\/wp-content\/uploads\/2012\/11\/nosql_logos.png"}],"author":"Kico (Henrique Lobo Weissmann)","twitter_card":"summary_large_image","twitter_creator":"@loboweissmann","twitter_misc":{"Escrito por":"Kico (Henrique Lobo Weissmann)","Est. tempo de leitura":"11 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/devkico.itexto.com.br\/?p=1199","url":"https:\/\/devkico.itexto.com.br\/?p=1199","name":"NoSQL ou SQL? Quando uso um, outro ou ambos - \/dev\/Kico","isPartOf":{"@id":"https:\/\/devkico.itexto.com.br\/#website"},"primaryImageOfPage":{"@id":"https:\/\/devkico.itexto.com.br\/?p=1199#primaryimage"},"image":{"@id":"https:\/\/devkico.itexto.com.br\/?p=1199#primaryimage"},"thumbnailUrl":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2012\/11\/nosql_logos.png","datePublished":"2012-11-11T02:30:20+00:00","dateModified":"2012-11-12T23:58:09+00:00","author":{"@id":"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7"},"breadcrumb":{"@id":"https:\/\/devkico.itexto.com.br\/?p=1199#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/devkico.itexto.com.br\/?p=1199"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/devkico.itexto.com.br\/?p=1199#primaryimage","url":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2012\/11\/nosql_logos.png","contentUrl":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2012\/11\/nosql_logos.png","width":"202","height":"296","caption":"Bancos de dados NoSQL"},{"@type":"BreadcrumbList","@id":"https:\/\/devkico.itexto.com.br\/?p=1199#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/devkico.itexto.com.br\/"},{"@type":"ListItem","position":2,"name":"NoSQL ou SQL? Quando uso um, outro ou ambos"}]},{"@type":"WebSite","@id":"https:\/\/devkico.itexto.com.br\/#website","url":"https:\/\/devkico.itexto.com.br\/","name":"\/dev\/Kico","description":"Desenvolvendo software","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/devkico.itexto.com.br\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"pt-BR"},{"@type":"Person","@id":"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7","name":"Kico (Henrique Lobo Weissmann)","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g","caption":"Kico (Henrique Lobo Weissmann)"},"sameAs":["https:\/\/x.com\/loboweissmann"],"url":"https:\/\/devkico.itexto.com.br\/?author=1"}]}},"jetpack_featured_media_url":"","jetpack-related-posts":[],"jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/1199"}],"collection":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1199"}],"version-history":[{"count":25,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/1199\/revisions"}],"predecessor-version":[{"id":1611,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/1199\/revisions\/1611"}],"wp:attachment":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1199"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1199"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1199"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}