{"id":12435,"date":"2021-12-14T11:00:16","date_gmt":"2021-12-14T19:00:16","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=12435"},"modified":"2023-05-26T13:31:24","modified_gmt":"2023-05-26T20:31:24","slug":"support-for-concurrent-index-creation-in-indexing-service","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/","title":{"rendered":"Support for Concurrent Index Creation in Indexing Service"},"content":{"rendered":"<p><span style=\"font-weight: 400\">Modern applications are implemented as a set of a large number of microservices. Each such microservice may run independently of many other microservices. Such applications expect underlying databases to support multi-tenancy. Couchbase Server 7.0 has introduced <\/span><a href=\"https:\/\/www.couchbase.com\/blog\/scopes-and-collections-for-modern-multi-tenant-applications-couchbase-7-0\/\"><span style=\"font-weight: 400\">Scopes and Collections<\/span><\/a><span style=\"font-weight: 400\"> to support multi-tenancy and to <\/span><a href=\"https:\/\/www.couchbase.com\/blog\/indexing-service-optimizations-with-couchbase-collections\/\"><span style=\"font-weight: 400\">ease data modeling<\/span><\/a><span style=\"font-weight: 400\"> for modern-day applications. The scopes and the collections provide users a logical separation of the data within a bucket.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Each microservice for an application can now independently create Global Secondary Indexes needed by that microservice. In previous releases of Couchbase Server only one index creation request was allowed in the cluster. For strengthening the support for multi-tenancy, in Couchbase Server 7.0, the index creation workflow has been improved to allow multiple concurrent index creation requests. In this blog, we will discuss <\/span><i><span style=\"font-weight: 400\">how the user experience of creating multiple indexes concurrently has been improved.<\/span><\/i><\/p>\n<h2><span style=\"font-weight: 400\">Improved Index Creation Workflow<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Let\u2019s first understand the index creation workflow in a Couchbase cluster. <\/span><a href=\"https:\/\/docs.couchbase.com\/server\/current\/n1ql\/n1ql-language-reference\/createindex.html\"><span style=\"font-weight: 400\">Index creation<\/span><\/a><span style=\"font-weight: 400\"> happens in two phases (1) Index metadata creation and (2) Index build. In the first phase, the Couchbase index service determines the best possible placement for the new index, with the help of <\/span><a href=\"https:\/\/www.couchbase.com\/blog\/index-planner-for-global-secondary-indexes\/\"><span style=\"font-weight: 400\">index planner<\/span><\/a><span style=\"font-weight: 400\">, and index metadata is persisted. In the second phase, the host nodes determined in the first phase will start a stream with the data service for the \u201cindex build\u201d. Users can specify the <em>defer_build<\/em> flag during index creation to execute only the first phase and the second phase can be triggered later using the <\/span><em><a href=\"https:\/\/docs.couchbase.com\/server\/current\/n1ql\/n1ql-language-reference\/build-index.html\"><span style=\"font-weight: 400\">build index<\/span><\/a><\/em><span style=\"font-weight: 400\"> command.<\/span><\/p>\n<p><i><span style=\"font-weight: 400\">In the following sections, the meaning of <a href=\"https:\/\/docs.couchbase.com\/server\/current\/n1ql\/n1ql-language-reference\/createindex.html\">index creation<\/a> is limited only to the first phase.<\/span><\/i><\/p>\n<p><span style=\"font-weight: 400\">To achieve the best possible index placement, only one instance of index planner should run at a time. Hence index service &#8211; running older versions of Couchbase server &#8211; rejects any new incoming index creation requests if there is an ongoing index creation request. <\/span><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-12440 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/11\/IndexCreation6.png\" alt=\"\" width=\"580\" height=\"360\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/IndexCreation6.png 580w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/IndexCreation6-300x186.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/IndexCreation6-20x12.png 20w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/p>\n<p><span style=\"font-weight: 400\">This behavior has been improved in Couchbase Server 7.0, where the index service accepts all incoming index creation requests, even if there is an ongoing index creation. <\/span><b>The index service queues up the index creation request, processes the queued requests in the background and only after the index is created is the response returned to the caller.<\/b><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-12439 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/11\/IndexCreation7.png\" alt=\"\" width=\"606\" height=\"392\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/IndexCreation7.png 606w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/IndexCreation7-300x194.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/IndexCreation7-20x13.png 20w\" sizes=\"auto, (max-width: 606px) 100vw, 606px\" \/><\/p>\n<p><i><span style=\"font-weight: 400\">Please note that the index creation was a blocking request prior to Couchbase Server 7.0 and it remains blocking in the new releases as well.<\/span><\/i><\/p>\n<p><span style=\"font-weight: 400\">Users can monitor the indexes that are queued for background creation via Web UI as shown in the screenshot below. Note that the index <em>status<\/em> is <em>scheduled for creation<\/em>.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-12441 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/11\/ScheduledIndexes_UI-cropped.png\" alt=\"\" width=\"3352\" height=\"1514\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/ScheduledIndexes_UI-cropped.png 3352w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/ScheduledIndexes_UI-cropped-300x136.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/ScheduledIndexes_UI-cropped-1024x463.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/ScheduledIndexes_UI-cropped-768x347.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/ScheduledIndexes_UI-cropped-1536x694.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/ScheduledIndexes_UI-cropped-2048x925.png 2048w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/ScheduledIndexes_UI-cropped-20x9.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/ScheduledIndexes_UI-cropped-1320x596.png 1320w\" sizes=\"auto, (max-width: 3352px) 100vw, 3352px\" \/><\/p>\n<p><span style=\"font-weight: 400\">Users can also monitor index status programmatically using N1QL, as shown in the screenshot below.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-12442 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/11\/ScheduledIndexes_n1ql-cropped.png\" alt=\"\" width=\"2598\" height=\"1629\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/ScheduledIndexes_n1ql-cropped.png 2598w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/ScheduledIndexes_n1ql-cropped-300x188.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/ScheduledIndexes_n1ql-cropped-1024x642.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/ScheduledIndexes_n1ql-cropped-768x482.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/ScheduledIndexes_n1ql-cropped-1536x963.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/ScheduledIndexes_n1ql-cropped-2048x1284.png 2048w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/ScheduledIndexes_n1ql-cropped-20x13.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/ScheduledIndexes_n1ql-cropped-1320x828.png 1320w\" sizes=\"auto, (max-width: 2598px) 100vw, 2598px\" \/><\/p>\n<h2><span style=\"font-weight: 400\">Improved User Experience<\/span><\/h2>\n<p><span style=\"font-weight: 400\">In the previous releases, users had to retry the index creation when there was another ongoing index being created. If the index creation is happening programmatically, then the program needs a retry mechanism. With Couchbase server 7.0, the user program does not need to rely on the retry mechanism while creating an index as the index service will perform the required retries in the background. Note that the index service doesn\u2019t just perform &#8220;simple retries&#8221;. It internally prioritizes the requests based on the request&#8217;s timestamp so that the convergence of index creation requests is faster and much more reliable.<\/span><\/p>\n<p><span style=\"font-weight: 400\">The index service serializes the index creations in the cluster with the help of a globally distributed lock mechanism. So, for the creation of an index, all index service nodes need to reach a consensus before allowing the index creation.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Now, let\u2019s take a look at the following scenario\/example to understand how convergence is improved with the involvement of the index service.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Let\u2019s say two user applications (or microservices) are trying to create indexes concurrently. The two applications can connect to two different query service nodes for the creation of indexes. The query service node runs an index service client which is responsible for acquiring the globally distributed lock and determining the index placement by running the index planner. <\/span><\/p>\n<h3>Index creation timeline in pre-7.0 version of Couchbase<\/h3>\n<p><span style=\"font-weight: 400\">Let\u2019s consider one possible timeline of events happening in the cluster (with Couchbase Server version &lt; 7.0) as shown in the diagram below.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-12444 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/11\/IndexCreationRaceCondition1.png\" alt=\"\" width=\"774\" height=\"360\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/IndexCreationRaceCondition1.png 774w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/IndexCreationRaceCondition1-300x140.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/IndexCreationRaceCondition1-768x357.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/IndexCreationRaceCondition1-20x9.png 20w\" sizes=\"auto, (max-width: 774px) 100vw, 774px\" \/><\/p>\n<p><b>Timeline:<\/b><\/p>\n<p><b>T0:<\/b> <span style=\"font-weight: 400\">Both applications trigger index creation requests simultaneously and the requests are received by index service clients.<\/span><\/p>\n<p><b>T1:<\/b> <span style=\"font-weight: 400\">Index service client 1 sends the <\/span><i><span style=\"font-weight: 400\">Lock<\/span><\/i><span style=\"font-weight: 400\"> request to index node 1. Index node 1 <\/span><b>accepts<\/b><span style=\"font-weight: 400\"> the request.<\/span><\/p>\n<p><b>T2:<\/b> <span style=\"font-weight: 400\">Index service client 2 sends the <\/span><i><span style=\"font-weight: 400\">Lock<\/span><\/i><span style=\"font-weight: 400\"> request to index node 2. Index node 2 <\/span><b>accepts<\/b><span style=\"font-weight: 400\"> the request.<\/span><\/p>\n<p><b>T3:<\/b> <span style=\"font-weight: 400\">Index service client 1 sends the <\/span><i><span style=\"font-weight: 400\">Lock<\/span><\/i><span style=\"font-weight: 400\"> request to index node 2. Index node 2 <\/span><b>rejects<\/b><span style=\"font-weight: 400\"> the request as it has already accepted the request from client 2.<\/span><\/p>\n<p><b>T4:<\/b> <span style=\"font-weight: 400\">Index service client 2 sends the <\/span><i><span style=\"font-weight: 400\">Lock<\/span><\/i><span style=\"font-weight: 400\"> request to index node 1. Index node 1 <\/span><b>rejects<\/b><span style=\"font-weight: 400\"> the request as it has already accepted the request from client 1.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Note that in this example, in Couchbase Server version &lt; 7.0, both the requests will be rejected by Couchbase and the user scripts will need to retry. If user scripts retry immediately or after some deterministic back-off period, the next attempt may still lead to a similar scenario\/timeline and both requests can still be rejected in the next attempt.<\/span><\/p>\n<h3>Index creation queuing with Couchbase 7.0<\/h3>\n<p><span style=\"font-weight: 400\">With Couchbase Server 7.0 the improved behavior, and a timeline similar to our example, is shown in the diagram below. Note that the responsibility of creating an index is taken over by background index creators, while the user application thread is still waiting for index creation to finish. The user thread will get a response only when the index is created.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-12443 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/11\/IndexCreationRaceConditionFix1.png\" alt=\"\" width=\"878\" height=\"352\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/IndexCreationRaceConditionFix1.png 878w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/IndexCreationRaceConditionFix1-300x120.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/IndexCreationRaceConditionFix1-768x308.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/IndexCreationRaceConditionFix1-20x8.png 20w\" sizes=\"auto, (max-width: 878px) 100vw, 878px\" \/><\/p>\n<p><b>Timeline:<\/b><\/p>\n<p><b>T0:<\/b> <span style=\"font-weight: 400\">Two background index creator threads trigger index creation simultaneously and the requests are received by index service clients.<\/span><\/p>\n<p><b>T1:<\/b> <span style=\"font-weight: 400\">Index service client 1 sends the <\/span><i><span style=\"font-weight: 400\">Lock<\/span><\/i><span style=\"font-weight: 400\"> request (with priority P1) to index node 1. Index node 1 <\/span><b>accepts<\/b><span style=\"font-weight: 400\"> the request.<\/span><\/p>\n<p><b>T2:<\/b> <span style=\"font-weight: 400\">Index service client 2 sends the <\/span><i><span style=\"font-weight: 400\">Lock<\/span><\/i><span style=\"font-weight: 400\"> request (with priority P2) to index node 2. Index node 2 <\/span><b>accepts<\/b><span style=\"font-weight: 400\"> the request.<\/span><\/p>\n<p><b>T3:<\/b> <span style=\"font-weight: 400\">Index service client 1 sends the <\/span><i><span style=\"font-weight: 400\">Lock<\/span><\/i><span style=\"font-weight: 400\"> request (with priority P1) to index node 2. Index node 2 <\/span><b>accepts<\/b><span style=\"font-weight: 400\"> the request as it has higher priority than the previously accepted request.<\/span><\/p>\n<p><b>T4:<\/b> <span style=\"font-weight: 400\">Index service client 2 sends the <\/span><i><span style=\"font-weight: 400\">Lock<\/span><\/i><span style=\"font-weight: 400\"> request (with priority P2) to index node 1. Index node 1 <\/span><b>rejects<\/b><span style=\"font-weight: 400\"> the request as it has already accepted the request with higher priority from client 2.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Note that the distributed lock mechanism uses a <\/span><a href=\"https:\/\/en.wikipedia.org\/wiki\/Two-phase_commit_protocol\"><span style=\"font-weight: 400\">two-phase commit protocol<\/span><\/a><span style=\"font-weight: 400\"> so that the previously accepted request (with priority P2) on index node 2 will fail during the commit phase and will be retried by the background index creator.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Also, note that the request priorities are based on request timestamps generated at nanosecond granularity. This eliminates most of the distributed lock contention. But there is a corner case possibility of two requests having exactly the same request timestamps. To handle this case index service uses random backoff to further reduce the distributed lock contention.\u00a0<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Modern applications are implemented as a set of a large number of microservices. Each such microservice may run independently of many other microservices. Such applications expect underlying databases to support multi-tenancy. Couchbase Server 7.0 has introduced Scopes and Collections to [&hellip;]<\/p>\n","protected":false},"author":49228,"featured_media":12579,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1814,1821,8905,1816,2453,9381,9336],"tags":[8907,9197,1696,2103,9349,1641],"ppma_author":[9101],"class_list":["post-12435","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-application-design","category-couchbase-architecture","category-couchbase-global-secondary-index","category-couchbase-server","category-global-secondary-index","category-indexing","category-scopes-and-collections","tag-couchbase-server-7-0","tag-distributed-databases","tag-indexing","tag-microservices","tag-multi-tenancy","tag-secondary-indexing"],"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>Support for Concurrent Index Creation in Indexing Service - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"In this blog, we will discuss how the user experience of creating multiple indexes concurrently has been improved.\" \/>\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\/support-for-concurrent-index-creation-in-indexing-service\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Support for Concurrent Index Creation in Indexing Service\" \/>\n<meta property=\"og:description\" content=\"In this blog, we will discuss how the user experience of creating multiple indexes concurrently has been improved.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2021-12-14T19:00:16+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-05-26T20:31:24+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/12\/charles-deluvio-Lks7vei-eAg-unsplash-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1707\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Amit Kulkarni\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Amit Kulkarni\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/\"},\"author\":{\"name\":\"Amit Kulkarni\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/76beaf20748818542ed2b7a6bfcd524c\"},\"headline\":\"Support for Concurrent Index Creation in Indexing Service\",\"datePublished\":\"2021-12-14T19:00:16+00:00\",\"dateModified\":\"2023-05-26T20:31:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/\"},\"wordCount\":1131,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/12\/charles-deluvio-Lks7vei-eAg-unsplash-scaled.jpg\",\"keywords\":[\"Couchbase Server 7.0\",\"distributed databases\",\"Indexing\",\"microservices\",\"multi-tenancy\",\"Secondary Indexing\"],\"articleSection\":[\"Application Design\",\"Couchbase Architecture\",\"Couchbase Global Secondary Index\",\"Couchbase Server\",\"Global Secondary Index\",\"Indexing\",\"Scopes and Collections\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/\",\"name\":\"Support for Concurrent Index Creation in Indexing Service - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/12\/charles-deluvio-Lks7vei-eAg-unsplash-scaled.jpg\",\"datePublished\":\"2021-12-14T19:00:16+00:00\",\"dateModified\":\"2023-05-26T20:31:24+00:00\",\"description\":\"In this blog, we will discuss how the user experience of creating multiple indexes concurrently has been improved.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/12\/charles-deluvio-Lks7vei-eAg-unsplash-scaled.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/12\/charles-deluvio-Lks7vei-eAg-unsplash-scaled.jpg\",\"width\":2560,\"height\":1707},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Support for Concurrent Index Creation in Indexing Service\"}]},{\"@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\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@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\/76beaf20748818542ed2b7a6bfcd524c\",\"name\":\"Amit Kulkarni\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/9b381fdec8caa95228a24342f1abbbbc\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ce1e7e777f6f5e141aa952f3bba06e838b5cb9bd5dbf9584e9ac998931808950?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ce1e7e777f6f5e141aa952f3bba06e838b5cb9bd5dbf9584e9ac998931808950?s=96&d=mm&r=g\",\"caption\":\"Amit Kulkarni\"},\"description\":\"Amit Kulkarni is working as a Engineering Manager at Couchbase on Global Secondary Indexes. He has experience in working on technologies like Distributed Systems, Distributed NoSQL Databases, Cloud Storage, Storage Virtualisation etc.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/author\/amit-kulkarni\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Support for Concurrent Index Creation in Indexing Service - The Couchbase Blog","description":"In this blog, we will discuss how the user experience of creating multiple indexes concurrently has been improved.","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\/support-for-concurrent-index-creation-in-indexing-service\/","og_locale":"en_US","og_type":"article","og_title":"Support for Concurrent Index Creation in Indexing Service","og_description":"In this blog, we will discuss how the user experience of creating multiple indexes concurrently has been improved.","og_url":"https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/","og_site_name":"The Couchbase Blog","article_published_time":"2021-12-14T19:00:16+00:00","article_modified_time":"2023-05-26T20:31:24+00:00","og_image":[{"width":2560,"height":1707,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/12\/charles-deluvio-Lks7vei-eAg-unsplash-scaled.jpg","type":"image\/jpeg"}],"author":"Amit Kulkarni","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Amit Kulkarni","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/"},"author":{"name":"Amit Kulkarni","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/76beaf20748818542ed2b7a6bfcd524c"},"headline":"Support for Concurrent Index Creation in Indexing Service","datePublished":"2021-12-14T19:00:16+00:00","dateModified":"2023-05-26T20:31:24+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/"},"wordCount":1131,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/12\/charles-deluvio-Lks7vei-eAg-unsplash-scaled.jpg","keywords":["Couchbase Server 7.0","distributed databases","Indexing","microservices","multi-tenancy","Secondary Indexing"],"articleSection":["Application Design","Couchbase Architecture","Couchbase Global Secondary Index","Couchbase Server","Global Secondary Index","Indexing","Scopes and Collections"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/","url":"https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/","name":"Support for Concurrent Index Creation in Indexing Service - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/12\/charles-deluvio-Lks7vei-eAg-unsplash-scaled.jpg","datePublished":"2021-12-14T19:00:16+00:00","dateModified":"2023-05-26T20:31:24+00:00","description":"In this blog, we will discuss how the user experience of creating multiple indexes concurrently has been improved.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/12\/charles-deluvio-Lks7vei-eAg-unsplash-scaled.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/12\/charles-deluvio-Lks7vei-eAg-unsplash-scaled.jpg","width":2560,"height":1707},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/support-for-concurrent-index-creation-in-indexing-service\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Support for Concurrent Index Creation in Indexing Service"}]},{"@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":"en-US"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"The Couchbase Blog","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@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\/76beaf20748818542ed2b7a6bfcd524c","name":"Amit Kulkarni","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/9b381fdec8caa95228a24342f1abbbbc","url":"https:\/\/secure.gravatar.com\/avatar\/ce1e7e777f6f5e141aa952f3bba06e838b5cb9bd5dbf9584e9ac998931808950?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ce1e7e777f6f5e141aa952f3bba06e838b5cb9bd5dbf9584e9ac998931808950?s=96&d=mm&r=g","caption":"Amit Kulkarni"},"description":"Amit Kulkarni is working as a Engineering Manager at Couchbase on Global Secondary Indexes. He has experience in working on technologies like Distributed Systems, Distributed NoSQL Databases, Cloud Storage, Storage Virtualisation etc.","url":"https:\/\/www.couchbase.com\/blog\/author\/amit-kulkarni\/"}]}},"authors":[{"term_id":9101,"user_id":49228,"is_guest":0,"slug":"amit-kulkarni","display_name":"Amit Kulkarni","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/ce1e7e777f6f5e141aa952f3bba06e838b5cb9bd5dbf9584e9ac998931808950?s=96&d=mm&r=g","author_category":"","last_name":"Kulkarni","first_name":"Amit","job_title":"","user_url":"","description":"Amit Kulkarni is working as a Engineering Manager at Couchbase on Global Secondary Indexes. He has experience in working on technologies like Distributed Systems, Distributed NoSQL Databases, Cloud Storage, Storage Virtualisation etc."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/12435","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/users\/49228"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=12435"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/12435\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/12579"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=12435"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=12435"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=12435"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=12435"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}