{"id":8023,"date":"2020-01-05T21:41:04","date_gmt":"2020-01-06T05:41:04","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=8023"},"modified":"2025-06-13T19:27:30","modified_gmt":"2025-06-14T02:27:30","slug":"index-planner-for-global-secondary-indexes","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/index-planner-for-global-secondary-indexes\/","title":{"rendered":"Index Planner for Global Secondary Indexes"},"content":{"rendered":"<p style=\"text-align: left\"><span style=\"font-weight: 400\">Integral aspect of any distributed system is to seamlessly provide high availability (HA) and load balancing capabilities to its user. With little to no input from user, Couhbase\u2019s Global Secondary Indexes<sup>1<\/sup><\/span><span style=\"font-weight: 400\">\u00a0(GSI) provides its users with both &#8211; HA and Load Balancing within a couchbase cluster.<\/span><\/p>\n<h3 style=\"text-align: left\"><span style=\"font-weight: 400\">What is Index Planner<\/span><\/h3>\n<p style=\"text-align: left\"><span style=\"font-weight: 400\">Index Planner is a library used by Couchbase indexing service to determine the optimal placement of the indexes. It seamlessly provides support for HA-aware index placement and load balancing for the Couchbase indexing service. Index planner is used to decide the optimal index placement in two use cases, (1) <\/span><a href=\"https:\/\/docs.couchbase.com\/server\/current\/n1ql\/n1ql-language-reference\/createindex.html\"><span style=\"font-weight: 400\">New Index Creation<\/span><\/a><span style=\"font-weight: 400\"> and (2) <\/span><a href=\"https:\/\/docs.couchbase.com\/server\/6.0\/learn\/clusters-and-availability\/rebalance.html#rebalancing-the-index-service\"><span style=\"font-weight: 400\">Index Service Rebalance<\/span><\/a><span style=\"font-weight: 400\"> i.e. when indexer nodes are added and\/or removed from the cluster<sup>2<\/sup><\/span><span style=\"font-weight: 400\">.<\/span><\/p>\n<h3 style=\"text-align: left\"><span style=\"font-weight: 400\">How Index Planner Works<\/span><\/h3>\n<p style=\"text-align: left\"><span style=\"font-weight: 400\">Given a set of \u201cnodes\u201d hosting the Couchbase indexing service (may be having different hardware configurations), and a set of indexes with their own \u201cload parameters\u201d, Index Planner provides the user with optimal placement<sup>3<\/sup><\/span><span style=\"font-weight: 400\"> of these indexes on these indexer nodes. Optimally placing hundreds of indexes &#8211; having different values of load parameters &#8211; on tens of indexer nodes, requires exploration of a very large solution space. So, deterministically finding \u201cthe\u201d optimal solution requires exponential time. Hence, instead of finding \u201cthe\u201d optimal solution, Index Planner uses probabilistic <\/span><a href=\"https:\/\/en.wikipedia.org\/wiki\/Simulated_annealing\"><span style=\"font-weight: 400\">simulated annealing<\/span><\/a><span style=\"font-weight: 400\"> method to find approximate globally optimal solution. Experimentally, simulated annealing has been proved to yield good results for the couchbase server\u2019s index placement algorithm.<\/span><\/p>\n<p style=\"text-align: left\"><span style=\"font-weight: 400\">The load parameters considered by the Index Planner are (1) size of the index (2) memory footprint of the index (3) scan rate for the index (4) data ingestion rate for the index etc., just to name a few. All of these load parameters help Index Planner to calculate the load generated by each index, and in turn calculate the load put on each indexer node by any specific index placement. At the time of <a href=\"https:\/\/docs.couchbase.com\/server\/current\/n1ql\/n1ql-language-reference\/createindex.html\">index creation<\/a>, actual values of the load parameters are unknown. So, for the purpose of index creation, Index Planner runs with\u00a0 \u201cestimated values\u201d of these load parameters. During rebalance, the Index Planner gets the values of these load parameters from the <\/span><a href=\"https:\/\/docs.couchbase.com\/server\/6.5\/rest-api\/rest-index-stats.html\"><span style=\"font-weight: 400\">index stats<\/span><\/a><span style=\"font-weight: 400\">.<\/span><\/p>\n<h5 style=\"text-align: left\"><b>Example 1:<\/b><\/h5>\n<p style=\"text-align: left\"><span style=\"font-weight: 400\">Let\u2019s consider a Couchbase cluster with 3 identical indexer nodes &#8211; \u201cNode 1\u201d,\u00a0 \u201cNode 2\u201d and <\/span><span style=\"font-weight: 400\">\u201cNode 3\u201d. Let\u2019s assume that nodes Node 1 and Node 2 are already hosting 1 index each &#8211; index1 and index2 respectively. If the user adds a new index \u201cindex3\u201d, based on current load distribution, Index Planner will place the new index on Node 3.<\/span><\/p>\n<p style=\"text-align: left\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-8025\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/01\/Index-Planner-Blog_-Example-1-300x111.png\" alt=\"Index Planner for Global Secondary Indexes: Example 1\" width=\"884\" height=\"327\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Index-Planner-Blog_-Example-1-300x111.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Index-Planner-Blog_-Example-1-768x283.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Index-Planner-Blog_-Example-1-20x7.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Index-Planner-Blog_-Example-1.png 959w\" sizes=\"auto, (max-width: 884px) 100vw, 884px\" \/><\/p>\n<p style=\"text-align: left\"><span style=\"font-weight: 400\">This is how the Index Planner takes care of distributing indexes among all available index nodes in the cluster. To provide further load balancing capabilities and to provide HA, indexing service allows users to create index replicas. In the following sections we will discuss the index replicas.<\/span><\/p>\n<h3 style=\"text-align: left\"><span style=\"font-weight: 400\">Index Planner for Index Replica Placement<\/span><\/h3>\n<p style=\"text-align: left\"><span style=\"font-weight: 400\">For high availability, users are always advised to create one or more <\/span><a href=\"https:\/\/docs.couchbase.com\/server\/current\/learn\/services-and-indexes\/indexes\/index-replication.html\"><span style=\"font-weight: 400\">index replicas<\/span><\/a><span style=\"font-weight: 400\"> (based on their HA requirements). Couchbase indexing service implements master-master replica policy. So, all the replicas in the cluster can serve incoming queries<sup>4<\/sup><\/span><span style=\"font-weight: 400\">. Couchbase indexing service makes sure that the scan requests are uniformly distributed across all the index replicas.<\/span><\/p>\n<p style=\"text-align: left\"><span style=\"font-weight: 400\">Index Planner \u201calways\u201d makes sure that the replicas of the same index will get placed on different indexer nodes. This provides users with High Availability.<\/span><\/p>\n<h5 style=\"text-align: left\"><b>Example 2:<\/b><\/h5>\n<p style=\"text-align: left\"><span style=\"font-weight: 400\">In the same cluster as Example 1, let\u2019s assume that nodes Node 1 and Node 2 are already hosting 2 index replicas each, and Node 3 is not hosting any index replica<sup>5<\/sup><\/span><span style=\"font-weight: 400\">. So, if the user adds a new index \u201cindex3\u201d with two replicas (replica0 and replica1), based on current load distribution, Index Planner will place the one of the new index replicas on node Node 3, but second replica will NOT be placed on Node 3 &#8211; even if it means relatively uneven load distribution across the nodes.<\/span><\/p>\n<p style=\"text-align: left\"><em><span style=\"font-weight: 400\">Notes: Each index replica is identified by its id (i.e. replicaId) which starts from zero. Also, user can specify the required number of replicas at the time of index creation using \u201cnum_replica\u201d parameter, where \u201cnum_replica\u201d = 1 means total 2 index instances (with replicaId 0 and replicaId 1) will be created.<\/span><\/em><\/p>\n<p style=\"text-align: left\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-8026\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/01\/Index-Planner-Blog_-Example-2-300x146.png\" alt=\"Index Planner for Global Secondary Indexes: Example 2\" width=\"884\" height=\"430\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Index-Planner-Blog_-Example-2-300x146.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Index-Planner-Blog_-Example-2-768x374.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Index-Planner-Blog_-Example-2-20x10.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Index-Planner-Blog_-Example-2.png 960w\" sizes=\"auto, (max-width: 884px) 100vw, 884px\" \/><\/p>\n<h3 style=\"text-align: left\"><span style=\"font-weight: 400\">Index Planner for Rack Zone Awareness<\/span><\/h3>\n<p style=\"text-align: left\"><span style=\"font-weight: 400\">Couchbase cluster manager provides users with the ability to group the cluster nodes to form <\/span><a href=\"https:\/\/docs.couchbase.com\/server\/6.0\/manage\/manage-groups\/manage-groups.html\"><span style=\"font-weight: 400\">Server Groups<\/span><\/a><span style=\"font-weight: 400\">. Each server group can be mapped to a failover zone in the data center. \u00a0For example, all the nodes in a single \u201crack\u201d in the data center can belong to a single server group.<\/span><\/p>\n<p style=\"text-align: left\"><span style=\"font-weight: 400\">Index Planner is \u201crack zone aware\u201d and it always places the replicas of same index in different server groups. If the number of server groups is less than the number of replicas, server groups can host more than 1 replica.<\/span><\/p>\n<h5 style=\"text-align: left\"><b>Example 3:<\/b><\/h5>\n<p style=\"text-align: left\"><span style=\"font-weight: 400\">Let\u2019s consider a Couchbase cluster with 4 identical indexer nodes &#8211; \u201cNode 1\u201d,\u00a0 \u201cNode 2\u201d, \u201cNode 3\u201d and \u201cNode 4\u201d. Node 1 and Node 2 belong to \u201cServer Group 1\u201d and, Node 3 and Node 4 belong to \u201cServer Group 2\u201d. Let\u2019s assume that nodes Node 1 and Node 2 are already hosting 1 index each: index1 &#8211; replica0 and index2 &#8211; replica0 respectively. Now, if the user adds a new index \u201cindex3\u201d with 2 replicas (replica0 and replica1) to the cluster. So, Index Planner will add one replica to Node 3 or Node 4 distribute the load. But, the second replica has to go Server Group 1, because Node 3 or Node 4 &#8211; belonging to Server Group 1 &#8211; is already hosting one replica. Index Planner makes this choice even if it means a relatively uneven load distribution across multiple nodes.<\/span><\/p>\n<p style=\"text-align: left\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-8027\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/01\/Index-Planner-Blog_-Example-3-300x146.png\" alt=\"Index Planner for Global Secondary Indexes: Example 3\" width=\"884\" height=\"430\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Index-Planner-Blog_-Example-3-300x146.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Index-Planner-Blog_-Example-3-768x374.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Index-Planner-Blog_-Example-3-20x10.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Index-Planner-Blog_-Example-3.png 960w\" sizes=\"auto, (max-width: 884px) 100vw, 884px\" \/><\/p>\n<h3 style=\"text-align: left\"><span style=\"font-weight: 400\">Index Planner for Index Partition Distribution<\/span><\/h3>\n<p style=\"text-align: left\"><span style=\"font-weight: 400\">Couchbase users can create <\/span><a href=\"https:\/\/docs.couchbase.com\/server\/6.0\/n1ql\/n1ql-language-reference\/index-partitioning.html\"><span style=\"font-weight: 400\">partitioned index<\/span><\/a><span style=\"font-weight: 400\"> to get better load distribution &#8211; with respect to index build &#8211; and to get faster scan results for large indexes. With the help of partitioned index, index data will be distributed among multiple partitions based on the hash-value of the partition key. Index planner is partition-aware and can distribute index partitions across multiple indexer nodes &#8211; based on the index build load and index scan load.<\/span><\/p>\n<p style=\"text-align: left\"><span style=\"font-weight: 400\">Index Planner distributes partitions of an index amongst as many indexer nodes as possible. This is useful in distributing the index scan load as well as the index build load among those indexer nodes. But Index Planner doesn\u2019t guarantee uniform distribution of partitions among all available indexer nodes. This helps users in getting better distribution of overall load in the cluster, when there are multiple non-partitioned and partitioned indexes with different \u201cload parameters\u201d.\u00a0<\/span><\/p>\n<p style=\"text-align: left\"><b>Example 4:<\/b><\/p>\n<p style=\"text-align: left\"><span style=\"font-weight: 400\">Let\u2019s consider a Couchbase cluster with 4 identical indexer nodes &#8211; \u201cNode 1\u201d,\u00a0 \u201cNode 2\u201d, \u201cNode 3\u201d and \u201cNode 4\u201d. Let\u2019s assume that nodes Node 1 is already hosting 2 non-partitioned indexes. Now, if the user adds a partitioned index<sup>6<\/sup><\/span><span style=\"font-weight: 400\"> \u201cindex3\u201d (with 4 partitions), Index Planner <\/span><b>may<\/b><span style=\"font-weight: 400\"> distribute the 4 partitions of the new index only among Node 2, Node 3 and Node 4. This will ensure overall better load distribution in the cluster.<\/span><\/p>\n<p style=\"text-align: left\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-8028\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/01\/Index-Planner-Blog_-Example-4-300x146.png\" alt=\"Index Planner for Global Secondary Indexes: Example 4\" width=\"884\" height=\"430\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Index-Planner-Blog_-Example-4-300x146.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Index-Planner-Blog_-Example-4-768x374.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Index-Planner-Blog_-Example-4-20x10.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/01\/Index-Planner-Blog_-Example-4.png 960w\" sizes=\"auto, (max-width: 884px) 100vw, 884px\" \/><\/p>\n<p style=\"text-align: left\"><span style=\"font-weight: 400\">Partitioned indexes can have replicas. Each partition of an index has its own set of partition replicas. Index Planner makes sure that partition replicas are also distributed across indexer nodes and across different server groups to ensure required load distribution and high availability.<\/span><\/p>\n<p style=\"text-align: left\"><i><span style=\"font-weight: 400\">In the next part of this blog, we will discuss how couchbase indexing service uses Index Planner for various use cases.<\/span><\/i><\/p>\n<hr \/>\n<p style=\"text-align: left\"><span style=\"font-weight: 300\"><sup>1<\/sup> In this blogpost, the term \u201cindex\u201d will be used only for Couchbase\u2019s Global Secondary Indexes.<br \/>\n<sup>2<\/sup> Indexes residing on the non-removed nodes in the cluster are unaffected by rebalance.<br \/>\n<sup>3<\/sup> Optimal placement means best possible load distribution that adheres to all HA requirements.<br \/>\n<sup>4<\/sup> Global Secondary Index replicas are built and maintained completely independent of each other. The incoming queries &#8211; served by these replicas &#8211; adhere to the Couchbase GSI <a href=\"https:\/\/docs.couchbase.com\/server\/6.0\/learn\/services-and-indexes\/indexes\/index-replication.html#index-consistency\">consistency model<\/a>.<br \/>\n<sup>5<\/sup> Users can end up with this kind of index distribution when they start with two nodes in the cluster, create indexes with 2 replicas each and then add a third node to the cluster.<br \/>\n<sup>6<\/sup> For partitioned index, partition ids start from 1. Partition id 0 is used for non-partitioned index.<\/span><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Integral aspect of any distributed system is to seamlessly provide high availability (HA) and load balancing capabilities to its user. With little to no input from user, Couhbase\u2019s Global Secondary Indexes1\u00a0(GSI) provides its users with both &#8211; HA and Load [&hellip;]<\/p>\n","protected":false},"author":49228,"featured_media":2653,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1816],"tags":[1505],"ppma_author":[9101],"class_list":["post-8023","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-server","tag-index"],"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>Couchbase Server - Index Planner for Global Secondary Indexes<\/title>\n<meta name=\"description\" content=\"Index planner for Couchbase&#039;s global secondary indexes - a tool to find optimal placement for the indexes and the index replicas across multiple nodes.\" \/>\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\/index-planner-for-global-secondary-indexes\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Index Planner for Global Secondary Indexes\" \/>\n<meta property=\"og:description\" content=\"Index planner for Couchbase&#039;s global secondary indexes - a tool to find optimal placement for the indexes and the index replicas across multiple nodes.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/index-planner-for-global-secondary-indexes\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2020-01-06T05:41:04+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T02:27:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/02\/shutterstock_483254356.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1000\" \/>\n\t<meta property=\"og:image:height\" content=\"500\" \/>\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\/index-planner-for-global-secondary-indexes\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/index-planner-for-global-secondary-indexes\/\"},\"author\":{\"name\":\"Amit Kulkarni\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/76beaf20748818542ed2b7a6bfcd524c\"},\"headline\":\"Index Planner for Global Secondary Indexes\",\"datePublished\":\"2020-01-06T05:41:04+00:00\",\"dateModified\":\"2025-06-14T02:27:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/index-planner-for-global-secondary-indexes\/\"},\"wordCount\":1300,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/index-planner-for-global-secondary-indexes\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/02\/shutterstock_483254356.jpg\",\"keywords\":[\"Index\"],\"articleSection\":[\"Couchbase Server\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/index-planner-for-global-secondary-indexes\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/index-planner-for-global-secondary-indexes\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/index-planner-for-global-secondary-indexes\/\",\"name\":\"Couchbase Server - Index Planner for Global Secondary Indexes\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/index-planner-for-global-secondary-indexes\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/index-planner-for-global-secondary-indexes\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/02\/shutterstock_483254356.jpg\",\"datePublished\":\"2020-01-06T05:41:04+00:00\",\"dateModified\":\"2025-06-14T02:27:30+00:00\",\"description\":\"Index planner for Couchbase's global secondary indexes - a tool to find optimal placement for the indexes and the index replicas across multiple nodes.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/index-planner-for-global-secondary-indexes\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/index-planner-for-global-secondary-indexes\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/index-planner-for-global-secondary-indexes\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/02\/shutterstock_483254356.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/02\/shutterstock_483254356.jpg\",\"width\":1000,\"height\":500,\"caption\":\"Couchbase NoSql\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/index-planner-for-global-secondary-indexes\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Index Planner for Global Secondary Indexes\"}]},{\"@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":"Couchbase Server - Index Planner for Global Secondary Indexes","description":"Index planner for Couchbase's global secondary indexes - a tool to find optimal placement for the indexes and the index replicas across multiple nodes.","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\/index-planner-for-global-secondary-indexes\/","og_locale":"en_US","og_type":"article","og_title":"Index Planner for Global Secondary Indexes","og_description":"Index planner for Couchbase's global secondary indexes - a tool to find optimal placement for the indexes and the index replicas across multiple nodes.","og_url":"https:\/\/www.couchbase.com\/blog\/index-planner-for-global-secondary-indexes\/","og_site_name":"The Couchbase Blog","article_published_time":"2020-01-06T05:41:04+00:00","article_modified_time":"2025-06-14T02:27:30+00:00","og_image":[{"width":1000,"height":500,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/02\/shutterstock_483254356.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\/index-planner-for-global-secondary-indexes\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/index-planner-for-global-secondary-indexes\/"},"author":{"name":"Amit Kulkarni","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/76beaf20748818542ed2b7a6bfcd524c"},"headline":"Index Planner for Global Secondary Indexes","datePublished":"2020-01-06T05:41:04+00:00","dateModified":"2025-06-14T02:27:30+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/index-planner-for-global-secondary-indexes\/"},"wordCount":1300,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/index-planner-for-global-secondary-indexes\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/02\/shutterstock_483254356.jpg","keywords":["Index"],"articleSection":["Couchbase Server"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/index-planner-for-global-secondary-indexes\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/index-planner-for-global-secondary-indexes\/","url":"https:\/\/www.couchbase.com\/blog\/index-planner-for-global-secondary-indexes\/","name":"Couchbase Server - Index Planner for Global Secondary Indexes","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/index-planner-for-global-secondary-indexes\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/index-planner-for-global-secondary-indexes\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/02\/shutterstock_483254356.jpg","datePublished":"2020-01-06T05:41:04+00:00","dateModified":"2025-06-14T02:27:30+00:00","description":"Index planner for Couchbase's global secondary indexes - a tool to find optimal placement for the indexes and the index replicas across multiple nodes.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/index-planner-for-global-secondary-indexes\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/index-planner-for-global-secondary-indexes\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/index-planner-for-global-secondary-indexes\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/02\/shutterstock_483254356.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/02\/shutterstock_483254356.jpg","width":1000,"height":500,"caption":"Couchbase NoSql"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/index-planner-for-global-secondary-indexes\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Index Planner for Global Secondary Indexes"}]},{"@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\/8023","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=8023"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/8023\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/2653"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=8023"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=8023"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=8023"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=8023"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}