{"id":2304,"date":"2016-06-21T21:04:25","date_gmt":"2016-06-21T21:04:24","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2304"},"modified":"2025-10-09T07:22:55","modified_gmt":"2025-10-09T14:22:55","slug":"new-to-couchbase-4-5-atplus","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/new-to-couchbase-4-5-atplus\/","title":{"rendered":"Nuevo en Couchbase 4.5: AtPlus"},"content":{"rendered":"<div id=\"preamble\">\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Lo que estoy aprendiendo <a href=\"https:\/\/www.couchbase.com\/blog\/es\/developers\/?utm_source=blogs&amp;utm_medium=link&amp;utm_campaign=blogs\">Couchbase<\/a> es que, aunque su objetivo es proporcionar valores predeterminados razonables, tambi\u00e9n ofrece opciones para hacer concesiones. La compensaci\u00f3n en la que me voy a centrar en esta entrada de blog es Scan Consistency para consultas N1QL.<\/p>\n<\/div>\n<div class=\"imageblock\">\n<div class=\"content\"><img decoding=\"async\" alt=\"N1QL is SQL for JSON Documents\" src=\"\/wp-content\/original-assets\/2016\/june\/new-to-couchbase-4.5-atplus\/001_n1ql_graphic.png\" \/><\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Couchbase 4.5 introduce un nuevo <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.5\/architecture\/querying-data-with-n1ql.html?utm_source=blogs&amp;utm_medium=link&amp;utm_campaign=blog\">Opci\u00f3n de coherencia de exploraci\u00f3n<\/a>: AtPlus. Esto se une a las opciones existentes para hacer un total de tres:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p>NotBounded (por defecto)<\/p>\n<\/li>\n<li>\n<p>AtPlus (nuevo en Couchbase Server 4.5)<\/p>\n<\/li>\n<li>\n<p>SolicitarPlus<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>Esta entrada del blog va a revisar NotBounded y RequestPlus, as\u00ed como introducir AtPlus. Tambi\u00e9n voy a proporcionar un ejemplo de c\u00f3digo que se puede utilizar para probar los tres a ti mismo.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"truenot-bounded\">No limitado<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Este es el comportamiento por defecto.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Una consulta N1QL que utiliza Consistencia de Escaneo \"No Limitada\" significa que no esperar\u00e1 a que ning\u00fan \u00edndice termine de actualizarse antes de ejecutar la consulta y devolver los resultados. Supongamos que tiene los documentos A,B,C en un bucket. En el momento de la consulta, s\u00f3lo A y B est\u00e1n indexados. Con Not Bounded, s\u00f3lo se devolver\u00e1n los documentos A y B.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Dado que la consulta no espera a ser indexada, \u00e9sta es la mejor opci\u00f3n en cuanto a rendimiento. El documento C aparecer\u00e1 una vez indexado. Esto no deber\u00eda llevar mucho tiempo, pero si acaba de crear C, por ejemplo, e inmediatamente despu\u00e9s realiza una consulta para obtener una lista completa de documentos, es posible que C no aparezca. Para hacer una demostraci\u00f3n con el <code>viaje-muestra<\/code> cubo:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlightjs highlight\">\r\n<code class=\"language-C#\">        private static void NotBoundedExample()\r\n        {\r\n            Console.WriteLine(\"========= NonBounded (default)\");\r\n            \/\/ get the current count\r\n            var result1 =\r\n                _bucket.Query(\"SELECT COUNT(1) as airportCount FROM `travel-sample` WHERE type=&apos;airport&apos;\")\r\n                    .Rows.First();\r\n            Console.WriteLine($\"Initial count: {result1.airportCount}\");\r\n\r\n            \/\/ insert a new airport\r\n            var doc = new Document\r\n            {\r\n                Id = \"ScanConsistency::airport::\" + _random.Next(10000),\r\n                Content = new\r\n                {\r\n                    type = \"airport\"\r\n                }\r\n            };\r\n            _bucket.Insert(doc);\r\n\r\n            \/\/ get the count again\r\n            var result2 =\r\n                _bucket.Query(\"SELECT COUNT(1) as airportCount FROM `travel-sample` WHERE type=&apos;airport&apos;\")\r\n                    .Rows.First();\r\n            Console.WriteLine($\"Count after insert: {result2.airportCount}\");\r\n\r\n            \/\/ wait a few seconds and get the count again\r\n            Console.Write(\"Waiting for 5 seconds...\");\r\n            Thread.Sleep(5000);\r\n            var result3 =\r\n                _bucket.Query(\"SELECT COUNT(1) as airportCount FROM `travel-sample` WHERE type=&apos;airport&apos;\")\r\n                    .Rows.First();\r\n            Console.WriteLine($\"Count after waiting: {result3.airportCount}\");\r\n        }<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Lo que yo esperar\u00eda ver al ejecutar este c\u00f3digo es:<\/p>\n<\/div>\n<div class=\"olist arabic\">\n<ol class=\"arabic\">\n<li>\n<p><code>Recuento inicial: N<\/code><\/p>\n<\/li>\n<li>\n<p><code>Recuento despu\u00e9s de la inserci\u00f3n: N<\/code> (todav\u00eda)<\/p>\n<\/li>\n<li>\n<p>En espera<\/p>\n<\/li>\n<li>\n<p><code>Cuenta despu\u00e9s de esperar: N+1<\/code><\/p>\n<\/li>\n<\/ol>\n<\/div>\n<div class=\"paragraph\">\n<p>He fijado el tiempo de espera en 5 segundos, lo que probablemente sea excesivo. Utilizo Thread.Sleep s\u00f3lo con fines demostrativos, pero obviamente es una t\u00e1ctica torpe para una aplicaci\u00f3n real. Esto nos lleva a RequestPlus.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"truerequestplus\">SolicitarPlus<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Esta opci\u00f3n de consistencia de escaneo proporciona casi lo contrario de No limitado. Esperar\u00e1 hasta que se procesen todos los cambios de documentos y actualizaciones de \u00edndices (hasta que se ejecute la consulta) antes de ejecutar la consulta.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>He aqu\u00ed un ejemplo simplificado de secuencia de eventos al utilizar RequestPlus<\/p>\n<\/div>\n<div class=\"olist arabic\">\n<ol class=\"arabic\">\n<li>\n<p>Se crea el documento C<\/p>\n<\/li>\n<li>\n<p>Se ejecuta la consulta N1QL para obtener todos los documentos (A,B,C existen todos en el bucket)<\/p>\n<\/li>\n<li>\n<p>La consulta N1QL se pone en espera porque al menos un documento necesita ser indexado (documento C).<\/p>\n<\/li>\n<li>\n<p>El proceso de indexaci\u00f3n ha finalizado. El documento C ya est\u00e1 indexado.<\/p>\n<\/li>\n<li>\n<p>La consulta N1QL se ejecuta y devuelve A,B,C.<\/p>\n<\/li>\n<\/ol>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlightjs highlight\">\r\n<code class=\"language-C#\">        private static void RequestPlusExample()\r\n        {\r\n            Console.WriteLine(\"========= RequestPlus\");\r\n\r\n            \/\/ get the current count\r\n            var result1 =\r\n                _bucket.Query(\"SELECT COUNT(1) as airportCount FROM `travel-sample` WHERE type=&apos;airport&apos;\")\r\n                    .Rows.First();\r\n            Console.WriteLine($\"Initial count: {result1.airportCount}\");\r\n\r\n            \/\/ insert a new airport\r\n            var doc = new Document\r\n            {\r\n                Id = \"ScanConsistency::airport::\" + _random.Next(10000),\r\n                Content = new\r\n                {\r\n                    type = \"airport\"\r\n                }\r\n            };\r\n            _bucket.Insert(doc);\r\n\r\n            \/\/ get the count again\r\n            var request =\r\n                QueryRequest.Create(\"SELECT COUNT(1) as airportCount FROM `travel-sample` WHERE type=&apos;airport&apos;\");\r\n            request.ScanConsistency(ScanConsistency.RequestPlus);\r\n            var result2 = _bucket.Query(request).Rows.First();\r\n            Console.WriteLine($\"Count after insert with RequestPlus: {result2.airportCount}\");\r\n        }<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Esto nos proporciona exhaustividad en los resultados de la consulta, a costa del rendimiento. En algunos casos, no tiene sentido esperar a que <em>todo<\/em> a indexar. Y eso nos lleva a AtPlus.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"trueatplus-new-to-couchbase-4-5\">AtPlus (nuevo en Couchbase 4.5)<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Esta opci\u00f3n de coherencia de escaneado ofrece un t\u00e9rmino medio entre RequestPlus y Not Bounded. Tambi\u00e9n es una opci\u00f3n <strong>nueva opci\u00f3n de escaneo de coherencia para Couchbase 4.5<\/strong>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Con AtPlus, tendr\u00e1s que hacer un poco m\u00e1s de trabajo en tu c\u00f3digo, pero a cambio obtendr\u00e1s un mejor rendimiento que usando RequestPlus. En lugar de esperar a que se complete un \u00edndice completo (que podr\u00eda ser de m\u00faltiples documentos), s\u00f3lo esperar\u00e1 a que se indexen los documentos que especifiques antes de ejecutar la consulta. Esto se conoce a veces como \"read your own write\" o RYOW.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlightjs highlight\">\r\n<code class=\"language-C#\">        private static void AtPlusExample()\r\n        {\r\n            Console.WriteLine(\"========= AtPlus\");\r\n\r\n            \/\/ get the current count\r\n            var result1 = _bucket.Query(\"SELECT COUNT(1) as airportCount FROM `travel-sample` WHERE type=&apos;airport&apos;\")\r\n                    .Rows.First();\r\n            Console.WriteLine($\"Initial count: {result1.airportCount}\");\r\n\r\n            \/\/ insert a new airport\r\n            var doc = new Document\r\n            {\r\n                Id = \"ScanConsistency::airport::\" + _random.Next(10000),\r\n                Content = new\r\n                {\r\n                    type = \"airport\"\r\n                }\r\n            };\r\n            var insertResult = _bucket.Insert(doc);\r\n\r\n            \/\/ get the count again\r\n            var state = MutationState.From(insertResult.Document);\r\n            var request = new QueryRequest(\"SELECT COUNT(1) as airportCount FROM `travel-sample` WHERE type=&apos;airport&apos;\");\r\n            var t = request.ConsistentWith(state);\r\n            var result2 = _bucket.Query(t).Rows.First();\r\n            Console.WriteLine($\"Count after insert with AtPlus: {result2.airportCount}\");\r\n        }<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Con este ejemplo, la consulta N1QL esperar\u00e1 \u00fanicamente a que se indexe el nuevo documento. No esperar\u00e1 nada m\u00e1s. En un sistema de gran volumen, esto podr\u00eda proporcionar un buen equilibrio entre un mayor rendimiento y la exhaustividad de los resultados.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Tenga en cuenta que en el momento de escribir este post, tendr\u00e1 que asegurarse de que establece expl\u00edcitamente UseEnhancedDurability a verdadero al configurar su <code>ClientConfiguration<\/code>:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlightjs highlight\">\r\n<code class=\"language-C#\">            config.BucketConfigs = new Dictionary {\r\n                {\r\n                    \"travel-sample\", new BucketConfiguration\r\n                    {\r\n                        UseEnhancedDurability = true\r\n                    }\r\n                }\r\n            };<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"trueconclusion\">Conclusi\u00f3n<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Con N1QL, hay un espectro de velocidad e integridad. Con Couchbase Server 4.5, ahora tienes tres opciones. NotBounded para la velocidad bruta, RequestPlus para la exhaustividad actual, y AtPlus se sit\u00faa en medio.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Puede <a href=\"https:\/\/github.com\/couchbaselabs\/blog-source-code\/tree\/master\/Groves\/009N1QLQueryScanConsistencyOptions\/ScanConsistencyDemo\">descargue el c\u00f3digo fuente completo de esta entrada del blog en Github<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Por favor, deje un comentario, <a href=\"https:\/\/twitter.com\/mgroves\">ping me on Twitter<\/a>o env\u00edeme un correo electr\u00f3nico (matthew.groves AT couchbase DOT com).<\/p>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>What I\u2019m learning about Couchbase is that while it aims to provide sensible defaults, it also provides options to make trade-offs. The trade-off I\u2019m going to focus on in this blog post is Scan Consistency for N1QL queries. Couchbase 4.5 [&hellip;]<\/p>","protected":false},"author":71,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1811,1816,1812],"tags":[],"ppma_author":[8937],"class_list":["post-2304","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","category-couchbase-server","category-n1ql-query"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.2 (Yoast SEO v26.2) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>New to Couchbase 4.5: AtPlus - The Couchbase Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/es\/new-to-couchbase-4-5-atplus\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"New to Couchbase 4.5: AtPlus\" \/>\n<meta property=\"og:description\" content=\"What I\u2019m learning about Couchbase is that while it aims to provide sensible defaults, it also provides options to make trade-offs. The trade-off I\u2019m going to focus on in this blog post is Scan Consistency for N1QL queries. Couchbase 4.5 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/new-to-couchbase-4-5-atplus\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-06-21T21:04:24+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-10-09T14:22:55+00:00\" \/>\n<meta name=\"author\" content=\"Matthew Groves\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@mgroves\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Matthew Groves\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/new-to-couchbase-4-5-atplus\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/new-to-couchbase-4-5-atplus\/\"},\"author\":{\"name\":\"Matthew Groves\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58\"},\"headline\":\"New to Couchbase 4.5: AtPlus\",\"datePublished\":\"2016-06-21T21:04:24+00:00\",\"dateModified\":\"2025-10-09T14:22:55+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/new-to-couchbase-4-5-atplus\/\"},\"wordCount\":647,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/new-to-couchbase-4-5-atplus\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"articleSection\":[\".NET\",\"Couchbase Server\",\"SQL++ \/ N1QL Query\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/new-to-couchbase-4-5-atplus\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/new-to-couchbase-4-5-atplus\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/new-to-couchbase-4-5-atplus\/\",\"name\":\"New to Couchbase 4.5: AtPlus - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/new-to-couchbase-4-5-atplus\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/new-to-couchbase-4-5-atplus\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2016-06-21T21:04:24+00:00\",\"dateModified\":\"2025-10-09T14:22:55+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/new-to-couchbase-4-5-atplus\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/new-to-couchbase-4-5-atplus\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/new-to-couchbase-4-5-atplus\/#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\/new-to-couchbase-4-5-atplus\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"New to Couchbase 4.5: AtPlus\"}]},{\"@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\/3929663e372020321b0152dc4fa65a58\",\"name\":\"Matthew Groves\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ba51e6aacc53995c323a634e4502ef54\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"caption\":\"Matthew Groves\"},\"description\":\"Matthew D. Groves is a guy who loves to code. It doesn't matter if it's C#, jQuery, or PHP: he'll submit pull requests for anything. He has been coding professionally ever since he wrote a QuickBASIC point-of-sale app for his parent's pizza shop back in the 90s. He currently works as a Senior Product Marketing Manager for Couchbase. His free time is spent with his family, watching the Reds, and getting involved in the developer community. He is the author of AOP in .NET, Pro Microservices in .NET, a Pluralsight author, and a Microsoft MVP.\",\"sameAs\":[\"https:\/\/crosscuttingconcerns.com\",\"https:\/\/x.com\/mgroves\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/matthew-groves\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"New to Couchbase 4.5: AtPlus - The Couchbase Blog","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\/new-to-couchbase-4-5-atplus\/","og_locale":"es_MX","og_type":"article","og_title":"New to Couchbase 4.5: AtPlus","og_description":"What I\u2019m learning about Couchbase is that while it aims to provide sensible defaults, it also provides options to make trade-offs. The trade-off I\u2019m going to focus on in this blog post is Scan Consistency for N1QL queries. Couchbase 4.5 [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/es\/new-to-couchbase-4-5-atplus\/","og_site_name":"The Couchbase Blog","article_published_time":"2016-06-21T21:04:24+00:00","article_modified_time":"2025-10-09T14:22:55+00:00","author":"Matthew Groves","twitter_card":"summary_large_image","twitter_creator":"@mgroves","twitter_misc":{"Written by":"Matthew Groves","Est. reading time":"3 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/new-to-couchbase-4-5-atplus\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/new-to-couchbase-4-5-atplus\/"},"author":{"name":"Matthew Groves","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58"},"headline":"New to Couchbase 4.5: AtPlus","datePublished":"2016-06-21T21:04:24+00:00","dateModified":"2025-10-09T14:22:55+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/new-to-couchbase-4-5-atplus\/"},"wordCount":647,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/new-to-couchbase-4-5-atplus\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","articleSection":[".NET","Couchbase Server","SQL++ \/ N1QL Query"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/new-to-couchbase-4-5-atplus\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/new-to-couchbase-4-5-atplus\/","url":"https:\/\/www.couchbase.com\/blog\/new-to-couchbase-4-5-atplus\/","name":"New to Couchbase 4.5: AtPlus - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/new-to-couchbase-4-5-atplus\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/new-to-couchbase-4-5-atplus\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2016-06-21T21:04:24+00:00","dateModified":"2025-10-09T14:22:55+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/new-to-couchbase-4-5-atplus\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/new-to-couchbase-4-5-atplus\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/new-to-couchbase-4-5-atplus\/#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\/new-to-couchbase-4-5-atplus\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"New to Couchbase 4.5: AtPlus"}]},{"@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\/3929663e372020321b0152dc4fa65a58","name":"Matthew Groves","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ba51e6aacc53995c323a634e4502ef54","url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","caption":"Matthew Groves"},"description":"A Matthew D. Groves le encanta programar. No importa si se trata de C#, jQuery o PHP: enviar\u00e1 pull requests para cualquier cosa. Lleva codificando profesionalmente desde que escribi\u00f3 una aplicaci\u00f3n de punto de venta en QuickBASIC para la pizzer\u00eda de sus padres, all\u00e1 por los a\u00f1os noventa. Actualmente trabaja como Director de Marketing de Producto para Couchbase. Su tiempo libre lo pasa con su familia, viendo a los Reds y participando en la comunidad de desarrolladores. Es autor de AOP in .NET, Pro Microservices in .NET, autor de Pluralsight y MVP de Microsoft.","sameAs":["https:\/\/crosscuttingconcerns.com","https:\/\/x.com\/mgroves"],"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/matthew-groves\/"}]}},"authors":[{"term_id":8937,"user_id":71,"is_guest":0,"slug":"matthew-groves","display_name":"Matthew Groves","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","author_category":"","last_name":"Groves","first_name":"Matthew","job_title":"","user_url":"https:\/\/crosscuttingconcerns.com","description":"A Matthew D. Groves le encanta programar.  No importa si se trata de C#, jQuery o PHP: enviar\u00e1 pull requests para cualquier cosa.  Lleva codificando profesionalmente desde que escribi\u00f3 una aplicaci\u00f3n de punto de venta en QuickBASIC para la pizzer\u00eda de sus padres, all\u00e1 por los a\u00f1os noventa.  Actualmente trabaja como Director de Marketing de Producto para Couchbase. Su tiempo libre lo pasa con su familia, viendo a los Reds y participando en la comunidad de desarrolladores.  Es autor de AOP in .NET, Pro Microservices in .NET, autor de Pluralsight y MVP de Microsoft."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/2304","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\/71"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=2304"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/2304\/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=2304"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=2304"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=2304"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=2304"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}