{"id":41081,"date":"2020-02-05T21:30:11","date_gmt":"2020-02-05T18:30:11","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/cassandra-kak-ne-umeret-esli-znaesh-tolko-oracle"},"modified":"2020-02-05T21:30:11","modified_gmt":"2020-02-05T18:30:11","slug":"cassandra-kak-ne-umeret-esli-znaesh-tolko-oracle","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pt\/blog\/cassandra-kak-ne-umeret-esli-znaesh-tolko-oracle","title":{"rendered":"Cassandra. Como n\u00e3o morrer se voc\u00ea s\u00f3 conhece Oracle","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ol\u00e1, Habr.<\/p>\n<p>Meu nome \u00e9 Misha Butrimov e eu gostaria de falar um pouco sobre Cassandra. Minha explica\u00e7\u00e3o ser\u00e1 \u00fatil para aqueles que nunca trabalharam com bancos de dados NoSQL, pois ela possui muitas particularidades e armadilhas que voc\u00ea precisa conhecer. E se voc\u00ea s\u00f3 conheceu bancos de dados relacionais como o Oracle, essas informa\u00e7\u00f5es poder\u00e3o salv\u00e1-lo.<\/p>\n<p>O que torna Cassandra boa? \u00c9 um banco de dados NoSQL projetado sem um \u00fanico ponto de falha, que escala muito bem. Se voc\u00ea precisar adicionar alguns terabytes a algum banco, voc\u00ea simplesmente adiciona n\u00f3s ao cluster. Expandir para mais um data center? Adiciona n\u00f3s ao cluster. Aumentar as requisi\u00e7\u00f5es por segundo (RPS) que est\u00e1 sendo processado? Adiciona n\u00f3s ao cluster. \u00c9 rec\u00edproco tamb\u00e9m. <\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/qiwi\/blog\/486800\/\"><img decoding=\"async\" alt=\"Cassandra. Como n\u00e3o morrer se voc\u00ea s\u00f3 conhece Oracle\" src=\"\/wp-content\/uploads\/2020\/02\/a7d31475acbcf70581c296c712280c3d.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Quais s\u00e3o suas outras qualidades? A capacidade de processar muitas requisi\u00e7\u00f5es. Mas o que significa 'muitas'? 10, 20, 30, 40 mil requisi\u00e7\u00f5es por segundo \u00e9 pouco. 100 mil requisi\u00e7\u00f5es por segundo para grava\u00e7\u00e3o tamb\u00e9m \u00e9. Existem empresas que afirmam que conseguem suportar 2 milh\u00f5es de requisi\u00e7\u00f5es por segundo. Essas devem ser acreditadas. <\/p>\n<p>E no geral, Cassandra tem uma grande diferen\u00e7a em rela\u00e7\u00e3o aos dados relacionais \u2014 ela n\u00e3o se parece com eles de forma alguma. E isso \u00e9 algo muito importante a se lembrar.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Nem tudo que parece igual funciona da mesma forma.<\/h2>\n<p>\nCerta vez, um colega veio at\u00e9 mim e perguntou: 'Aqui est\u00e1 a linguagem de consulta SQL do Cassandra, cont\u00e9m instru\u00e7\u00f5es select, where e and. Estou digitando e n\u00e3o funciona. Por qu\u00ea?'. Se voc\u00ea tratar Cassandra como um banco de dados relacional, estar\u00e1 se direcionando para um autoesquartejamento brutal. E n\u00e3o estou promovendo isso, isso \u00e9 proibido na R\u00fassia. Voc\u00ea simplesmente projetar\u00e1 algo errado.<\/p>\n<p>Por exemplo, um cliente vem at\u00e9 n\u00f3s e diz: 'Vamos construir um banco de dados para s\u00e9ries, ou um banco de dados para um guia de receitas. Teremos pratos com ingredientes ou uma lista de s\u00e9ries e os atores nelas'. N\u00f3s respondemos com entusiasmo: 'Vamos l\u00e1!'. S\u00e3o s\u00f3 dois bytes para transferir, algumas tabelas e tudo pronto, funcionar\u00e1 r\u00e1pido e de forma confi\u00e1vel. E tudo vai muito bem, at\u00e9 que os clientes aparecem e dizem que as donas de casa tamb\u00e9m est\u00e3o tentando resolver o inverso: elas t\u00eam uma lista de ingredientes e querem saber qual prato podem cozinhar. Voc\u00ea est\u00e1 ferrado.<\/p>\n<p>Tudo isso porque Cassandra \u00e9 um banco de dados h\u00edbrido: ele \u00e9 ao mesmo tempo um key value e armazena dados em colunas largas. Se falarmos na linguagem Java ou Kotlin, isso poderia ser descrito assim:<\/p>\n<p><code>Map&lt;RowKey, SortedMap&lt;ColumnKey, ColumnValue&gt;&gt;<\/code><\/p>\n<p>Ou seja, um mapa, dentro do qual existe tamb\u00e9m um mapa ordenado. A primeira chave deste mapa \u00e9 a Row key ou Partition key \u2014 a chave de parti\u00e7\u00e3o. A segunda chave, que \u00e9 a chave para o mapa j\u00e1 ordenado, \u00e9 a Clustering key.<\/p>\n<p>Para ilustrar a distribui\u00e7\u00e3o do banco de dados, vamos desenhar tr\u00eas n\u00f3s. Agora precisamos entender como distribuir os dados entre os n\u00f3s. Porque se formos colocar tudo em um s\u00f3 (podendo haver mil, duas mil, cinco \u2014 quantas quisermos), isso n\u00e3o \u00e9 realmente sobre distribui\u00e7\u00e3o. Portanto, precisamos de uma fun\u00e7\u00e3o matem\u00e1tica que retorne um n\u00famero. Apenas um n\u00famero, um inteiro longo, que cair\u00e1 em algum intervalo. E teremos um n\u00f3 respons\u00e1vel por um intervalo, o segundo \u2014 por outro, e assim por diante. <\/p>\n<p><img decoding=\"async\" alt=\"Cassandra. Como n\u00e3o morrer se voc\u00ea s\u00f3 conhece Oracle\" src=\"\/wp-content\/uploads\/2020\/02\/aab4d3cf1f7a552fb3c4c1eb528508c6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEsse n\u00famero \u00e9 obtido atrav\u00e9s de uma fun\u00e7\u00e3o hash, que \u00e9 aplicada exatamente sobre o que chamamos de Partition key. Esta \u00e9 a coluna indicada na diretiva Primary key, e esta \u00e9 a coluna que ser\u00e1 a primeira e mais importante chave do mapa. Ela determina quais dados v\u00e3o para qual n\u00f3. A tabela \u00e9 criada no Cassandra quase com a mesma sintaxe que no SQL: <\/p>\n<pre><code class=\"sql\">CREATE TABLE users (\n\tuser_id uuid,\n\tname text,\n\tyear int,\n\tsalary float,\n\tPRIMARY KEY(user_id)\n\n)\n<\/code><\/pre>\n<p>A chave primaria, neste caso, consiste em uma coluna, e ela tamb\u00e9m \u00e9 a chave de parti\u00e7\u00e3o.<\/p>\n<p>Como os usu\u00e1rios estar\u00e3o distribu\u00eddos? Parte ir\u00e1 para um n\u00f3, parte para outro e parte para o terceiro. Isso resulta em uma tabela hash comum, que tamb\u00e9m \u00e9 um mapa, que em Python \u00e9 um dicion\u00e1rio, que tamb\u00e9m \u00e9 uma estrutura simples Key value, da qual podemos ler todos os valores, lendo e escrevendo por chave.<\/p>\n<p><img decoding=\"async\" alt=\"Cassandra. Como n\u00e3o morrer se voc\u00ea s\u00f3 conhece Oracle\" src=\"\/wp-content\/uploads\/2020\/02\/61f365562dd5a39358a1ffcb7ff537eb.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Select: quando allow filtering se transforma em full scan, ou como n\u00e3o fazer<\/h2>\n<p>\nVamos escrever alguma instru\u00e7\u00e3o select: <code>select * from users where userid = <\/code>. Parece que estamos lidando com o Oracle: escrevemos um select, especificamos as condi\u00e7\u00f5es e tudo funciona, os usu\u00e1rios s\u00e3o obtidos. Mas se escolhermos, por exemplo, um usu\u00e1rio com um determinado ano de nascimento, o Cassandra reclama que n\u00e3o consegue executar a consulta. Porque ele n\u00e3o sabe nada sobre como est\u00e3o distribu\u00eddos os dados do ano de nascimento \u2014 tem apenas uma coluna como chave. Ent\u00e3o ele diz: \"Est\u00e1 bem, ainda posso executar essa consulta. Adicione allow filtering\". N\u00f3s adicionamos a diretiva, tudo funciona. E nesse momento, algo terr\u00edvel acontece. <\/p>\n<p>Quando estamos rodando com dados de teste, tudo est\u00e1 perfeito. Mas quando voc\u00ea executa a consulta em produ\u00e7\u00e3o, onde temos, por exemplo, 4 milh\u00f5es de registros, a situa\u00e7\u00e3o n\u00e3o \u00e9 t\u00e3o boa. Porque allow filtering \u00e9 uma diretiva que permite ao Cassandra coletar todos os dados dessa tabela de todos os n\u00f3s, todos <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/pt\/kompaniya\/data-centers\/\"   title=\"de data centers\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"4645\">de data centers<\/a> (se houver muitos nesse cluster), e s\u00f3 depois filtrar. Isso \u00e9 an\u00e1logo a uma varredura completa, e duvido que algu\u00e9m fique empolgado com isso. <\/p>\n<p>Se precis\u00e1ssemos de usu\u00e1rios apenas por identificadores, isso seria aceit\u00e1vel. Mas \u00e0s vezes precisamos escrever outras consultas e impor outras restri\u00e7\u00f5es na sele\u00e7\u00e3o. Portanto, lembramos: tudo isso \u00e9 um mapa, que tem uma chave de particionamento, mas dentro dele \u2014 um mapa ordenado. <\/p>\n<p>E ele tamb\u00e9m tem uma chave, que chamamos de Clustering Key. Essa chave, que por sua vez, \u00e9 composta por colunas que escolhemos, permite que o Cassandra entenda como os dados ser\u00e3o fisicamente ordenados e armazenados em cada n\u00f3. Ou seja, para uma determinada Partition key, a Clustering key dir\u00e1 exatamente como inserir os dados nessa \u00e1rvore, qual espa\u00e7o eles ocupar\u00e3o.<\/p>\n<p>\u00c9 realmente uma \u00e1rvore, onde apenas chamamos um comparador, no qual passamos um conjunto de colunas em forma de objeto, e este tamb\u00e9m \u00e9 definido como uma enumera\u00e7\u00e3o de colunas. <\/p>\n<pre><code class=\"sql\">CREATE TABLE users_by_year_salary_id (\n\tuser_id uuid,\n\tname text,\n\tyear int,\n\tsalary float,\n\tPRIMARY KEY((year), salary, user_id)\n<\/code><\/pre>\n<p>Preste aten\u00e7\u00e3o na diretiva Primary key, onde o primeiro argumento (neste caso, o ano) sempre \u00e9 o Partition key. Ele pode consistir em uma ou v\u00e1rias colunas, isso n\u00e3o importa. Se houver v\u00e1rias colunas, elas devem ser colocadas entre par\u00eanteses novamente para que o pr\u00e9-processador da linguagem entenda que isso \u00e9 de fato a Primary key, seguidas por todas as outras colunas \u2014 Clustering key. Essas colunas ser\u00e3o passadas no comparador na ordem em que aparecem. Ou seja, a primeira coluna \u00e9 mais significativa, a segunda \u2014 menos significativa, e assim por diante. Como fazemos para data classes, por exemplo, listamos os campos no equals: indicando quais t\u00eam maior peso e quais t\u00eam menor. Em Cassandra, isso \u00e9, por assim dizer, os campos da data class, aos quais o equals escrito ser\u00e1 aplicado.<\/p>\n<h2>Definimos a ordena\u00e7\u00e3o, impomos restri\u00e7\u00f5es<\/h2>\n<p>\n\u00c9 importante lembrar que a ordem de ordena\u00e7\u00e3o (decrescente, crescente, n\u00e3o importa) \u00e9 definida no mesmo momento em que a chave \u00e9 criada, e n\u00e3o poder\u00e1 ser alterada depois. Ela determina fisicamente como os dados ser\u00e3o organizados e como eles estar\u00e3o armazenados. Se precisar mudar o Clustering key ou a ordem de ordena\u00e7\u00e3o, ser\u00e1 necess\u00e1rio criar uma nova tabela e transferir os dados para ela. N\u00e3o ser\u00e1 poss\u00edvel fazer isso com a tabela existente.<\/p>\n<p><img decoding=\"async\" alt=\"Cassandra. Como n\u00e3o morrer se voc\u00ea s\u00f3 conhece Oracle\" src=\"\/wp-content\/uploads\/2020\/02\/25fc1ef7abb35c728fdc7381a201b79c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPreenchemos nossa tabela com usu\u00e1rios e vimos que eles foram organizados inicialmente por ano de nascimento e, em seguida, dentro de cada n\u00f3, por sal\u00e1rio e ID de usu\u00e1rio. Agora podemos realizar a sele\u00e7\u00e3o, aplicando restri\u00e7\u00f5es. <\/p>\n<p>Aqui est\u00e1 novamente o nosso funcionando <code>onde, e<\/code>, os usu\u00e1rios nos s\u00e3o fornecidos, e tudo est\u00e1 novamente bem. Mas se tentarmos usar apenas parte do Clustering key, sendo menos significativa, Cassandra ter\u00e1 um erro imediatamente, pois n\u00e3o consegue encontrar em nosso mapa onde est\u00e1 esse objeto, cujos campos para o comparador s\u00e3o null, e onde aquele que acabamos de definir \u2014 onde ele est\u00e1. Eu terei que levantar todos os dados desse n\u00f3 novamente e filtr\u00e1-los. Isso \u00e9 an\u00e1logo a um Full Scan dentro do n\u00f3, o que n\u00e3o \u00e9 bom.<\/p>\n<h2>Em qualquer situa\u00e7\u00e3o confusa, crie uma nova tabela<\/h2>\n<p>\nSe quisermos poder recuperar usu\u00e1rios por ID, idade ou sal\u00e1rio, o que devemos fazer? Nada. Apenas use duas tabelas. Se for necess\u00e1rio recuperar usu\u00e1rios de tr\u00eas maneiras diferentes, teremos tr\u00eas tabelas. Passaram-se os tempos em que economiz\u00e1vamos espa\u00e7o no disco r\u00edgido. Este \u00e9 o recurso mais barato. Custa muito menos do que o tempo de resposta, que pode ser fatal para o usu\u00e1rio. \u00c9 muito mais agrad\u00e1vel para o usu\u00e1rio receber algo em um segundo do que em 10 minutos.<\/p>\n<p>Trocamos o espa\u00e7o ocupado em excesso, dados desnormalizados, pela capacidade de escalar bem e operar de forma confi\u00e1vel. Na verdade, um cluster que consiste em tr\u00eas data centers, cada um com cinco n\u00f3s, com um n\u00edvel aceit\u00e1vel de preserva\u00e7\u00e3o de dados (onde nada \u00e9 perdido), pode sobreviver \u00e0 perda total de um data center. E ainda ficar\u00e3o dois n\u00f3s em cada um dos dois restantes. E somente ap\u00f3s isso \u00e9 que os problemas come\u00e7ar\u00e3o. \u00c9 uma boa reserva, custa alguns SSDs extras e processadores. Portanto, para usar o Cassandra, que n\u00e3o \u00e9 SQL, e onde n\u00e3o h\u00e1 rela\u00e7\u00f5es ou chaves externas, \u00e9 preciso saber as regras simples.<\/p>\n<p>Projetamos tudo a partir da consulta. O que se torna importante n\u00e3o s\u00e3o os dados, mas como o aplicativo ir\u00e1 trabalhar com eles. Se ele precisar acessar diferentes dados de maneiras diferentes ou os mesmos dados de maneiras variadas, devemos organiz\u00e1-los da forma que seja conveniente para o aplicativo. Caso contr\u00e1rio, nos veremos em um Full Scan e nenhuma vantagem do Cassandra nos ajudar\u00e1.<\/p>\n<p>Desnormalizar dados \u00e9 a norma. Esquecer as formas normais, n\u00e3o temos mais bancos de dados relacionais. Vamos armazenar algo 100 vezes, estar\u00e1 l\u00e1 100 vezes. Isso ainda \u00e9 mais barato do que causar lentid\u00e3o. <\/p>\n<p>Escolhemos chaves para particionamento de forma que sejam bem distribu\u00eddas. N\u00e3o precisamos que o hash de nossas chaves caia em um intervalo muito restrito. Ou seja, o ano de nascimento no exemplo acima \u00e9 um mau exemplo. Na verdade, \u00e9 um bom exemplo se os usu\u00e1rios por ano de nascimento estiverem bem distribu\u00eddos, e ruim se estivermos falando sobre alunos da 5\u00aa s\u00e9rie \u2014 n\u00e3o ser\u00e1 uma boa particionamento. <\/p>\n<p>A ordena\u00e7\u00e3o \u00e9 escolhida uma vez na etapa de cria\u00e7\u00e3o da Chave de Clusteriza\u00e7\u00e3o. Se precisar ser alterada, ser\u00e1 necess\u00e1rio migrar nossa tabela com outra chave.<\/p>\n<p>E o mais importante: se precisamos recuperar os mesmos dados de 100 maneiras diferentes, teremos 100 tabelas distintas.<br \/>\n<br \/>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/qiwi\/blog\/486800\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440. \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u0438\u0448\u0430 \u0411\u0443\u0442\u0440\u0438\u043c\u043e\u0432, \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0445\u043e\u0442\u0435\u043b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e Cassandra. \u041c\u043e\u0439 \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u0442\u0435\u043c, \u043a\u0442\u043e \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0441\u044f \u0441 NoSQL-\u0431\u0430\u0437\u0430\u043c\u0438, \u2014 \u0443 \u043d\u0435\u0435 \u0435\u0441\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u043f\u043e\u0434\u0432\u043e\u0434\u043d\u044b\u0445 \u043a\u0430\u043c\u043d\u0435\u0439, \u043f\u0440\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c. \u0418 \u0435\u0441\u043b\u0438 \u043a\u0440\u043e\u043c\u0435 Oracle \u0438\u043b\u0438 \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0431\u0430\u0437\u044b \u0432\u044b \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0432\u0438\u0434\u0435\u043b\u0438, \u044d\u0442\u0438 \u0432\u0435\u0449\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":41082,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"tags":[],"class_list":["post-41081","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440. \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u0438\u0448\u0430 \u0411\u0443\u0442\u0440\u0438\u043c\u043e\u0432, \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0445\u043e\u0442\u0435\u043b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e Cassandra.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pt\/blog\/cassandra-kak-ne-umeret-esli-znaesh-tolko-oracle\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Cassandra. \u041a\u0430\u043a \u043d\u0435 \u0443\u043c\u0435\u0440\u0435\u0442\u044c, \u0435\u0441\u043b\u0438 \u0437\u043d\u0430\u0435\u0448\u044c \u0442\u043e\u043b\u044c\u043a\u043e Oracle | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440. \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u0438\u0448\u0430 \u0411\u0443\u0442\u0440\u0438\u043c\u043e\u0432, \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0445\u043e\u0442\u0435\u043b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e Cassandra.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pt\/blog\/cassandra-kak-ne-umeret-esli-znaesh-tolko-oracle\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-02-05T18:30:11+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-05T18:30:11+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Cassandra. Como n\u00e3o morrer se voc\u00ea s\u00f3 conhece Oracle | ProHoster","description":"Ol\u00e1, Habr. Meu nome \u00e9 Misha Butrimov, gostaria de falar um pouco sobre Cassandra.","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/cassandra-kak-ne-umeret-esli-znaesh-tolko-oracle","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Cassandra. \u041a\u0430\u043a \u043d\u0435 \u0443\u043c\u0435\u0440\u0435\u0442\u044c, \u0435\u0441\u043b\u0438 \u0437\u043d\u0430\u0435\u0448\u044c \u0442\u043e\u043b\u044c\u043a\u043e Oracle | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440. \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u0438\u0448\u0430 \u0411\u0443\u0442\u0440\u0438\u043c\u043e\u0432, \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0445\u043e\u0442\u0435\u043b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e Cassandra.","og:url":"https:\/\/prohoster.info\/pt\/blog\/cassandra-kak-ne-umeret-esli-znaesh-tolko-oracle","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-02-05T18:30:11+00:00","article:modified_time":"2020-02-05T18:30:11+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"41081","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 00:24:40","updated":"2022-09-30 11:42:25","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/41081","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=41081"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/41081\/revisions"}],"predecessor-version":[{"id":164523,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/41081\/revisions\/164523"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/41082"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=41081"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=41081"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=41081"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}