{"id":9083,"date":"2020-08-12T08:39:57","date_gmt":"2020-08-12T15:39:57","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=9083"},"modified":"2025-06-13T22:39:26","modified_gmt":"2025-06-14T05:39:26","slug":"eventing-improvements-timers-handlers-and-statistics","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/eventing-improvements-timers-handlers-and-statistics\/","title":{"rendered":"Mejoras en los eventos: Temporizadores, controladores y estad\u00edsticas"},"content":{"rendered":"<p><span style=\"font-weight: 400\">Con el lanzamiento de Couchbase 6.6 el Servicio de Eventos tiene importantes mejoras en su funcionalidad.<\/span><\/p>\n<p>Hemos introducido nuevos temporizadores de eventos que pueden cancelarse utilizando la funci\u00f3n cancelTimer(), o creando un nuevo temporizador con el mismo identificador de referencia que un temporizador existente. Los temporizadores recurrentes tambi\u00e9n son totalmente compatibles, y se pueden utilizar f\u00e1cilmente para crear l\u00f3gica repetitiva mediante el uso de una devoluci\u00f3n de llamada del temporizador para crear temporizadores nuevos. La programaci\u00f3n de temporizadores permite crear temporizadores para d\u00edas, semanas o a\u00f1os en el futuro sin que ello afecte negativamente al rendimiento. El manejador OnDelete ahora indica si un documento fue borrado o expir\u00f3 usando el nuevo par\u00e1metro \"options\". Las estad\u00edsticas de eventos clave en la interfaz de usuario se encuentran ahora junto a cada control del ciclo de vida de las funciones.<\/p>\n<p>Juntas, estas mejoras simplifican el esfuerzo y el c\u00f3digo necesarios para crear una l\u00f3gica empresarial s\u00f3lida.<\/p>\n<h3>Requisitos previos<\/h3>\n<p>En este art\u00edculo presentaremos las claves <a href=\"https:\/\/www.couchbase.com\/blog\/es\/products\/eventing\/\">Eventos<\/a> mejoras a\u00f1adidas a la \u00faltima versi\u00f3n de GA, es decir, la versi\u00f3n 6.6.0 de Couchbase, y para cada elemento proporcionamos un ejemplo b\u00e1sico que funciona.\u00a0 <em>Sin embargo, por favor, comprenda que ninguna de las funciones de eventos proporcionadas en este art\u00edculo funcionar\u00e1 \"tal cual\" en versiones anteriores del servidor Couchbase sin cambios significativos y complejas soluciones.<\/em>.<\/p>\n<p>Si usted no est\u00e1 familiarizado con Couchbase o el servicio de Eventing por favor camine a trav\u00e9s de GET STARTED y un ejemplo de Eventing espec\u00edficamente consulte lo siguiente:<\/p>\n<ul>\n<li>Configure un servidor Couchbase 6.6.0 que funcione seg\u00fan las instrucciones de <a href=\"https:\/\/docs.couchbase.com\/server\/current\/getting-started\/start-here.html\">Comience aqu\u00ed<\/a><\/li>\n<li>Comprender tanto los conceptos b\u00e1sicos de Eventing como la forma de implementar una funci\u00f3n b\u00e1sica de Eventing siguiendo las instrucciones del manual <a href=\"https:\/\/docs.couchbase.com\/server\/current\/eventing\/eventing-examples-docarchive.html\">Archivo de documentos<\/a> ejemplo.<\/li>\n<\/ul>\n<h3>Los temporizadores de eventos ahora se pueden cancelar<\/h3>\n<p>Con la adici\u00f3n de la funci\u00f3n cancelTimer(), o mediante la creaci\u00f3n de un nuevo temporizador de eventos con el mismo identificador de referencia que un temporizador existente, se pueden cancelar los temporizadores activos que a\u00fan no se han disparado.  Esta mejora simplifica el c\u00f3digo necesario para realizar una l\u00f3gica de negocio robusta.<\/p>\n<p>Los desarrolladores ya no se ven obligados a a\u00f1adir campos y l\u00f3gica y hacer comprobaciones adicionales para asegurarse de que un temporizador que se dispara no es \"obsoleto\" y sustituido por un temporizador m\u00e1s reciente.<\/p>\n<h4>Por ejemplo:<\/h4>\n<ul>\n<li>Cree un bucket \"fuente\" y un bucket \"metadatos\" para Eventing.<\/li>\n<li>Despliegue esta funci\u00f3n (c\u00f3digo m\u00e1s abajo).<\/li>\n<li>Crear un documento en el cubo de origen con:\n<pre class=\"font:monospace font-size:18 line-height:24 toolbar-overlay:false striped:false marking:false ranges:false nums:false nums-toggle:false lang:default decode:true\">KEY user_scoreboard::1 and DATA {\"type\": \"user_scoreboard\", \"id\": 1}<\/pre>\n<\/li>\n<li>Inspeccione los troncos al cabo de un minuto.<\/li>\n<li>Elimina el documento con la clave \"user_scoreboard::1\".<\/li>\n<li>Inspeccione los troncos al cabo de un minuto.<\/li>\n<li>Despliega esta funci\u00f3n.<\/li>\n<\/ul>\n<pre class=\"toolbar-overlay:false lang:js decode:true\">function UserInactivityCallback(context) {\r\n    log('user was inactive for 10 minutes', context.docId);\r\n    \/*\r\n    * take some actions ...\r\n    *\/\r\n}\r\n\r\nfunction OnUpdate(doc, meta) {\r\n    if (doc.type != 'user_scoreboard') return;\r\n    \/\/ Create a timestamp 600 seconds from now\r\n    var tenMinutesFromNow = new Date(); \/\/ Get current time &amp; add 600 sec. to it.\r\n    tenMinutesFromNow.setSeconds(tenMinutesFromNow.getSeconds() + 600);\r\n\r\n    \/\/ Every mutation to the user's scoreboard will result in a new Timer but\r\n    \/\/ the old timers will be canceled as they have the same identifier, meta.id.\r\n    createTimer(UserInactivityCallback, tenMinutesFromNow, meta.id, {\r\n        \"docId\": meta.id\r\n    });\r\n}\r\n\r\nfunction OnDelete(meta, options) {\r\n    if (!(meta.id.startsWith(\"user_scoreboard:\"))) return;\r\n    log('user scoreboard was deleted for', meta.id);\r\n    \/\/ remove the timer as there is no related document anymore.\r\n    cancelTimer(UserInactivityCallback,meta.id);\r\n    \/*\r\n    * take some actions ...\r\n    *\/\r\n}<\/pre>\n<h3>Los temporizadores de eventos recurrentes son ahora totalmente compatibles<\/h3>\n<p>Los temporizadores recurrentes son totalmente compatibles, es decir, una funci\u00f3n invocada por una llamada de retorno de un temporizador puede crear nuevos temporizadores de forma fiable.  Esta actualizaci\u00f3n permite que una \u00fanica funci\u00f3n de eventos implemente de forma fiable eventos recurrentes complejos creando nuevos temporizadores desde la llamada de retorno de otro temporizador.<\/p>\n<p>Anteriormente se requer\u00eda una co-funci\u00f3n para crear de forma fiable una serie recurrente de Temporizadores (imagen izquierda), la versi\u00f3n 6.6 simplifica el c\u00f3digo necesario para implementar la l\u00f3gica de negocio recurrente (o programada) (imagen derecha).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-8730\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/04\/ev_cr_1u_design_choices-1.png\" alt=\"Eventing cron update\" width=\"1479\" height=\"649\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/04\/ev_cr_1u_design_choices-1.png 1479w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/04\/ev_cr_1u_design_choices-1-300x132.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/04\/ev_cr_1u_design_choices-1-1024x449.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/04\/ev_cr_1u_design_choices-1-768x337.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/04\/ev_cr_1u_design_choices-1-20x9.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/04\/ev_cr_1u_design_choices-1-1320x579.png 1320w\" sizes=\"auto, (max-width: 1479px) 100vw, 1479px\" \/><\/p>\n<h4>Por ejemplo:<\/h4>\n<ul>\n<li>Cree un bucket \"fuente\" y un bucket \"metadatos\" para Eventing.<\/li>\n<li>Haga un alias de cubo en la configuraci\u00f3n de la funci\u00f3n como \"src_bkt\" para el cubo de origen en modo lectura+escritura.<\/li>\n<li>Despliegue esta funci\u00f3n (c\u00f3digo m\u00e1s abajo).<\/li>\n<li>Crear un documento en el cubo de origen con:\n<pre class=\"font:monospace font-size:18 line-height:24 toolbar-overlay:false striped:false marking:false ranges:false nums:false nums-toggle:false lang:default decode:true\">KEY recurring_timer::1 and DATA {\"type\": \"recurring_timer\", \"id\": 1, \"active\": true}<\/pre>\n<\/li>\n<li>Inspeccione los troncos al cabo de un minuto.<\/li>\n<li>Inspeccione los troncos despu\u00e9s de varios minutos.<\/li>\n<li>Altere el documento con clave \"recurring_timer::1\" y cambie el campo \"active\" a false de la siguiente manera:<\/li>\n<li>\n<pre class=\"font:monospace font-size:18 line-height:24 toolbar-overlay:false toolbar-hide:false toolbar-delay:false striped:false marking:false ranges:false nums:false nums-toggle:false lang:default decode:true\">KEY recurring_timer::1 and DATA {\"type\": \"recurring_timer\", \"id\": 1, \"active\": false}<\/pre>\n<\/li>\n<li>Inspeccione los troncos al cabo de un minuto.<\/li>\n<li>Despliega esta funci\u00f3n.<\/li>\n<\/ul>\n<pre class=\"toolbar-overlay:false lang:js decode:true\">function CreateRecurringTimer(context) {\r\n    log('From CreateRecurringTimer: creating timer', context.mode, context.id);\r\n    \/\/ Create a timestamp 30 seconds from now\r\n    var thirtySecFromNow = new Date(); \/\/ Get current time &amp; add 30 sec. to it.\r\n    thirtySecFromNow.setSeconds(thirtySecFromNow.getSeconds() + 30);\r\n    \/\/ Create a document to use as out for our context\r\n    createTimer(RecurringTimerCallback, thirtySecFromNow, context.id, context);\r\n}\r\n\r\nfunction RecurringTimerCallback(context) {\r\n    log('From RecurringTimerCallback: timer fired', context);\r\n\r\n    \/*\r\n    * do any sort of recurring work here, just update a date_stamp in a document\r\n    * written back to the source bucket (but with the ID prefixed whit \"cur_\")\r\n    *\/\r\n    src_bkt[\"cur_\" + context.id] = { \"last_update\": new Date() };\r\n\r\n    \/\/ rearm the timer\r\n    CreateRecurringTimer({ \"id\": context.id, \"mode\": \"via_callback\" })\r\n}\r\n\r\nfunction OnUpdate(doc, meta) {\r\n    \/\/ You would typically filter to mutations of interest\r\n    if (doc.type !== 'recurring_timer') return;\r\n    if (doc.active === false) {\r\n        if (cancelTimer(RecurringTimerCallback, meta.id)) {\r\n            log('From OnUpdate: canceled active Timer, doc.active', doc.active, meta.id);\r\n        } else {\r\n            log('From OnUpdate: no active Timer to cancel, doc.active', doc.active, meta.id);\r\n        }\r\n    } else {\r\n        log('From OnUpdate: create\/overwrite doc.active', doc.active, meta.id);\r\n        CreateRecurringTimer({  \"id\": meta.id, \"mode\": \"via_onupdate\" });\r\n    }\r\n}<\/pre>\n<h3>Se pueden crear temporizadores con d\u00edas\/semanas\/a\u00f1os de antelaci\u00f3n<\/h3>\n<p><span style=\"font-weight: 400\">Se puede crear un temporizador o un mill\u00f3n de temporizadores sin que ello repercuta negativamente en el rendimiento de un sistema de Eventing que, de otro modo, estar\u00eda inactivo. Esta capacidad abre casos de uso para notificaciones a largo plazo y programas de captaci\u00f3n de clientes.<\/span><\/p>\n<p><a id=\"#footnote_1_src\"><\/a>En las versiones 6.5.X, la creaci\u00f3n de varios miles de temporizadores en el futuro (como en una hora o m\u00e1s) en un sistema inactivo daba lugar a un n\u00famero creciente de operaciones de cubo de metadatos que afectaban al rendimiento y pod\u00edan llegar a bloquear las mutaciones para una funci\u00f3n de eventos determinada.<a href=\"#footnote_1\"><sup>[1]<\/sup><\/a><\/p>\n<p><a id=\"#footnote_2_src\"><\/a>Tenga en cuenta que en una operaci\u00f3n cancelTimer() o sobrescribiendo un Temporizador existente por referencia habr\u00e1 documentos temporales en el cubo de \"metadatos\" de Eventing, eventualmente estos documentos ser\u00e1n purgados.<a href=\"#footnote_2\"><sup>[2]<\/sup><\/a><\/p>\n<h4>Por ejemplo:<\/h4>\n<p>Demostrar la creaci\u00f3n de una gran cantidad de temporizadores de eventos (en este caso 50.000) y programarlos bien en el futuro (por 96 horas) y luego cancelar todo el conjunto (o permiti\u00f3 que todos ellos para disparar la rutina de devoluci\u00f3n de llamada <em>TimerCallback<\/em>).<\/p>\n<ul>\n<li>Cree un bucket \"fuente\" y un bucket \"metadatos\" para Eventing.<\/li>\n<li>Despliegue esta funci\u00f3n (c\u00f3digo m\u00e1s abajo).<\/li>\n<li>Crear un documento en el cubo de origen con cualquier DATOS como s\u00f3lo nos fijamos en.\n<pre class=\"font:monospace font-size:18 line-height:24 toolbar-overlay:false toolbar-hide:false toolbar-delay:false striped:false marking:false ranges:false nums:false nums-toggle:false lang:default decode:true\">KEY spawn_50k_timers::1<\/pre>\n<\/li>\n<li>Inspeccione los troncos despu\u00e9s de uno o dos minutos.<\/li>\n<li>Elimina el documento con la clave \"spawn_50k_timers::1\".<\/li>\n<li>Inspeccione los troncos despu\u00e9s de uno o dos minutos.<\/li>\n<li>Despliega esta funci\u00f3n.<\/li>\n<\/ul>\n<p>Para ver c\u00f3mo se crean y disparan los cron\u00f3metros de las pruebas de 50K (en lugar de cancelarse):<\/p>\n<ul>\n<li>Edita la funci\u00f3n y cambia delayMinutes a 1 (no quieres esperar 4 d\u00edas).<\/li>\n<li>Despliegue la funci\u00f3n modificada (c\u00f3digo siguiente).<\/li>\n<li>Cree un documento en el bucket de origen con cualquier DATO ya que s\u00f3lo miramos la CLAVE.\n<pre class=\"font:monospace font-size:18 line-height:24 toolbar-overlay:false striped:false marking:false ranges:false nums:false nums-toggle:false lang:default decode:true\">KEY spawn_50k_timers::1<\/pre>\n<\/li>\n<li>Inspeccione los troncos despu\u00e9s de dos minutos.<\/li>\n<li>Elimina el documento con la clave \"spawn_50k_timers::1\".<\/li>\n<li>Inspeccione los troncos despu\u00e9s de uno o dos minutos.<\/li>\n<li>Despliega esta funci\u00f3n.<\/li>\n<\/ul>\n<pre class=\"toolbar-overlay:false lang:js decode:true\">function TimerCallback(context) {\r\n    if (context.timer_num == 1 || context.timer_num == 50000)\r\n        log('TimerCallback: fired timer #', context.timer_num);\r\n    \/*\r\n    * take some actions ...\r\n    *\/\r\n}\r\n\r\nfunction OnUpdate(doc, meta) {\r\n    if (meta.id != 'spawn_50k_timers::1') return;\r\n    \r\n    \/\/ Create a timestamp 96 hours from now (4 days)\r\n    var delayMinutes = 60*96;\r\n    var futureTime = new Date(); \r\n    futureTime.setMinutes(futureTime.getMinutes() + delayMinutes);\r\n\r\n    \/\/ make 50K timers \r\n    for (var i=1; i&lt;= 50000; i++) {\r\n        var timer_id = \"tmr_\" + i;\r\n        if (i == 1 || i == 50000)\r\n            log('OnUpdate: create timer # ', i, timer_id);\r\n        try {\r\n            createTimer(TimerCallback, futureTime, timer_id, \r\n                { \"docId\": meta.id, \"timer_num\": i});\r\n        } catch (e) {\r\n            log('OnUpdate:  create #', i, \" error \", e);\r\n        }            \r\n    }\r\n}\r\n\r\nfunction OnDelete(meta, options) {\r\n    if (meta.id != 'spawn_50k_timers::1') return;\r\n    \/*\r\n    * Remove the 50K timer as there is no related control document anymore.\r\n    *\r\n    * Note on a cancel or overwrite there will be documents which will be \r\n    * cleaned up at a) initial firing schedule of the Timers, b) undeployment \r\n    * of the function, or c) a lazy cleaning process by the Eventing Service.\r\n    *\/\r\n    for (var i=1; i&lt;= 50000; i++) {\r\n        var timer_id = \"tmr_\" + i;\r\n        if (i == 1 || i == 50000)\r\n            log('OnDelete: clear timer # ', i, timer_id);\r\n        try {\r\n            cancelTimer(TimerCallback, timer_id);\r\n        } catch (e) {\r\n            log('OnDelete: clear timer #', i, \" error \", e);\r\n        }\r\n    }\r\n}<\/pre>\n<h3>Las estad\u00edsticas de eventos est\u00e1n ahora ubicadas junto con los controles del ciclo de vida.<\/h3>\n<p>Cuatro (4) estad\u00edsticas clave de Eventing en la UI est\u00e1n ahora co-localizadas con cada control del Ciclo de Vida de las Funciones. Estas mejoras simplifican el esfuerzo y el c\u00f3digo y diagnosticar Funciones Eventing para hacer r\u00e1pidamente la l\u00f3gica de negocio robusto.<\/p>\n<p>El desarrollador o administrador puede determinar inmediatamente que una funci\u00f3n se est\u00e1 comportando mal sin tener que navegar fuera de los controles del ciclo de vida de la funci\u00f3n.<\/p>\n<h4>Por ejemplo:<\/h4>\n<ul>\n<li>Cree un bucket \"fuente\" y un bucket \"metadatos\" para Eventing.<\/li>\n<li>Haga unos documentos cualquier CLAVE y cualquier DATOS en el cubo de origen.<\/li>\n<li>Despliega la funci\u00f3n modificada (c\u00f3digo de abajo) contiene un error de sintaxis, olvidando poner var delante de una variable.<\/li>\n<\/ul>\n<pre class=\"toolbar-overlay:false lang:js decode:true\">function OnUpdate(doc, meta) {\r\n    log('docId', meta.id);\r\n    \/\/ this is an error missing 'var'\r\n    a = 2;\r\n}<\/pre>\n<ul>\n<li>Cuando se despliega la funci\u00f3n de eventos, el desarrollador recibe inmediatamente la se\u00f1al de que algo ha ido mal.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-9086\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/08\/evt_66_stats_bad_function1.png\" alt=\"\" width=\"889\" height=\"153\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/evt_66_stats_bad_function1.png 889w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/evt_66_stats_bad_function1-300x52.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/evt_66_stats_bad_function1-768x132.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/evt_66_stats_bad_function1-20x3.png 20w\" sizes=\"auto, (max-width: 889px) 100vw, 889px\" \/><\/p>\n<ul>\n<li>El usuario responde al feed back, es decir, a los fallos \"rojos\" y puede inspeccionar la Funci\u00f3n en busca del origen del error.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-9087\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/08\/evt_66_stats_bad_function2.png\" alt=\"\" width=\"893\" height=\"214\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/evt_66_stats_bad_function2.png 918w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/evt_66_stats_bad_function2-300x72.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/evt_66_stats_bad_function2-768x184.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/evt_66_stats_bad_function2-20x5.png 20w\" sizes=\"auto, (max-width: 893px) 100vw, 893px\" \/><\/p>\n<ul>\n<li>Despliegue esta funci\u00f3n de eventos.<\/li>\n<li>Corregir el error en este caso hacer la l\u00ednea 4: \"var a=2;\".<\/li>\n<li>Despliegue de nuevo esta funci\u00f3n de eventos.<\/li>\n<li>Una vez que el c\u00f3digo se fija el desarrollador puede ver el comportamiento correcto y el progreso como contador de \u00e9xito ahora se incrementa.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-9088\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/08\/evt_66_stats_bad_function3.png\" alt=\"\" width=\"890\" height=\"149\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/evt_66_stats_bad_function3.png 890w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/evt_66_stats_bad_function3-300x50.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/evt_66_stats_bad_function3-768x129.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/evt_66_stats_bad_function3-20x3.png 20w\" sizes=\"auto, (max-width: 890px) 100vw, 890px\" \/><\/p>\n<h3>El manejador OnDelete ahora indica Borrado o Expiraci\u00f3n<\/h3>\n<p>El manejador OnDelete ahora indica si un documento fue eliminado o expir\u00f3 a trav\u00e9s de un nuevo par\u00e1metro \"opciones\".  Esta capacidad, solicitada a menudo, permite ejecutar una l\u00f3gica diferente en funci\u00f3n del tipo de eliminaci\u00f3n.<\/p>\n<h4>Por ejemplo:<\/h4>\n<ul>\n<li>Crear un bucket \"fuente\" y un bucket \"metadatos\" para Eventing<\/li>\n<li>Despliegue esta funci\u00f3n (c\u00f3digo siguiente)<\/li>\n<li>Cree un documento en el bucket de origen con cualquier DATO ya que s\u00f3lo miramos la CLAVE\n<pre class=\"font:monospace font-size:18 line-height:24 toolbar-overlay:false striped:false marking:false ranges:false nums:false nums-toggle:false lang:default decode:true\">KEY doc_to_delete::1<\/pre>\n<\/li>\n<li>Inspeccione los registros despu\u00e9s de unos segundos<\/li>\n<li>Elimina el documento con clave \"doc_to_delete::1\"<\/li>\n<li>Inspeccione los troncos despu\u00e9s de un minuto<\/li>\n<li>Despliegue de esta funci\u00f3n<\/li>\n<\/ul>\n<pre class=\"toolbar-overlay:false lang:js decode:true\">function OnDelete(meta, options) {\r\n    if (options.expired) {\r\n        log(\"doc expired:\",meta.id);\r\n        \/*\r\n        * take some action ...\r\n        *\/\r\n    } else {\r\n        log(\"doc deleted:\",meta.id);\r\n        \/*\r\n        * take some other action ...\r\n        *\/\r\n    }\r\n}<\/pre>\n<h3>Explorar los recursos de Couchbase Server 6.6<\/h3>\n<table>\n<tbody>\n<tr>\n<td><b>Blogs<\/b><\/td>\n<td><b>Documentos y tutoriales<\/b><\/td>\n<td><b>P\u00e1ginas web y seminarios web<\/b><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/www.couchbase.com\/blog\/es\/whats-new-and-improved-in-couchbase-server-6-6\/\"><span style=\"font-weight: 400\">Novedades de Couchbase Server 6.6<\/span><\/a><\/td>\n<td><a href=\"https:\/\/docs.couchbase.com\/server\/current\/introduction\/whats-new.html\"><span style=\"font-weight: 400\">Novedades de Couchbase Server 6.6<\/span><\/a><\/td>\n<td><a href=\"https:\/\/event.on24.com\/eventRegistration\/EventLobbyServlet?target=reg20.jsp&amp;partnerref=website&amp;eventid=2566405&amp;sessionid=1&amp;key=9DB74CF2A4251458E10D64B86B68C0EF&amp;regTag=&amp;sourcepage=register\"><span style=\"font-weight: 400\">Nuevas funciones de Couchbase Server 6.6: an\u00e1lisis, copias de seguridad, consultas y mucho m\u00e1s<\/span><\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/www.couchbase.com\/blog\/es\/eventing-improvements-timers-handlers-and-statistics\/\"><span style=\"font-weight: 400\">Mejoras en los eventos (temporizadores, controladores y estad\u00edsticas)<\/span><\/a><\/td>\n<td><a href=\"https:\/\/docs.couchbase.com\/server\/6.6\/release-notes\/relnotes.html\"><span style=\"font-weight: 400\">Notas de la versi\u00f3n de Couchbase Server 6.6<\/span><\/a><\/td>\n<td><a href=\"https:\/\/www.couchbase.com\/blog\/es\/products\/analytics\/\"><span style=\"font-weight: 400\">Servicio de an\u00e1lisis Couchbase<\/span><\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/www.couchbase.com\/blog\/es\/remote-links-analyze-your-enterprise-with-couchbase-analytics\/\"><span style=\"font-weight: 400\">Enlaces remotos - Analice su empresa con Couchbase Analytics<\/span><\/a><\/td>\n<td><a href=\"https:\/\/index-advisor.couchbase.com\/indexadvisor\/#1\"><span style=\"font-weight: 400\">Pruebe el servicio Couchbase Index Advisor<\/span><\/a><\/td>\n<td><a href=\"https:\/\/www.couchbase.com\/blog\/es\/products\/server\/whats-new\/\"><span style=\"font-weight: 400\">Novedades de Couchbase Server (P\u00e1gina del producto)<\/span><\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/www.couchbase.com\/blog\/es\/external-datasets-extend-your-reach-with-couchbase-analytics\/\"><span style=\"font-weight: 400\">Conjuntos de datos externos - Ampl\u00ede su alcance con Couchbase Analytics<\/span><\/a><\/td>\n<td><a href=\"https:\/\/docs.couchbase.com\/server\/current\/analytics\/rest-links.html\"><span style=\"font-weight: 400\">Configuraci\u00f3n de enlaces remotos de Analytics y S3 mediante la API REST<\/span><\/a><\/td>\n<td><a href=\"https:\/\/www.couchbase.com\/blog\/es\/products\/editions\/\"><span style=\"font-weight: 400\">Comparar ediciones<\/span><\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/www.couchbase.com\/blog\/es\/announcing-flex-index-with-couchbase\/\"><span style=\"font-weight: 400\">Anuncio de Flex Index con Couchbase<\/span><\/a><\/td>\n<td><a href=\"https:\/\/docs.couchbase.com\/server\/current\/analytics\/5_ddl.html\"><span style=\"font-weight: 400\">Creaci\u00f3n de conjuntos de datos externos mediante el lenguaje de definici\u00f3n de datos (DDL)<\/span><\/a><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/www.couchbase.com\/blog\/es\/introducing-backing-up-to-object-store-s3\/\"><span style=\"font-weight: 400\">Introducci\u00f3n a las copias de seguridad en Object Store (S3)<\/span><\/a><\/td>\n<td><a href=\"https:\/\/docs.couchbase.com\/server\/current\/cli\/cbcli\/couchbase-cli-analytics-link-setup.html\"><span style=\"font-weight: 400\">Configuraci\u00f3n de enlaces remotos de Analytics y S3 mediante CLI<\/span><\/a><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/www.couchbase.com\/blog\/es\/import-documents-with-admin-ui\/\"><span style=\"font-weight: 400\">Importar documentos con Web Admin Console<\/span><\/a><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Referencias<\/h3>\n<ul>\n<li>Documentaci\u00f3n de Couchbase Eventing:<br \/>\n<a href=\"https:\/\/docs.couchbase.com\/server\/current\/eventing\/eventing-overview.html\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/docs.couchbase.com\/server\/current\/eventing\/eventing-overview.html<\/a><\/li>\n<li>Ejemplos de Couchbase Eventing:<br \/>\n<a href=\"https:\/\/docs.couchbase.com\/server\/current\/eventing\/eventing-examples.html\">https:\/\/docs.couchbase.com\/server\/current\/eventing\/eventing-examples.html<\/a><\/li>\n<li>Couchbase Server 6.6 Novedades:<br \/>\n<a href=\"https:\/\/docs.couchbase.com\/server\/6.6\/introduction\/whats-new.html\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/docs.couchbase.com\/server\/6.6\/introduction\/whats-new.html<\/a><\/li>\n<li>Blogs de Couchbase sobre Eventing:<br \/>\n<a href=\"https:\/\/www.couchbase.com\/blog\/es\/tag\/eventing\/\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/www.couchbase.com\/blog\/tag\/eventing\/<\/a><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">Nos encantar\u00eda saber qu\u00e9 te han parecido las caracter\u00edsticas de la versi\u00f3n 6.6 y c\u00f3mo beneficiar\u00e1n a tu negocio en el futuro. Por favor, comparte tu opini\u00f3n a trav\u00e9s de los comentarios o en la secci\u00f3n de Couchbase <\/span><a href=\"https:\/\/www.couchbase.com\/blog\/es\/forums\/\"><span style=\"font-weight: 400\">foro<\/span><\/a><span style=\"font-weight: 400\">.\u00a0<\/span><\/p>\n<h3>Notas a pie de p\u00e1gina<\/h3>\n<div style=\"font-size: 75%\">\n<p><a id=\"#footnote_1\"><\/a><a href=\"#footnote_1_src\"><sup>[1]<\/sup><\/a> La gravedad se rige por: a) El n\u00famero de vBuckets que tienen un temporizador activo. Por lo tanto, si s\u00f3lo hay unos pocos temporizadores en el futuro, el problema puede no ser perceptible o materializarse. y b) Si un temporizador Eventing se ha disparado recientemente en un vBucket (que elimina el problema para el vBucket dado en una base por funci\u00f3n). Por lo tanto, los sistemas 6.5 con mucha actividad de temporizadores a corto plazo no experimentar\u00e1n este problema, incluso si los temporizadores est\u00e1n programados para un futuro lejano.  Esto no es un problema en 6.6.<\/p>\n<p><a id=\"#footnote_2\"><\/a><a href=\"#footnote_2_src\"><sup>[2]<\/sup><\/a> En una operaci\u00f3n cancelTimer() o sobreescribiendo un temporizador existente por referencia, habr\u00e1 documentos temporales en el cubo de metadatos de eventos que se limpiar\u00e1n a) en el programa inicial de disparo de los temporizadores cancelados (o sobreescritos), o b) al desinstalar la funci\u00f3n. Este comportamiento es diferente al de un temporizador que se dispara a la hora programada, en el que todos los metadatos de eventos asociados se limpian inmediatamente del cubo de metadatos de eventos al dispararse el temporizador.<\/p>\n<p>&nbsp;<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>With the release of Couchbase 6.6 the Eventing Service has major improvements in functionality. We\u2019ve introduced new Eventing Timers that can be cancelled using the cancelTimer() function, or by creating a new timer with the same reference identifier as an [&hellip;]<\/p>","protected":false},"author":42711,"featured_media":11847,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1816,2273,9417],"tags":[],"ppma_author":[9113],"class_list":["post-9083","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-server","category-eventing","category-performance"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.7.1 (Yoast SEO v25.7) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Eventing Improvements: Timers, Handlers and Statistics - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"New 6.6 Eventing features: Timers can be cancelled or overwritten or used for recurring schedules, ability to differntiate delete v. expiry, and statistics in the UI are co-located with each Functions controls.\" \/>\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\/eventing-improvements-timers-handlers-and-statistics\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Eventing Improvements: Timers, Handlers and Statistics\" \/>\n<meta property=\"og:description\" content=\"New 6.6 Eventing features: Timers can be cancelled or overwritten or used for recurring schedules, ability to differntiate delete v. expiry, and statistics in the UI are co-located with each Functions controls.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/eventing-improvements-timers-handlers-and-statistics\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2020-08-12T15:39:57+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T05:39:26+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/couchbase-eventing-performance.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1570\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Jon Strabala, Principal Product Manager, 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=\"Jon Strabala, Principal Product Manager, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/eventing-improvements-timers-handlers-and-statistics\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/eventing-improvements-timers-handlers-and-statistics\/\"},\"author\":{\"name\":\"Jon Strabala, Principal Product Manager, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c991579f88217edee79ffedb6fc914cc\"},\"headline\":\"Eventing Improvements: Timers, Handlers and Statistics\",\"datePublished\":\"2020-08-12T15:39:57+00:00\",\"dateModified\":\"2025-06-14T05:39:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/eventing-improvements-timers-handlers-and-statistics\/\"},\"wordCount\":1486,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/eventing-improvements-timers-handlers-and-statistics\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/couchbase-eventing-performance.jpeg\",\"articleSection\":[\"Couchbase Server\",\"Eventing\",\"High Performance\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/eventing-improvements-timers-handlers-and-statistics\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/eventing-improvements-timers-handlers-and-statistics\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/eventing-improvements-timers-handlers-and-statistics\/\",\"name\":\"Eventing Improvements: Timers, Handlers and Statistics - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/eventing-improvements-timers-handlers-and-statistics\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/eventing-improvements-timers-handlers-and-statistics\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/couchbase-eventing-performance.jpeg\",\"datePublished\":\"2020-08-12T15:39:57+00:00\",\"dateModified\":\"2025-06-14T05:39:26+00:00\",\"description\":\"New 6.6 Eventing features: Timers can be cancelled or overwritten or used for recurring schedules, ability to differntiate delete v. expiry, and statistics in the UI are co-located with each Functions controls.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/eventing-improvements-timers-handlers-and-statistics\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/eventing-improvements-timers-handlers-and-statistics\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/eventing-improvements-timers-handlers-and-statistics\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/couchbase-eventing-performance.jpeg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/couchbase-eventing-performance.jpeg\",\"width\":1570,\"height\":628},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/eventing-improvements-timers-handlers-and-statistics\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Eventing Improvements: Timers, Handlers and Statistics\"}]},{\"@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\/c991579f88217edee79ffedb6fc914cc\",\"name\":\"Jon Strabala, Principal Product Manager, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/9c6045b0c2f7b07b0ee10f94ad748a25\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/db52a9f6d84faba430dd38106cdbc16ff02c2066b103b5f6b4cfcde40e83c683?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/db52a9f6d84faba430dd38106cdbc16ff02c2066b103b5f6b4cfcde40e83c683?s=96&d=mm&r=g\",\"caption\":\"Jon Strabala, Principal Product Manager, Couchbase\"},\"description\":\"Jon Strabala is a Principal Product Manager, responsible for the Couchbase Eventing Service. Before joining Couchbase, he spent more than 20 years building software products across various domains, starting with EDA in aerospace then transitioning to building enterprise software focused on what today is coined \u201cIoT\u201d and \u201cat-scale data.\u201d Jon worked for several small software consultancies until eventually starting and managing his own firm. He has extensive experience in NoSQL\/NewSQL, both in contributing and commercializing new technologies such as compressed bitmaps and column stores. Jon holds a bachelor\u2019s degree in electrical engineering and a master's in computer engineering, both from the University of Southern California, and an MBA from the University of California at Irvine.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/jon-strabala\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Eventing Improvements: Timers, Handlers and Statistics - The Couchbase Blog","description":"New 6.6 Eventing features: Timers can be cancelled or overwritten or used for recurring schedules, ability to differntiate delete v. expiry, and statistics in the UI are co-located with each Functions controls.","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\/eventing-improvements-timers-handlers-and-statistics\/","og_locale":"es_MX","og_type":"article","og_title":"Eventing Improvements: Timers, Handlers and Statistics","og_description":"New 6.6 Eventing features: Timers can be cancelled or overwritten or used for recurring schedules, ability to differntiate delete v. expiry, and statistics in the UI are co-located with each Functions controls.","og_url":"https:\/\/www.couchbase.com\/blog\/es\/eventing-improvements-timers-handlers-and-statistics\/","og_site_name":"The Couchbase Blog","article_published_time":"2020-08-12T15:39:57+00:00","article_modified_time":"2025-06-14T05:39:26+00:00","og_image":[{"width":1570,"height":628,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/couchbase-eventing-performance.jpeg","type":"image\/jpeg"}],"author":"Jon Strabala, Principal Product Manager, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Jon Strabala, Principal Product Manager, Couchbase","Est. reading time":"10 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/eventing-improvements-timers-handlers-and-statistics\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/eventing-improvements-timers-handlers-and-statistics\/"},"author":{"name":"Jon Strabala, Principal Product Manager, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c991579f88217edee79ffedb6fc914cc"},"headline":"Eventing Improvements: Timers, Handlers and Statistics","datePublished":"2020-08-12T15:39:57+00:00","dateModified":"2025-06-14T05:39:26+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/eventing-improvements-timers-handlers-and-statistics\/"},"wordCount":1486,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/eventing-improvements-timers-handlers-and-statistics\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/couchbase-eventing-performance.jpeg","articleSection":["Couchbase Server","Eventing","High Performance"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/eventing-improvements-timers-handlers-and-statistics\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/eventing-improvements-timers-handlers-and-statistics\/","url":"https:\/\/www.couchbase.com\/blog\/eventing-improvements-timers-handlers-and-statistics\/","name":"Eventing Improvements: Timers, Handlers and Statistics - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/eventing-improvements-timers-handlers-and-statistics\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/eventing-improvements-timers-handlers-and-statistics\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/couchbase-eventing-performance.jpeg","datePublished":"2020-08-12T15:39:57+00:00","dateModified":"2025-06-14T05:39:26+00:00","description":"New 6.6 Eventing features: Timers can be cancelled or overwritten or used for recurring schedules, ability to differntiate delete v. expiry, and statistics in the UI are co-located with each Functions controls.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/eventing-improvements-timers-handlers-and-statistics\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/eventing-improvements-timers-handlers-and-statistics\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/eventing-improvements-timers-handlers-and-statistics\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/couchbase-eventing-performance.jpeg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/couchbase-eventing-performance.jpeg","width":1570,"height":628},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/eventing-improvements-timers-handlers-and-statistics\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Eventing Improvements: Timers, Handlers and Statistics"}]},{"@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\/c991579f88217edee79ffedb6fc914cc","name":"Jon Strabala, Director Principal de Producto, Couchbase","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/9c6045b0c2f7b07b0ee10f94ad748a25","url":"https:\/\/secure.gravatar.com\/avatar\/db52a9f6d84faba430dd38106cdbc16ff02c2066b103b5f6b4cfcde40e83c683?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/db52a9f6d84faba430dd38106cdbc16ff02c2066b103b5f6b4cfcde40e83c683?s=96&d=mm&r=g","caption":"Jon Strabala, Principal Product Manager, Couchbase"},"description":"Jon Strabala es Gerente Principal de Producto, responsable del Servicio de Eventos de Couchbase. Antes de unirse a Couchbase, pas\u00f3 m\u00e1s de 20 a\u00f1os construyendo productos de software a trav\u00e9s de diversos dominios, comenzando con EDA en el sector aeroespacial y luego la transici\u00f3n a la construcci\u00f3n de software empresarial centrado en lo que hoy se conoce como \"IoT\" y \"datos a escala\". Jon trabaj\u00f3 para varias peque\u00f1as consultoras de software hasta que finalmente fund\u00f3 y dirigi\u00f3 su propia empresa. Tiene una amplia experiencia en NoSQL\/NewSQL, tanto en la contribuci\u00f3n como en la comercializaci\u00f3n de nuevas tecnolog\u00edas como los mapas de bits comprimidos y los almacenes de columnas. Jon es licenciado en ingenier\u00eda el\u00e9ctrica y tiene un m\u00e1ster en ingenier\u00eda inform\u00e1tica, ambos por la Universidad del Sur de California, y un MBA por la Universidad de California en Irvine.","url":"https:\/\/www.couchbase.com\/blog\/es\/author\/jon-strabala\/"}]}},"authors":[{"term_id":9113,"user_id":42711,"is_guest":0,"slug":"jon-strabala","display_name":"Jon Strabala, Principal Product Manager, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/db52a9f6d84faba430dd38106cdbc16ff02c2066b103b5f6b4cfcde40e83c683?s=96&d=mm&r=g","first_name":"Jon","last_name":"Strabala, Principal Product Manager, Couchbase","user_url":"","author_category":"","description":"Jon Strabala es Gerente Principal de Producto, responsable del Servicio de Eventos de Couchbase. Antes de unirse a Couchbase, pas\u00f3 m\u00e1s de 20 a\u00f1os construyendo productos de software a trav\u00e9s de diversos dominios, comenzando con EDA en el sector aeroespacial y luego la transici\u00f3n a la construcci\u00f3n de software empresarial centrado en lo que hoy se conoce como \"IoT\" y \"datos a escala\". Jon trabaj\u00f3 para varias peque\u00f1as consultoras de software hasta que finalmente fund\u00f3 y dirigi\u00f3 su propia empresa. Tiene una amplia experiencia en NoSQL\/NewSQL, tanto en la contribuci\u00f3n como en la comercializaci\u00f3n de nuevas tecnolog\u00edas como los mapas de bits comprimidos y los almacenes de columnas. Jon es licenciado en ingenier\u00eda el\u00e9ctrica y tiene un m\u00e1ster en ingenier\u00eda inform\u00e1tica, ambos por la Universidad del Sur de California, y un MBA por la Universidad de California en Irvine."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/9083","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\/42711"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=9083"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/9083\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/11847"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=9083"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=9083"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=9083"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=9083"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}