{"id":1953,"date":"2015-12-16T19:27:35","date_gmt":"2015-12-16T19:27:34","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=1953"},"modified":"2024-09-12T01:06:34","modified_gmt":"2024-09-12T08:06:34","slug":"advanced-object-modeling-for-high-write-rates-with-logging-and-event-data","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/advanced-object-modeling-for-high-write-rates-with-logging-and-event-data\/","title":{"rendered":"Modelagem avan\u00e7ada de objetos para altas taxas de grava\u00e7\u00e3o com dados de registro e eventos - Parte 1"},"content":{"rendered":"<h2>Introdu\u00e7\u00e3o<\/h2>\n<p>O Couchbase \u00e9 capaz de atingir taxas de grava\u00e7\u00e3o muito altas, pode ser escalonado rapidamente e adicionar n\u00f3s facilmente, mas um modelo de objeto ruim pode ser um obst\u00e1culo a essas qualidades. Em alguns bancos de dados, se voc\u00ea tiver taxas de grava\u00e7\u00e3o muito altas, sacrificar\u00e1 as taxas de leitura, mas o Couchbase tem alguns recursos bastante exclusivos no espa\u00e7o NoSQL para oferecer suporte a ambos de maneira eficaz. Nesta postagem do blog, discutiremos o que \u00e9 necess\u00e1rio para projetar um modelo de objeto que atenda a esses recursos para registro e dados de eventos, mas que tamb\u00e9m tenha f\u00e1cil capacidade de pesquisa com N1QL.<\/p>\n<p>O exemplo de caso de uso que encontrei recentemente em uma conversa \u00e9 usar o Couchbase como banco de dados operacional para coletar v\u00e1rios tipos de eventos de sistemas externos, como equipamentos de rede, servidores ou at\u00e9 mesmo dados de registro. Em seguida, o servi\u00e7o precisa ter a capacidade de ver rapidamente o n\u00famero de eventos na interface do usu\u00e1rio, em uma esp\u00e9cie de rollup de hora em hora. A outra necessidade \u00e9 poder clicar nesse n\u00famero e fazer uma busca detalhada em uma lista desse tipo de evento. Por exemplo, mostrar todos os eventos RouterError em 22 de junho de 2015 para a hora de 16:00.<\/p>\n<p>Outro aspecto a ser lembrado \u00e9 que esta postagem do blog tem o objetivo de mostrar um conceito mais avan\u00e7ado e como voc\u00ea pode aplic\u00e1-lo. Obviamente, isso n\u00e3o significa que seja exatamente a maneira correta para o seu caso de uso, mesmo que seja semelhante ao que estou falando. Obviamente, isso n\u00e3o significa que seja exatamente a maneira correta para o seu caso de uso, mesmo que seja semelhante ao que estou falando. O objetivo \u00e9 fazer voc\u00ea pensar sobre a modelagem avan\u00e7ada de objetos no Couchbase e como voc\u00ea pode usar seu poder de forma mais eficaz para obter o m\u00e1ximo dele de uma forma que pode n\u00e3o ser \u00f3bvia para todos.<\/p>\n<h2>Contador incremental para leitura de eventos e contagens por hora<\/h2>\n<p>Essa abordagem permitiria ler facilmente o \u00faltimo n\u00famero N de eventos ou um tipo de evento por uma hora, em vez de fazer isso com uma consulta de exibi\u00e7\u00e3o. Ou podemos ler todos os eventos de um determinado dia. Ela \u00e9 otimizada para taxas de grava\u00e7\u00e3o muito altas e permite a pesquisa f\u00e1cil de dados em um n\u00edvel decente de granularidade. Explicarei isso em um n\u00edvel mais alto e, em seguida, abordarei exemplos espec\u00edficos para explicar melhor a ideia.<\/p>\n<p>Precisaremos de dois tipos de objeto para isso em nosso bucket.<\/p>\n<ol>\n<li>O objeto Counter - Esse \u00e9 um objeto de chave\/valor e cont\u00e9m um n\u00famero inteiro. Esse n\u00famero inteiro representa a extremidade superior do n\u00famero de objetos para esse tipo de evento e hora ou, em outras palavras, \u00e9 a extremidade superior da matriz de eventos. \u00c9 tamb\u00e9m o objeto que voc\u00ea ler\u00e1 para mostrar quantos eventos existem para essa combina\u00e7\u00e3o de tipo\/hora. Usaremos m\u00e9todos especiais e espec\u00edficos dos SDKs do Couchbase chamados Counter Operations. Cada SDK tem sua pr\u00f3pria vers\u00e3o desses m\u00e9todos, mas <a style=\"text-decoration: none;\" href=\"https:\/\/docs.couchbase.com\/nodejs-sdk\/2.1\/atomic-operations.html\"><u>Aqui est\u00e1 a vers\u00e3o do node.js como um exemplo<\/u><\/a>.<\/li>\n<li>O objeto Event - esse \u00e9 um objeto de documento JSON e cont\u00e9m os dados reais sobre os eventos que queremos capturar.<\/li>\n<\/ol>\n<h2>O objeto contador<\/h2>\n<p>Voc\u00ea cria um objeto contador para cada combina\u00e7\u00e3o de tipo de evento e hora. Pense nisso como um objeto operacional sobre os documentos que criaremos. Isso pode parecer estranho, mas tenha paci\u00eancia. Esse objeto contador ser\u00e1 um objeto de chave\/valor, n\u00e3o JSON, com o valor sendo um n\u00famero inteiro. H\u00e1 uma opera\u00e7\u00e3o de contador nos SDKs do Couchbase especificamente para esse tipo de objeto, que \u00e9 muito eficiente e oferece recursos r\u00e1pidos de leitura e grava\u00e7\u00e3o para manter a consist\u00eancia. \u00c9 uma opera\u00e7\u00e3o \u00fanica e at\u00f4mica nos SDKs do Couchbase, portanto \u00e9 muito f\u00e1cil e r\u00e1pida de usar. <a style=\"text-decoration: none;\" href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.0\/sdks\/node-2.0\/atomic-operations.html\"><u>Aqui est\u00e1 um exemplo da vers\u00e3o node.js na documenta\u00e7\u00e3o<\/u><\/a>. No nosso caso, esse contador ser\u00e1 incrementado toda vez que adicionarmos um novo evento. Como cada tipo de evento e hora tem seu pr\u00f3prio contador, podemos ler facilmente quantos eventos existem e esse n\u00famero se torna o limite superior de uma matriz se precisarmos ler todos os eventos desse tipo e hora.<\/p>\n<p>A outra parte importante \u00e9 a chave do objeto. Queremos escolher uma chave para que o aplicativo possa construir facilmente as chaves necess\u00e1rias e, em seguida, coletar os dados por chave para exibir o n\u00famero de eventos, mas tamb\u00e9m os eventos para o per\u00edodo de tempo determinado. A busca de objetos por chave sempre ser\u00e1 mais r\u00e1pida do que a consulta. \u00c9 a diferen\u00e7a entre j\u00e1 saber a resposta e ter de fazer uma pergunta para recuperar os dados que s\u00e3o a resposta. Ao saber a chave, voc\u00ea simplesmente diz ao banco de dados para recuperar os dados. Simples, eficaz e muito r\u00e1pido.<\/p>\n<p>Aqui est\u00e1 um exemplo da chave\/valor do contador:<\/p>\n<table style=\"border: none;\">\n<tbody>\n<tr>\n<td style=\"vertical-align: top;\">Chave do objeto:<\/p>\n<pre>EventType::timestamp::counter<\/pre>\n<p>Um exemplo de ObjectID seria:<\/p>\n<pre>SomeEventType::2015022016::counter<\/pre>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: top;\">Valor: 293<\/p>\n<p>Onde 293 \u00e9 o valor do incremento mais recente do contador.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Para o registro de data e hora na chave, usei o ano de quatro d\u00edgitos, um m\u00eas de dois d\u00edgitos, o dia e, em seguida, a hora (em 24 horas). N\u00e3o precisei ir at\u00e9 o n\u00edvel do minuto ou do segundo, mas voc\u00ea poderia. Eu tamb\u00e9m poderia ter usado um carimbo de data\/hora UNIX, o que tamb\u00e9m funcionaria, mas, novamente, isso era desnecessariamente granular para esse caso de uso espec\u00edfico.<\/p>\n<p>No exemplo acima, 2015 \u00e9 o ano, fevereiro \u00e9 o m\u00eas, 20 \u00e9 o dia e 4pm \u00e9 a hora. Portanto, se voc\u00ea quisesse ler todos os contadores de um tipo de evento e de um dia espec\u00edfico, o aplicativo poderia facilmente reunir os objectIDs desses contadores e l\u00ea-los em massa.<\/p>\n<p>Outra coisa: eu uso dois pontos duplos como delimitador, mas voc\u00ea pode usar o que fizer sentido.<\/p>\n<h2><\/h2>\n<h2>O objeto de evento<\/h2>\n<p>Para cada objeto de evento, a ID do objeto seria algo parecido com o seguinte:<\/p>\n<table style=\"border: none;\">\n<tbody>\n<tr>\n<td style=\"vertical-align: top;\">\n<pre>SomeEventType::2015062216::293<\/pre>\n<p>Onde 293 \u00e9 o valor do incremento mais recente do objeto contador para essa hora<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: top;\">\n<pre>{\r\n\r\n  \"eventid\" : 398502,\r\n\r\n  \"createdate\" : 1425074292,\r\n\r\n  \"somekey\" : \"somevalue\"\r\n\r\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Com esse esquema, para recuperar a contagem de itens para esse tipo de evento em uma hora espec\u00edfica, basta ler um objeto operacional e pronto.<\/p>\n<p>Em termos simples, o valor do contador \u00e9 o limite superior dos objetos desse tipo de evento. Se voc\u00ea quisesse os \u00faltimos 10 eventos desse tipo de evento por uma hora, leria esse contador, subtrairia 9 e, em seguida, faria uma leitura em massa paralela no Couchbase para os seguintes objetos:<\/p>\n<table style=\"border: none;\">\n<tbody>\n<tr>\n<td style=\"vertical-align: top;\">\n<pre>SomeEventType::2015062216::284\r\n\r\nSomeEventType::2015062216::285\r\n\r\nSomeEventType::2015062216::286\r\n\r\nSomeEventType::2015062216::287\r\n\r\nSomeEventType::2015062216::288\r\n\r\nSomeEventType::2015062216::289\r\n\r\nSomeEventType::2015062216::290\r\n\r\nSomeEventType::2015062216::291\r\n\r\nSomeEventType::2015062216::292\r\n\r\nSomeEventType::2015062216::293\r\n<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Portanto, voc\u00ea pode ler todos os 10 desses eventos muito rapidamente e sem consultas, \u00edndices ou exibi\u00e7\u00f5es, apenas com velocidade bruta por meio de leitura em massa paralelizada. Uma leitura em massa dos objetos listados seria MUITO r\u00e1pida no Couchbase, mesmo que voc\u00ea tivesse mais de 300 deles.<\/p>\n<p>O \u00fanico pequeno problema com essa abordagem \u00e9 que \u00e9 poss\u00edvel, embora muito improv\u00e1vel, que essa contagem se torne inconsistente com o objeto de contagem real. Por exemplo, algu\u00e9m poderia iterar o objeto contador, mas n\u00e3o criar um documento de evento com esse objeto. Dito isso, se voc\u00ea estiver usando opera\u00e7\u00f5es em massa e elas solicitarem um objeto que n\u00e3o existe, elas simplesmente receber\u00e3o uma falha e a opera\u00e7\u00e3o inteira n\u00e3o sofrer\u00e1 com isso. Na minha opini\u00e3o, essa \u00e9 uma boa troca, considerando o desempenho que um modelo como esse pode atingir. Se voc\u00ea descobrir uma maneira melhor, publique nos coment\u00e1rios, pois eu adoraria saber.<\/p>\n<h2>O c\u00f3digo do aplicativo<\/h2>\n<p>Vamos dar uma olhada em como o c\u00f3digo do aplicativo pode ser definido para ler e gravar esse modelo de objeto. Vou usar pseudoc\u00f3digo para n\u00e3o entrar especificamente em uma linguagem espec\u00edfica. Deixarei os detalhes para a linguagem e o SDK do Couchbase de sua prefer\u00eancia.<\/p>\n<pre>function writeNewEvent() {\r\n\r\n  Read current date and time.\r\n\r\n\r\n  Call iterate function on counter object with an initial value of 0 and read back the value. (You should read the value back because if it already exists you will get the most current value, if you just went with 0, you might cause a problem. If the counter object for this event and time period does not exist, it will be created by the SDK.)\r\n\r\n\r\n  Create new event with the date\/time and counter number as part of the key\r\n\r\n}<\/pre>\n<pre>readCounterDateObject()\r\n\r\n   Do a loop to generate the list of keys you need to read based on the event type, date and time and the value of the counter object you received. (You could even say something like \u201cjust the last 10\u201d and generate those keys in this. Your call.)\r\n\r\n\r\n   Use that list to do a parallelized bulk read operation and bring back just the keys we want.\r\n\r\n}<\/pre>\n<pre>function readEventCount() {\r\n\r\n    return the value of the event\/date counter object.\r\n\r\n}<\/pre>\n<h2>Resumo<\/h2>\n<p>Ao usar a s\u00e9rie de t\u00e9cnicas de modelagem de objetos descritas acima, \u00e9 poss\u00edvel estruturar os dados de forma a maximizar a taxa de transfer\u00eancia e o desempenho. Embora talvez inicialmente n\u00e3o seja intuitivo, o uso de pesquisas adicionais de chave\/valor em vez de consultas baseadas em \u00edndices secund\u00e1rios para a funcionalidade prim\u00e1ria do aplicativo pode trazer benef\u00edcios significativos. Em muitos sistemas, uma pesquisa complexa baseada em \u00edndice pode levar uma ordem de magnitude a mais para ser conclu\u00edda do que as pesquisas simples de chave-valor usadas neste projeto. Na arquitetura correta do sistema, o Couchbase pode facilmente fornecer um tempo de resposta consistente de menos de milissegundos para essas pesquisas. Ent\u00e3o, quando voc\u00ea precisar de poder para realmente consultar, use o N1QL. Voc\u00ea pode escolher onde utilizar o poder que o Couchbase lhe oferece.<\/p>\n<p>Al\u00e9m disso, devido \u00e0 arquitetura de fragmenta\u00e7\u00e3o autom\u00e1tica do Couchbase, a carga das consultas e da ingest\u00e3o ser\u00e1 distribu\u00edda uniformemente pelo cluster. \u00c0 medida que o uso do aplicativo e a demanda de opera\u00e7\u00f5es aumentam ao longo do tempo, n\u00f3s adicionais do Couchbase podem ser adicionados para expandir em uma opera\u00e7\u00e3o on-line, atendendo \u00e0 demanda sem nenhuma altera\u00e7\u00e3o na camada do aplicativo.<\/p>\n<h2>Post Script sobre consultas<\/h2>\n<p>Uma \u00faltima coisa, se voc\u00ea chegou at\u00e9 aqui. Voc\u00ea pode estar dizendo, mas tudo isso e eu n\u00e3o estou consultando o banco de dados. Por que n\u00e3o est\u00e1 usando o N1QL? Eu n\u00e3o disse que, nesse caso de uso, eu n\u00e3o usaria o N1QL e nada nos impede de usar o N1QL nesses documentos. A maneira como vejo o N1QL \u00e9 que ele \u00e9 mais uma ferramenta na caixa de ferramentas para interagir com o Couchbase. O acesso a chave\/valor SEMPRE ser\u00e1 mais r\u00e1pido. \u00c9 assim que as coisas s\u00e3o. Portanto, o que eu promovo \u00e0s pessoas \u00e9 usar o poder e a flexibilidade que o Couchbase oferece para obter o desempenho e a funcionalidade de que preciso, onde e quando preciso. Isso ser\u00e1 uma combina\u00e7\u00e3o de chave\/valor, visualiza\u00e7\u00f5es tradicionais do Couchbase, \u00edndices secund\u00e1rios globais (GSI) e N1QL.<\/p>\n<p>Nesse caso de uso espec\u00edfico, preciso ser capaz de gravar dados em uma velocidade muito alta, ter uma maneira de procurar apenas alguns dos dados de uma forma muito espec\u00edfica e dimensionar a camada de dados linearmente para lidar com isso com complexidade m\u00ednima. Key\/Value fez isso para mim com o padr\u00e3o de chave de objeto correto. Nada me impede de usar o N1QL para consultar esses eventos ou registros de como projetamos esse esquema. Observe que eu n\u00e3o falei muito sobre a modelagem de objetos de documentos JSON em si. Para o que estou tentando mostrar, isso n\u00e3o importa e, quanto \u00e0 consulta, eu simplesmente n\u00e3o precisava dessa ferramenta.<\/p>\n<p>Dito isso, no pr\u00f3ximo blog sobre esse modelo de objeto, vou me aprofundar em como podemos analisar esse mesmo evento com N1QL e GSI quando fizer sentido.<\/p>","protected":false},"excerpt":{"rendered":"<p>Introduction Couchbase is capable of very high write rates, can scale out fast and add nodes easily, but a poor object model can be a hindrance to these qualities. In some databases, if you have very high write rates, you [&hellip;]<\/p>","protected":false},"author":23,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1814,1815,1816],"tags":[1449,1447,1450,1261,1448],"ppma_author":[9008],"class_list":["post-1953","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-application-design","category-best-practices-and-tutorials","category-couchbase-server","tag-advanced-data-modeling","tag-data-modeling","tag-document-normalization","tag-json","tag-object-modeling"],"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>Advanced Object Modeling in for logging and event data<\/title>\n<meta name=\"description\" content=\"Learn advanced object modeling for High write rates with logging and event data, also have easy searchability with N1QL as well.\" \/>\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\/advanced-object-modeling-for-high-write-rates-with-logging-and-event-data\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Advanced Object Modeling for High Write Rates with Logging and Event Data - Part 1\" \/>\n<meta property=\"og:description\" content=\"Learn advanced object modeling for High write rates with logging and event data, also have easy searchability with N1QL as well.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/advanced-object-modeling-for-high-write-rates-with-logging-and-event-data\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2015-12-16T19:27:34+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-09-12T08:06:34+00:00\" \/>\n<meta name=\"author\" content=\"Kirk Kirkconnell, Senior Solutions Engineer, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kirk Kirkconnell, Senior Solutions Engineer, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/advanced-object-modeling-for-high-write-rates-with-logging-and-event-data\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/advanced-object-modeling-for-high-write-rates-with-logging-and-event-data\/\"},\"author\":{\"name\":\"Kirk Kirkconnell, Senior Solutions Engineer, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/2887e38425754897cea2d896bf082e6d\"},\"headline\":\"Advanced Object Modeling for High Write Rates with Logging and Event Data &#8211; Part 1\",\"datePublished\":\"2015-12-16T19:27:34+00:00\",\"dateModified\":\"2024-09-12T08:06:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/advanced-object-modeling-for-high-write-rates-with-logging-and-event-data\/\"},\"wordCount\":1741,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/advanced-object-modeling-for-high-write-rates-with-logging-and-event-data\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"Advanced Data Modeling\",\"Data Modeling\",\"Document Normalization\",\"JSON\",\"Object Modeling\"],\"articleSection\":[\"Application Design\",\"Best Practices and Tutorials\",\"Couchbase Server\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/advanced-object-modeling-for-high-write-rates-with-logging-and-event-data\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/advanced-object-modeling-for-high-write-rates-with-logging-and-event-data\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/advanced-object-modeling-for-high-write-rates-with-logging-and-event-data\/\",\"name\":\"Advanced Object Modeling in for logging and event data\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/advanced-object-modeling-for-high-write-rates-with-logging-and-event-data\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/advanced-object-modeling-for-high-write-rates-with-logging-and-event-data\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2015-12-16T19:27:34+00:00\",\"dateModified\":\"2024-09-12T08:06:34+00:00\",\"description\":\"Learn advanced object modeling for High write rates with logging and event data, also have easy searchability with N1QL as well.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/advanced-object-modeling-for-high-write-rates-with-logging-and-event-data\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/advanced-object-modeling-for-high-write-rates-with-logging-and-event-data\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/advanced-object-modeling-for-high-write-rates-with-logging-and-event-data\/#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\/advanced-object-modeling-for-high-write-rates-with-logging-and-event-data\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Advanced Object Modeling for High Write Rates with Logging and Event Data &#8211; Part 1\"}]},{\"@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\/2887e38425754897cea2d896bf082e6d\",\"name\":\"Kirk Kirkconnell, Senior Solutions Engineer, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/60a4ddb304fde12e65369919433b8dc7\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f704905856dcd1767d50024da51e2fa159eea665c85aff3224bc8763551d4e35?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f704905856dcd1767d50024da51e2fa159eea665c85aff3224bc8763551d4e35?s=96&d=mm&r=g\",\"caption\":\"Kirk Kirkconnell, Senior Solutions Engineer, Couchbase\"},\"description\":\"Kirk Kirkconnell was a Senior Solutions Engineer at Couchbase working with customers in multiple capacities to assist them in architecting, deploying, and managing Couchbase. His expertise is in operations, hosting, and support of large-scale application and database infrastructures.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/kirk-kirkconnell\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Advanced Object Modeling in for logging and event data","description":"Aprenda a modelagem avan\u00e7ada de objetos para obter altas taxas de grava\u00e7\u00e3o com registro e dados de eventos, al\u00e9m de ter f\u00e1cil capacidade de pesquisa com o N1QL.","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\/advanced-object-modeling-for-high-write-rates-with-logging-and-event-data\/","og_locale":"pt_BR","og_type":"article","og_title":"Advanced Object Modeling for High Write Rates with Logging and Event Data - Part 1","og_description":"Learn advanced object modeling for High write rates with logging and event data, also have easy searchability with N1QL as well.","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/advanced-object-modeling-for-high-write-rates-with-logging-and-event-data\/","og_site_name":"The Couchbase Blog","article_published_time":"2015-12-16T19:27:34+00:00","article_modified_time":"2024-09-12T08:06:34+00:00","author":"Kirk Kirkconnell, Senior Solutions Engineer, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Kirk Kirkconnell, Senior Solutions Engineer, Couchbase","Est. reading time":"8 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/advanced-object-modeling-for-high-write-rates-with-logging-and-event-data\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/advanced-object-modeling-for-high-write-rates-with-logging-and-event-data\/"},"author":{"name":"Kirk Kirkconnell, Senior Solutions Engineer, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/2887e38425754897cea2d896bf082e6d"},"headline":"Advanced Object Modeling for High Write Rates with Logging and Event Data &#8211; Part 1","datePublished":"2015-12-16T19:27:34+00:00","dateModified":"2024-09-12T08:06:34+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/advanced-object-modeling-for-high-write-rates-with-logging-and-event-data\/"},"wordCount":1741,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/advanced-object-modeling-for-high-write-rates-with-logging-and-event-data\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["Advanced Data Modeling","Data Modeling","Document Normalization","JSON","Object Modeling"],"articleSection":["Application Design","Best Practices and Tutorials","Couchbase Server"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/advanced-object-modeling-for-high-write-rates-with-logging-and-event-data\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/advanced-object-modeling-for-high-write-rates-with-logging-and-event-data\/","url":"https:\/\/www.couchbase.com\/blog\/advanced-object-modeling-for-high-write-rates-with-logging-and-event-data\/","name":"Advanced Object Modeling in for logging and event data","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/advanced-object-modeling-for-high-write-rates-with-logging-and-event-data\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/advanced-object-modeling-for-high-write-rates-with-logging-and-event-data\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2015-12-16T19:27:34+00:00","dateModified":"2024-09-12T08:06:34+00:00","description":"Aprenda a modelagem avan\u00e7ada de objetos para obter altas taxas de grava\u00e7\u00e3o com registro e dados de eventos, al\u00e9m de ter f\u00e1cil capacidade de pesquisa com o N1QL.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/advanced-object-modeling-for-high-write-rates-with-logging-and-event-data\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/advanced-object-modeling-for-high-write-rates-with-logging-and-event-data\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/advanced-object-modeling-for-high-write-rates-with-logging-and-event-data\/#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\/advanced-object-modeling-for-high-write-rates-with-logging-and-event-data\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Advanced Object Modeling for High Write Rates with Logging and Event Data &#8211; Part 1"}]},{"@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\/2887e38425754897cea2d896bf082e6d","name":"Kirk Kirkconnell, engenheiro de solu\u00e7\u00f5es s\u00eanior, Couchbase","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/60a4ddb304fde12e65369919433b8dc7","url":"https:\/\/secure.gravatar.com\/avatar\/f704905856dcd1767d50024da51e2fa159eea665c85aff3224bc8763551d4e35?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f704905856dcd1767d50024da51e2fa159eea665c85aff3224bc8763551d4e35?s=96&d=mm&r=g","caption":"Kirk Kirkconnell, Senior Solutions Engineer, Couchbase"},"description":"Kirk Kirkconnell foi engenheiro de solu\u00e7\u00f5es s\u00eanior da Couchbase, trabalhando com clientes em v\u00e1rias capacidades para ajud\u00e1-los a arquitetar, implantar e gerenciar o Couchbase. Sua experi\u00eancia \u00e9 em opera\u00e7\u00f5es, hospedagem e suporte de infraestruturas de aplicativos e bancos de dados em larga escala.","url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/kirk-kirkconnell\/"}]}},"authors":[{"term_id":9008,"user_id":23,"is_guest":0,"slug":"kirk-kirkconnell","display_name":"Kirk Kirkconnell, Senior Solutions Engineer, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/f704905856dcd1767d50024da51e2fa159eea665c85aff3224bc8763551d4e35?s=96&d=mm&r=g","author_category":"","last_name":"Kirkconnell","first_name":"Kirk","job_title":"","user_url":"","description":"Kirk Kirkconnell foi engenheiro de solu\u00e7\u00f5es s\u00eanior da Couchbase, trabalhando com clientes em v\u00e1rias capacidades para ajud\u00e1-los a arquitetar, implantar e gerenciar o Couchbase. Sua experi\u00eancia \u00e9 em opera\u00e7\u00f5es, hospedagem e suporte de infraestruturas de aplicativos e bancos de dados em larga escala."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/1953","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\/23"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=1953"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/1953\/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=1953"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=1953"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=1953"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=1953"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}