{"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\/es\/advanced-object-modeling-for-high-write-rates-with-logging-and-event-data\/","title":{"rendered":"Modelado avanzado de objetos para altas tasas de escritura con registro y datos de eventos - Parte 1"},"content":{"rendered":"<h2>Introducci\u00f3n<\/h2>\n<p>Couchbase es capaz de tasas de escritura muy altas, puede escalar r\u00e1pidamente y a\u00f1adir nodos f\u00e1cilmente, pero un modelo de objetos pobre puede ser un obst\u00e1culo para estas cualidades. En algunas bases de datos, si tienes tasas de escritura muy altas, sacrificas las tasas de lectura, pero Couchbase tiene algunas capacidades bastante \u00fanicas en el espacio NoSQL para soportar ambas de una manera eficaz. En esta entrada del blog vamos a discutir lo que se necesita para dise\u00f1ar un modelo de objetos que jugar\u00e1 a estas capacidades de registro y datos de eventos, pero tambi\u00e9n tienen f\u00e1cil capacidad de b\u00fasqueda con N1QL tambi\u00e9n.<\/p>\n<p>El ejemplo de caso de uso que me encontr\u00e9 en una conversaci\u00f3n hace poco es utilizar Couchbase como base de datos operativa para recopilar varios tipos de eventos de sistemas externos como equipos de red, servidores o incluso datos de registro. A continuaci\u00f3n, el servicio necesita la capacidad de ver muy r\u00e1pidamente el n\u00famero de eventos en la interfaz de usuario en una especie de rollup cada hora. La otra necesidad es poder hacer clic en ese n\u00famero y profundizar en una lista de ese tipo de evento. Por ejemplo, mostrar todos los eventos RouterError del 22 de junio de 2015 para la hora de las 16:00.<\/p>\n<p>Otra cosa que hay que recordar, esta entrada del blog es para mostrar un concepto m\u00e1s avanzado y c\u00f3mo se puede aplicar. Obviamente no significa que sea la forma correcta para tu caso de uso, incluso si puede ser similar a lo que estoy hablando. Es para hacerte pensar sobre el modelado avanzado de objetos en Couchbase y c\u00f3mo podr\u00edas utilizar su poder de manera m\u00e1s eficaz para sacar el m\u00e1ximo provecho de una manera que puede no ser obvia para todos.<\/p>\n<h2>Contador incremental para leer eventos y conteos por hora<\/h2>\n<p>Este enfoque permitir\u00eda leer f\u00e1cilmente el \u00faltimo n\u00famero N de eventos o un tipo de evento para una hora en lugar de hacer las cosas con una consulta de vista. O podemos leer todos los eventos de un d\u00eda concreto. Est\u00e1 optimizado para tasas de escritura muy altas y permite una b\u00fasqueda f\u00e1cil de datos dentro de un nivel decente de granularidad. Voy a explicar un alto nivel de esto y luego sumergirse en ejemplos espec\u00edficos para explicar la idea m\u00e1s.<\/p>\n<p>Para ello necesitaremos dos tipos de objetos en nuestro cubo.<\/p>\n<ol>\n<li>El objeto contador: es un objeto clave\/valor que contiene un n\u00famero entero. Este entero representa el extremo superior del n\u00famero de objetos para ese tipo de evento y hora o dicho de otra manera, es el extremo superior de la matriz de eventos. Tambi\u00e9n es el objeto que leer\u00e1 para mostrar cu\u00e1ntos eventos hay para ese combo tipo\/hora. Usaremos m\u00e9todos especiales y espec\u00edficos de los SDKs de Couchbase llamados Counter Operations. Cada SDK tiene su propia versi\u00f3n de estos m\u00e9todos, pero <a style=\"text-decoration: none;\" href=\"https:\/\/docs.couchbase.com\/nodejs-sdk\/2.1\/atomic-operations.html\"><u>aqu\u00ed est\u00e1 la versi\u00f3n node.js de la misma como un ejemplo<\/u><\/a>.<\/li>\n<li>El Objeto Evento - Este es un objeto documento JSON y tiene los datos reales sobre los eventos que queremos capturar.<\/li>\n<\/ol>\n<h2>El objeto contador<\/h2>\n<p>Se crea un objeto contador para cada combinaci\u00f3n de tipo de evento y hora. Piense en ello como un objeto operativo sobre los documentos que vamos a crear. Esto puede sonar extra\u00f1o, pero ten paciencia conmigo. Este objeto contador ser\u00e1 un objeto clave\/valor, no JSON, siendo el valor un entero. Hay una operaci\u00f3n de contador en los SDKs de Couchbase espec\u00edficamente para este tipo de objeto y es muy eficiente y ofrece capacidades r\u00e1pidas de lectura-escritura para mantener la consistencia. Es una operaci\u00f3n \u00fanica y at\u00f3mica en los SDKs de Couchbase por lo que es muy f\u00e1cil y 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>He aqu\u00ed un ejemplo de la versi\u00f3n node.js en la documentaci\u00f3n<\/u><\/a>. En nuestro caso, este contador se incrementar\u00e1 cada vez que a\u00f1adamos un nuevo evento. Dado que cada tipo de evento y hora tiene su propio contador, podemos leer f\u00e1cilmente cu\u00e1ntos eventos hay y ese n\u00famero se convierte en el l\u00edmite superior de un array si necesit\u00e1ramos leer todos los eventos de ese tipo y hora.<\/p>\n<p>La otra parte importante es la clave del objeto. Queremos elegir una clave para que la aplicaci\u00f3n pueda construir f\u00e1cilmente las claves necesarias y luego reunir los datos por clave para mostrar el n\u00famero de eventos, pero tambi\u00e9n los eventos para el per\u00edodo de tiempo dado. La obtenci\u00f3n de objetos por clave siempre ser\u00e1 m\u00e1s r\u00e1pida que la consulta. Es la diferencia entre conocer ya la respuesta y tener que hacer una pregunta para recuperar los datos que son la respuesta. Conociendo la clave, basta con decirle a la base de datos que recupere los datos. Simple, eficaz y muy r\u00e1pido.<\/p>\n<p>He aqu\u00ed un ejemplo de clave\/valor del contador:<\/p>\n<table style=\"border: none;\">\n<tbody>\n<tr>\n<td style=\"vertical-align: top;\">Llave objeto:<\/p>\n<pre>Tipo de evento::marca de tiempo::contador<\/pre>\n<p>Un ejemplo de ObjectID ser\u00eda:<\/p>\n<pre>SomeEventType::2015022016::counter<\/pre>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"vertical-align: top;\">Valor: 293<\/p>\n<p>Donde 293 es el valor del incremento m\u00e1s reciente del contador.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Para la marca de tiempo en la clave, hice el a\u00f1o de cuatro d\u00edgitos, un mes de dos d\u00edgitos, el d\u00eda, y luego la hora (en tiempo de 24 horas). No necesit\u00e9 bajar al nivel de minutos o segundos, pero se podr\u00eda. Tambi\u00e9n podr\u00eda haber utilizado una marca de tiempo UNIX que tambi\u00e9n funcionar\u00eda, pero de nuevo eso era innecesariamente granular para este caso de uso particular.<\/p>\n<p>En el ejemplo anterior, 2015 es el a\u00f1o, febrero es el mes, 20 es el d\u00eda y 4pm para la hora. As\u00ed que si quisieras leer todos los contadores para un tipo de evento y un d\u00eda espec\u00edfico, la aplicaci\u00f3n podr\u00eda reunir f\u00e1cilmente los objectIDs para esos contadores y leerlos en bloque.<\/p>\n<p>Otra cosa, yo utilizo dos puntos como delimitador, pero puedes utilizar lo que te parezca m\u00e1s l\u00f3gico.<\/p>\n<h2><\/h2>\n<h2>El objeto de evento<\/h2>\n<p>Para cada objeto de evento, el ID del objeto ser\u00eda algo parecido a lo siguiente:<\/p>\n<table style=\"border: none;\">\n<tbody>\n<tr>\n<td style=\"vertical-align: top;\">\n<pre>SomeEventType::2015062216::293<\/pre>\n<p>Donde 293 es el valor del incremento m\u00e1s reciente del objeto contador para esa 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>Con este esquema, para que usted recupere el recuento de elementos para ese Tipo de Evento en una hora espec\u00edfica, s\u00f3lo tiene que leer el objeto operativo uno y ah\u00ed lo tiene.<\/p>\n<p>En pocas palabras, el valor del contador es el l\u00edmite superior de los objetos de ese tipo de evento. Si quisieras los \u00faltimos 10 eventos de ese tipo de evento durante una hora, leer\u00edas ese contador, restar\u00edas 9 y luego har\u00edas una lectura masiva paralelizada en Couchbase para los siguientes 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>As\u00ed que puedes leer todos estos 10 eventos muy r\u00e1pido y sin consultas, sin \u00edndices, sin vistas, s\u00f3lo velocidad bruta v\u00eda lectura masiva paralelizada. Una lectura masiva de los objetos listados ser\u00eda MUY r\u00e1pida en Couchbase incluso si tuvieras m\u00e1s de 300 de ellos.<\/p>\n<p>El \u00fanico problema menor con este enfoque, es que es posible, aunque muy poco probable, que ese recuento sea inconsistente con el objeto contador real. Por ejemplo, alguien podr\u00eda iterar el objeto contador, pero luego no crear un documento de evento con ese objeto. Dicho esto, si usted est\u00e1 utilizando operaciones masivas y solicita un objeto que no existe, simplemente recibir\u00e1 un fallo y toda la operaci\u00f3n no sufrir\u00e1 por ello. En mi opini\u00f3n, esto est\u00e1 muy bien teniendo en cuenta el rendimiento que puede alcanzar un modelo como este. Si se te ocurre una forma mejor, por favor publ\u00edcala en los comentarios porque me encantar\u00eda conocerla.<\/p>\n<h2>El c\u00f3digo de aplicaci\u00f3n<\/h2>\n<p>Veamos c\u00f3mo se podr\u00eda dise\u00f1ar el c\u00f3digo de la aplicaci\u00f3n para leer y escribir este modelo de objetos. Voy a usar pseudo-c\u00f3digo para no entrar en un lenguaje en particular. Dejar\u00e9 los detalles a tu elecci\u00f3n de lenguaje y Couchbase SDK.<\/p>\n<pre>function writeNewEvent() {\r\n\r\n  Lee la fecha y hora actuales.\r\n\r\n\r\n  Llama a la funci\u00f3n iterar sobre el objeto contador con un valor inicial de 0 y lee de vuelta el valor. (Usted debe leer el valor de nuevo porque si ya existe obtendr\u00e1 el valor m\u00e1s actual, si usted acaba de ir con 0, podr\u00eda causar un problema. Si el objeto contador para este evento y periodo de tiempo no existe, ser\u00e1 creado por el SDK).\r\n\r\n\r\n  Cree un nuevo evento con la fecha\/hora y el n\u00famero de contador como parte de la clave\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    devuelve el valor del objeto contador de eventos\/fechas.\r\n\r\n}<\/pre>\n<h2>Resumen<\/h2>\n<p>Utilizando la serie de t\u00e9cnicas de modelado de objetos descritas anteriormente, es posible estructurar los datos de forma que se maximicen el rendimiento y el rendimiento. Aunque en un principio pueda resultar contraintuitivo, el uso de b\u00fasquedas adicionales de clave\/valor en lugar de consultas secundarias basadas en \u00edndices para la funcionalidad principal de la aplicaci\u00f3n puede aportar ventajas significativas. En muchos sistemas, una b\u00fasqueda compleja basada en \u00edndices puede tardar un orden de magnitud m\u00e1s en completarse que las simples b\u00fasquedas clave-valor utilizadas en este dise\u00f1o. En la arquitectura de sistema correcta, Couchbase puede proporcionar f\u00e1cilmente un tiempo de respuesta consistente por debajo del milisegundo para estas b\u00fasquedas. Entonces, cuando necesites el poder de hacer consultas reales, usa N1QL. Puedes elegir d\u00f3nde utilizar la potencia que te da Couchbase.<\/p>\n<p>Adem\u00e1s, gracias a la arquitectura de compartici\u00f3n autom\u00e1tica de Couchbase, la carga de las consultas y la ingesta se repartir\u00e1 uniformemente por todo el cl\u00faster. A medida que el uso de la aplicaci\u00f3n y la demanda de operaciones aumenta con el tiempo, se pueden a\u00f1adir nodos adicionales de Couchbase para escalar en una operaci\u00f3n en l\u00ednea, satisfaciendo la demanda sin ning\u00fan cambio en la capa de aplicaci\u00f3n.<\/p>\n<h2>Posdata sobre la consulta<\/h2>\n<p>Una \u00faltima cosa si has llegado hasta aqu\u00ed. Puede que est\u00e9s diciendo, pero todo esto y no estoy consultando la base de datos. \u00bfPor qu\u00e9 no est\u00e1s usando N1QL? Yo no he dicho que en este caso de uso no estar\u00eda utilizando N1QL y nada nos impide utilizar N1QL en estos documentos. La forma en que veo N1QL es que es una herramienta m\u00e1s en la caja de herramientas para interactuar con Couchbase. El acceso clave\/valor SIEMPRE ser\u00e1 m\u00e1s r\u00e1pido. As\u00ed es como son las cosas. As\u00ed que lo que promuevo a la gente es usar el poder y la flexibilidad que Couchbase ofrece para obtener el rendimiento y la funcionalidad que necesito donde y cuando lo necesito. Esto ser\u00e1 una mezcla de clave\/valor, vistas tradicionales de Couchbase, \u00edndices secundarios globales (GSI) y N1QL.<\/p>\n<p>En este caso de uso espec\u00edfico, necesito poder escribir datos a una velocidad muy alta, tener una manera de buscar s\u00f3lo algunos de los datos de una manera muy espec\u00edfica y escalar el nivel de datos linealmente para manejar esto con una complejidad m\u00ednima. Key\/Value lo hizo por m\u00ed con el patr\u00f3n de clave de objeto correcto. Nada me impide sacar N1QL para consultar estos eventos o registros de c\u00f3mo hemos dise\u00f1ado este esquema. F\u00edjate que ni siquiera he hablado mucho del modelado de objetos del documento JSON en s\u00ed. Para lo que estoy tratando de mostrar que no importaba y en cuanto a la consulta, simplemente no necesitaba esa herramienta de la bolsa de herramientas.<\/p>\n<p>Dicho esto, en el pr\u00f3ximo blog sobre este modelo de objetos me sumergir\u00e9 para ver c\u00f3mo podemos desmenuzar estos mismos eventos con N1QL y GSI donde tenga 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 v25.8 (Yoast SEO v25.8) - 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\/es\/advanced-object-modeling-for-high-write-rates-with-logging-and-event-data\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\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\/es\/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\":\"es\",\"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\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/advanced-object-modeling-for-high-write-rates-with-logging-and-event-data\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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\":\"es\",\"@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\/es\/author\/kirk-kirkconnell\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Advanced Object Modeling in for logging and event data","description":"Learn advanced object modeling for High write rates with logging and event data, also have easy searchability with N1QL as well.","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\/es\/advanced-object-modeling-for-high-write-rates-with-logging-and-event-data\/","og_locale":"es_MX","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\/es\/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":"es","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":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/advanced-object-modeling-for-high-write-rates-with-logging-and-event-data\/"]}]},{"@type":"ImageObject","inLanguage":"es","@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":"El blog de Couchbase","description":"Couchbase, la base de datos 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":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@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, Ingeniero Superior de Soluciones, Couchbase","image":{"@type":"ImageObject","inLanguage":"es","@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 fue Ingeniero Senior de Soluciones en Couchbase trabajando con clientes en m\u00faltiples capacidades para ayudarles en la arquitectura, despliegue y gesti\u00f3n de Couchbase. Su experiencia se centra en operaciones, alojamiento y soporte de aplicaciones a gran escala e infraestructuras de bases de datos.","url":"https:\/\/www.couchbase.com\/blog\/es\/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 fue Ingeniero Senior de Soluciones en Couchbase trabajando con clientes en m\u00faltiples capacidades para ayudarles en la arquitectura, despliegue y gesti\u00f3n de Couchbase. Su experiencia se centra en operaciones, alojamiento y soporte de aplicaciones a gran escala e infraestructuras de bases de datos."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/1953","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/23"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=1953"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/1953\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=1953"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=1953"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=1953"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=1953"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}