{"id":8882,"date":"2020-07-20T00:44:00","date_gmt":"2020-07-20T07:44:00","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=8882"},"modified":"2023-09-22T09:32:00","modified_gmt":"2023-09-22T16:32:00","slug":"a-tale-of-two-ejection-methods-value-only-vs-full","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/a-tale-of-two-ejection-methods-value-only-vs-full\/","title":{"rendered":"A Tale of Two Ejection Methods: Value-only vs. Full"},"content":{"rendered":"<h2>Introduction<\/h2>\n<p><em>I would like to thank our Couchbase Server engineering team &#8211; especially, Dave Rigby and Jim Walker &#8211; for their tremendous help with this article and endless patience with all my questions.\u00a0 Thanks a lot guys, I really appreciate your vast knowledge and readiness to share it!<\/em><\/p>\n<p>In Couchbase Server, data is stored in buckets.\u00a0 The default <a href=\"https:\/\/docs.couchbase.com\/server\/current\/learn\/buckets-memory-and-storage\/buckets.html\" target=\"_blank\" rel=\"noopener noreferrer\">bucket type<\/a> &#8211; uncreatively called <strong>Couchbase<\/strong> type &#8211; assures asynchronous data persistence to disk.\u00a0 The server will try to have all your data, the active set and the replica set(s), in memory.\u00a0 However, if the in-memory data reaches 85% of the bucket memory quota (this level is called <strong>high water mark<\/strong>), the server will start ejecting (evicting) some of the not-recently-used from memory.\u00a0 The active documents have 40% chance of being evicted, and the replica documents have 60% chance to be evicted.\u00a0 The reason behind it is the following: it&#8217;s more important to have active document resident in memory; however, we do want some replica documents in memory as well, in case a node fails over, and the replicas will need to become active.\u00a0 The eviction process continues until the in-memory data settles below 75% of the bucket memory quota (this level is called <strong>low water mark<\/strong>).<\/p>\n<p>Just a brief reminder about the structure of the documents stored in Couchbase:<\/p>\n<ul>\n<li>Document <strong>key<\/strong> or <strong>ID<\/strong>: variable length &#8211; up to 250 bytes, must be unique for the documents stored within the same bucket<\/li>\n<li>Document <strong>metadata<\/strong>: fixed length &#8211; 56 bytes for documents stored in Couchbase bucket type, 72 bytes for documents stored in Ephemeral bucket type (this bucket type is outside the scope of this article)<\/li>\n<li>Document <strong>value<\/strong>: variable length &#8211; up to 20MB, usually JSON, other formats can also be used<\/li>\n<\/ul>\n<h2>Two Ejection Methods<\/h2>\n<p>By default, a Couchbase bucket uses <strong>Value-only<\/strong> ejection (or eviction) method.\u00a0 Many versions ago, this was the only available option.\u00a0 As the name implies, the ejection process <strong>will remove only the value<\/strong> of the documents and <strong>will keep the document keys and metadata in memory at all times<\/strong>.<\/p>\n<p>Starting with version 3.0 (<a href=\"https:\/\/www.couchbase.com\/downloads\/\" target=\"_blank\" rel=\"noopener noreferrer\">Couchbase Server<\/a> is at version 6.5.1 at the time of this writing), we added the <strong>Full<\/strong> ejection method.\u00a0 It is easy to guess that a bucket configured for full eviction <strong>will remove documents&#8217; keys, metadata, and values<\/strong> as part of the ejection process.<\/p>\n<h2>Trade-off: Performance vs. Memory Size<\/h2>\n<p>So, which option should you pick for your buckets?\u00a0 Here is what the tooltip explains in the GUI of our latest Couchbase Server version:<\/p>\n<ul>\n<li><em><strong>Value Ejection:<\/strong> During ejection, only the value will be ejected (key and metadata will remain in memory).<\/em><\/li>\n<li><em><strong>Full Ejection:<\/strong>\u00a0During ejection, everything (including key, metadata, and value) will be ejected.<\/em><br \/>\n<em>Value Ejection needs more system memory, but provides the best performance. Full Ejection reduces the memory overhead requirement.<\/em><\/li>\n<\/ul>\n<p>To be more precise, <strong>neither<\/strong> method &#8220;<em>needs more system memory<\/em>&#8220;: <strong>Full<\/strong> ejection allows for the dataset to exceed memory significantly, whereas <strong>Value<\/strong> ejection allows for the dataset to be larger than memory to a certain degree, since it must keep keys and metadata in memory.<\/p>\n<p>If <strong>consistent read latency<\/strong> of the applications working with the data in Couchbase Server is (very) important, you should stick with value ejection.\u00a0 This also requires you to <strong>size your cluster<\/strong> properly, assign <strong>sufficient memory quotas<\/strong> to your buckets, implement <strong>document retention<\/strong> policies (archive or remove old documents regularly), and <strong>monitor memory usage<\/strong>.<\/p>\n<p>If staying within <strong>budget or existing technology limits<\/strong> is (very) important, then you should consider full eviction for your large buckets.\u00a0 This may be the case when you are maxed out on your on-premise hardware resources, and there is no way to squeeze any more RAM into your Couchbase nodes.\u00a0 When the money is tight for on-premise or cloud technology spending, the performance trade-off can save the day.<\/p>\n<p>Another reason to consider full ejection is when you expect your dataset to be <strong>large<\/strong>, so that it will <strong>exceed<\/strong> reasonable memory configs.\u00a0 How large is <strong>large<\/strong>?\u00a0 Let&#8217;s say billions (yes, plural!) of documents, tens (also plural!) of terabytes of data.\u00a0 Our Solutions Engineers and Solutions Architects are always here to help you <a href=\"https:\/\/docs.couchbase.com\/server\/current\/install\/sizing-general.html\" target=\"_blank\" rel=\"noopener noreferrer\">size your Couchbase cluster<\/a> properly &#8211; please, talk to us.<\/p>\n<p>While it is possible to switch from one ejection method to another, it is one of the few operations that requires bucket restart and, therefore, some downtime.\u00a0 We do show the following warning in red font in the UI when you attempt to change the ejection method: <span style=\"color: #ff0000\">Changing eviction policy will restart the bucket. This will lead to closing all open connections and some downtime<span style=\"color: #000000\">.\u00a0 Thus, it is wise to decide on the ejection method for your buckets before rolling them out into production.<\/span><\/span><\/p>\n<h2>Why the Difference in Performance?<\/h2>\n<p>Let&#8217;s look at the different scenarios for bucket ejection methods and data residency.\u00a0 This will help us understand how performance gets affected.<\/p>\n<h3>1. Full Data Residency<\/h3>\n<p>When your data is fully resident (i.e., it fits into ~85% of the bucket memory quota), the performance of value-only and full ejection buckets should be similar.\u00a0 Document operations work like the shown below:<\/p>\n<ul>\n<li>Get (read) a document with key = profile::john-doe::123\n<ul>\n<li><span style=\"color: #008000\">FAST<\/span>: check in memory if this key exists.\n<ul>\n<li><span style=\"color: #008000\">FAST<\/span>: If yes, return the document from memory.<\/li>\n<li><span style=\"color: #008000\">FAST<\/span>: If not, return &#8220;document does not exist&#8221; error.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li>Insert a document with key = profile::john-doe::123\n<ul>\n<li><span style=\"color: #008000\">FAST<\/span>: check in memory if this key exists.\n<ul>\n<li><span style=\"color: #008000\">FAST<\/span>: If yes, return &#8220;document already exists&#8221; error.<\/li>\n<li><span style=\"color: #008000\">FAST<\/span>: If not, write the document into memory.\u00a0 Then asynchronously persist and replicate it.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li>Replace a document with key = = profile::john-doe::123\n<ul>\n<li><span style=\"color: #008000\">FAST<\/span>: check in memory if this key exists.\n<ul>\n<li><span style=\"color: #008000\">FAST<\/span>: If yes, save changes into memory.\u00a0 Then asynchronously persist and replicate them.<\/li>\n<li><span style=\"color: #008000\">FAST<\/span>: If not, return &#8220;document does not exist&#8221; error.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3>2. Partial Data Residency, Value-only Ejection<\/h3>\n<p>When the data residency is below 100% for a bucket with <strong>value-only<\/strong> ejection, Couchbase Server knows that <strong>document keys and metadata are still in memory<\/strong>.\u00a0 Therefore, document operations will look like the following:<\/p>\n<ul>\n<li>Get (read) a document with key = profile::john-doe::123\n<ul>\n<li><span style=\"color: #008000\">FAST<\/span>: check in memory if this key exists.\n<ul>\n<li><span style=\"color: #008000\">FAST<\/span>: If yes, check if the document value is in memory\n<ul>\n<li><span style=\"color: #008000\">FAST<\/span>: If yes, return the document from memory.<\/li>\n<li><span style=\"color: #ff6600\">SLOW<\/span>: If not, read the document from disk into memory and return it.<\/li>\n<\/ul>\n<\/li>\n<li><span style=\"color: #008000\">FAST<\/span>: If not, return &#8220;document does not exist&#8221; error.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li>Insert a document with key = profile::john-doe::123\n<ul>\n<li><span style=\"color: #008000\">FAST<\/span>: check in memory if this key exists.\n<ul>\n<li><span style=\"color: #008000\">FAST<\/span>: If yes, return &#8220;document already exists&#8221; error.<\/li>\n<li><span style=\"color: #008000\">FAST<\/span>: If not, write the document into memory.\u00a0 Then asynchronously persist and replicate it.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li>Replace a document with key = = profile::john-doe::123\n<ul>\n<li><span style=\"color: #008000\">FAST<\/span>: check in memory if this key exists.\n<ul>\n<li><span style=\"color: #008000\">FAST<\/span>: If yes, save changes into memory.\u00a0 Then asynchronously persist and replicate them.<\/li>\n<li><span style=\"color: #008000\">FAST<\/span>: If not, return &#8220;document does not exist&#8221; error.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3>3. Partial Data Residency, Full Ejection<\/h3>\n<p>When the data residency is below 100% for a bucket with <strong>full<\/strong> ejection, Couchbase Server <strong>cannot rely<\/strong> on the presence of document keys and metadata in memory, because they could have been evicted.\u00a0 Therefore, document operations will look like the following:<\/p>\n<ul>\n<li>Get (read) a document with key = profile::john-doe::123\n<ul>\n<li><span style=\"color: #008000\">FAST<\/span>: check in memory if this key exists.\n<ul>\n<li><span style=\"color: #008000\">FAST<\/span>: If yes, check if the document value is in memory\n<ul>\n<li><span style=\"color: #008000\">FAST<\/span>: If yes, return the document from memory.<\/li>\n<li><span style=\"color: #ff6600\">SLOW<\/span>: If not, check the disk\n<ul>\n<li><span style=\"color: #ff6600\">SLOW<\/span>: If the document is found on the disk, read the document from disk into memory and return it.<\/li>\n<li><span style=\"color: #ff6600\">SLOW<\/span>: If not, return &#8220;document does not exist&#8221; error.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li>Insert a document with key = profile::john-doe::123\n<ul>\n<li><span style=\"color: #008000\">FAST<\/span>: check in memory if this key exists.\n<ul>\n<li><span style=\"color: #008000\">FAST<\/span>: If yes, return &#8220;document already exists&#8221; error.<\/li>\n<li><span style=\"color: #ff6600\">SLOW<\/span>: If not, check the disk\n<ul>\n<li><span style=\"color: #ff6600\">SLOW<\/span>: If not, write the document into memory.\u00a0 Then asynchronously persist and replicate it.<\/li>\n<li><span style=\"color: #ff6600\">SLOW<\/span>: If yes, return &#8220;document already exists&#8221; error.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li>Replace a document with key = = profile::john-doe::123\n<ul>\n<li><span style=\"color: #008000\">FAST<\/span>: check in memory if this key exists.\n<ul>\n<li><span style=\"color: #008000\">FAST<\/span>: If yes, save changes into memory.\u00a0 Then asynchronously persist and replicate them.<\/li>\n<li><span style=\"color: #ff6600\">SLOW<\/span>: If not, check the disk\n<ul>\n<li><span style=\"color: #ff6600\">SLOW<\/span>: If not, return &#8220;document does not exist&#8221; error.<\/li>\n<li><span style=\"color: #ff6600\">SLOW<\/span>: If yes, write the document into memory.\u00a0 Then asynchronously persist and replicate it.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>With full eviction buckets that are not 100% memory-resident, <strong>many <span style=\"color: #ff0000\"><em>Exists<\/em><\/span> operations have to go to the disk<\/strong>.\u00a0 The number of background fetches (reading documents from disk to memory, also known as &#8220;cache misses&#8221;) is also likely to be higher for full ejection buckets.<\/p>\n<h2>Are There Ways to Improve Performance?<\/h2>\n<p>In addition to <em>Insert<\/em> and <em>Replace<\/em> operations, Couchbase SDKs support <strong><em>Upserts<\/em><\/strong>.\u00a0 The\u00a0<em>upsert<\/em> operation will either insert a document if one does not exist or replace the existing document.\u00a0 Due to the append-only nature of handling data mutations in Couchbase Server, <strong>the\u00a0<em>upsert<\/em><\/strong><strong> operations <span style=\"color: #ff0000\">do not require<\/span> corresponding\u00a0<em>exists<\/em><\/strong><strong> operation.<\/strong>\u00a0 So, the use of <em>upserts<\/em> instead of\u00a0<em>inserts<\/em> and\u00a0<em>replaces<\/em> will improve your application performance &#8211; provided that your use case allows for such a substitution.<\/p>\n<p>Dedicated fast disks will also improve the performance of full ejection buckets.\u00a0 It is one of the recommended configurations for Couchbase nodes: dedicated per-node disks over virtualized storage.<\/p>\n<h2>When to Switch from Value-only to Full Ejection<\/h2>\n<p>Let&#8217;s consider the following situation:<\/p>\n<ul>\n<li>You have a bucket configured with value-only ejection<\/li>\n<li>The bucket has grown to the point when less than 15-20% of the data is resident in memory, which is our recommended minimum residency ratio<\/li>\n<li>You anticipate more data coming in, you already archive\/delete the documents in line with the use case requirements, and there is no way to provide more RAM to the bucket<\/li>\n<\/ul>\n<p><strong>Should you switch to full ejection method?<\/strong><\/p>\n<p>There is a good metric that can help you answer this question: the amount of metadata in RAM, compared to the user data in RAM for the same bucket.\u00a0 By &#8220;metadata&#8221;, we mean document <strong>keys + metadata<\/strong>, in this particular case.\u00a0 &#8220;User data&#8221; in this case means document <strong>value<\/strong>.<\/p>\n<p>You can find these metrics under the <strong>vBucket Resources<\/strong> section in the UI.\u00a0 On the screenshot below, we see that the metadata takes up about 42% of the in-memory bucket data:<\/p>\n<div id=\"attachment_8888\" style=\"width: 910px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-8888\" class=\"size-large wp-image-8888\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/07\/cb-vbucket-metadata-949x1024.jpg\" alt=\"Metadata overhead\" width=\"900\" height=\"971\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/cb-vbucket-metadata-949x1024.jpg 949w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/cb-vbucket-metadata-278x300.jpg 278w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/cb-vbucket-metadata-768x829.jpg 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/cb-vbucket-metadata-300x324.jpg 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/cb-vbucket-metadata-1320x1424.jpg 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/cb-vbucket-metadata.jpg 1394w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><p id=\"caption-attachment-8888\" class=\"wp-caption-text\">Metadata overhead stats<\/p><\/div>\n<p>At a certain point, you may start seeing messages like below in the UI and your Couchbase logs:<\/p>\n<div id=\"attachment_8889\" style=\"width: 910px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-8889\" class=\"size-large wp-image-8889\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/07\/cb-metadata-overhead-1024x258.jpg\" alt=\"Metadata overhead warning\" width=\"900\" height=\"227\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/cb-metadata-overhead-1024x258.jpg 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/cb-metadata-overhead-300x76.jpg 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/cb-metadata-overhead-768x194.jpg 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/cb-metadata-overhead-20x5.jpg 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/07\/cb-metadata-overhead.jpg 1058w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><p id=\"caption-attachment-8889\" class=\"wp-caption-text\">Metadata overhead warning<\/p><\/div>\n<p>With so much of the memory quota taken up by document keys and metadata, there is little to no room to keep the document values.\u00a0 In this case, you will see the server doing a lot of background fetches to load data from disk to memory, just to be ejected in the near future, since the available memory is too small.<\/p>\n<p>If you cannot add more nodes to the cluster and\/or reallocate memory from other buckets, then switching to full ejection method for the bucket at hand is advisable.\u00a0 Just keep in mind: there will be some downtime while your bucket restarts and undergoes the warmup process.<\/p>\n<h2>Wrap-up<\/h2>\n<ul>\n<li><strong>Value-only<\/strong> ejection\/eviction removes only document values from memory, while <strong>full<\/strong> eviction also removes document keys and metadata.<\/li>\n<li>You should make an <strong>informed choice<\/strong> of the ejection method before putting a bucket in production.\u00a0 Write-heavy use cases with many millions of documents are good candidates for full ejection.\u00a0 Changing the ejection method later in production can be costly due to some downtime.<\/li>\n<li><strong>Upsert<\/strong> operations and dedicated fast disks always improve application performance, and even more important for full ejection buckets.<\/li>\n<li>Monitor the bucket <strong>metadata overhead<\/strong>.\u00a0 It is a good indicator that your cluster may be in need of more RAM.\u00a0 If you can&#8217;t get more memory to your Couchbase cluster, and your <strong>metadata overhead is at or higher than 40%<\/strong>, you may consider switching your large write-heavy buckets to full ejection.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Introduction I would like to thank our Couchbase Server engineering team &#8211; especially, Dave Rigby and Jim Walker &#8211; for their tremendous help with this article and endless patience with all my questions.\u00a0 Thanks a lot guys, I really appreciate [&hellip;]<\/p>\n","protected":false},"author":1414,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1815,1821,1816],"tags":[],"ppma_author":[9081],"class_list":["post-8882","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices-and-tutorials","category-couchbase-architecture","category-couchbase-server"],"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>Value-Only Ejection vs. Full Ejection | Two Ejection Methods<\/title>\n<meta name=\"description\" content=\"Value-only ejection vs. full ejection - which is best for your buckets? Learn what the tooltip explains in the GUI of our latest Couchbase Server version.\" \/>\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\/a-tale-of-two-ejection-methods-value-only-vs-full\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"A Tale of Two Ejection Methods: Value-only vs. Full\" \/>\n<meta property=\"og:description\" content=\"Value-only ejection vs. full ejection - which is best for your buckets? Learn what the tooltip explains in the GUI of our latest Couchbase Server version.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/a-tale-of-two-ejection-methods-value-only-vs-full\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2020-07-20T07:44:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-09-22T16:32:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/07\/cb-vbucket-metadata-949x1024.jpg\" \/>\n<meta name=\"author\" content=\"Oleg Kuzmin, Sr. Solutions Engineer, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Oleg Kuzmin, Sr. Solutions Engineer, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/a-tale-of-two-ejection-methods-value-only-vs-full\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/a-tale-of-two-ejection-methods-value-only-vs-full\/\"},\"author\":{\"name\":\"Oleg Kuzmin, Solutions Architect, Databricks\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/567ed489e7c498f0b9ff0014374c2bcd\"},\"headline\":\"A Tale of Two Ejection Methods: Value-only vs. Full\",\"datePublished\":\"2020-07-20T07:44:00+00:00\",\"dateModified\":\"2023-09-22T16:32:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/a-tale-of-two-ejection-methods-value-only-vs-full\/\"},\"wordCount\":1936,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/a-tale-of-two-ejection-methods-value-only-vs-full\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"articleSection\":[\"Best Practices and Tutorials\",\"Couchbase Architecture\",\"Couchbase Server\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/a-tale-of-two-ejection-methods-value-only-vs-full\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/a-tale-of-two-ejection-methods-value-only-vs-full\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/a-tale-of-two-ejection-methods-value-only-vs-full\/\",\"name\":\"Value-Only Ejection vs. Full Ejection | Two Ejection Methods\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/a-tale-of-two-ejection-methods-value-only-vs-full\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/a-tale-of-two-ejection-methods-value-only-vs-full\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2020-07-20T07:44:00+00:00\",\"dateModified\":\"2023-09-22T16:32:00+00:00\",\"description\":\"Value-only ejection vs. full ejection - which is best for your buckets? Learn what the tooltip explains in the GUI of our latest Couchbase Server version.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/a-tale-of-two-ejection-methods-value-only-vs-full\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/a-tale-of-two-ejection-methods-value-only-vs-full\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/a-tale-of-two-ejection-methods-value-only-vs-full\/#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\/a-tale-of-two-ejection-methods-value-only-vs-full\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"A Tale of Two Ejection Methods: Value-only vs. Full\"}]},{\"@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\/567ed489e7c498f0b9ff0014374c2bcd\",\"name\":\"Oleg Kuzmin, Solutions Architect, Databricks\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/3c430b3fd08e47e71c288418a9321d65\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1bbfe682ab4a0341e520c779f47ba96d7930bb09c6e881f66c953e13579ff10f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/1bbfe682ab4a0341e520c779f47ba96d7930bb09c6e881f66c953e13579ff10f?s=96&d=mm&r=g\",\"caption\":\"Oleg Kuzmin, Solutions Architect, Databricks\"},\"sameAs\":[\"https:\/\/databricks.com\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/author\/oleg-kuzmincouchbase-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Value-Only Ejection vs. Full Ejection | Two Ejection Methods","description":"Value-only ejection vs. full ejection - which is best for your buckets? Learn what the tooltip explains in the GUI of our latest Couchbase Server version.","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\/a-tale-of-two-ejection-methods-value-only-vs-full\/","og_locale":"en_US","og_type":"article","og_title":"A Tale of Two Ejection Methods: Value-only vs. Full","og_description":"Value-only ejection vs. full ejection - which is best for your buckets? Learn what the tooltip explains in the GUI of our latest Couchbase Server version.","og_url":"https:\/\/www.couchbase.com\/blog\/a-tale-of-two-ejection-methods-value-only-vs-full\/","og_site_name":"The Couchbase Blog","article_published_time":"2020-07-20T07:44:00+00:00","article_modified_time":"2023-09-22T16:32:00+00:00","og_image":[{"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/07\/cb-vbucket-metadata-949x1024.jpg","type":"","width":"","height":""}],"author":"Oleg Kuzmin, Sr. Solutions Engineer, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Oleg Kuzmin, Sr. Solutions Engineer, Couchbase","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/a-tale-of-two-ejection-methods-value-only-vs-full\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/a-tale-of-two-ejection-methods-value-only-vs-full\/"},"author":{"name":"Oleg Kuzmin, Solutions Architect, Databricks","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/567ed489e7c498f0b9ff0014374c2bcd"},"headline":"A Tale of Two Ejection Methods: Value-only vs. Full","datePublished":"2020-07-20T07:44:00+00:00","dateModified":"2023-09-22T16:32:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/a-tale-of-two-ejection-methods-value-only-vs-full\/"},"wordCount":1936,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/a-tale-of-two-ejection-methods-value-only-vs-full\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","articleSection":["Best Practices and Tutorials","Couchbase Architecture","Couchbase Server"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/a-tale-of-two-ejection-methods-value-only-vs-full\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/a-tale-of-two-ejection-methods-value-only-vs-full\/","url":"https:\/\/www.couchbase.com\/blog\/a-tale-of-two-ejection-methods-value-only-vs-full\/","name":"Value-Only Ejection vs. Full Ejection | Two Ejection Methods","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/a-tale-of-two-ejection-methods-value-only-vs-full\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/a-tale-of-two-ejection-methods-value-only-vs-full\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2020-07-20T07:44:00+00:00","dateModified":"2023-09-22T16:32:00+00:00","description":"Value-only ejection vs. full ejection - which is best for your buckets? Learn what the tooltip explains in the GUI of our latest Couchbase Server version.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/a-tale-of-two-ejection-methods-value-only-vs-full\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/a-tale-of-two-ejection-methods-value-only-vs-full\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/a-tale-of-two-ejection-methods-value-only-vs-full\/#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\/a-tale-of-two-ejection-methods-value-only-vs-full\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"A Tale of Two Ejection Methods: Value-only vs. Full"}]},{"@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\/567ed489e7c498f0b9ff0014374c2bcd","name":"Oleg Kuzmin, Solutions Architect, Databricks","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/3c430b3fd08e47e71c288418a9321d65","url":"https:\/\/secure.gravatar.com\/avatar\/1bbfe682ab4a0341e520c779f47ba96d7930bb09c6e881f66c953e13579ff10f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1bbfe682ab4a0341e520c779f47ba96d7930bb09c6e881f66c953e13579ff10f?s=96&d=mm&r=g","caption":"Oleg Kuzmin, Solutions Architect, Databricks"},"sameAs":["https:\/\/databricks.com"],"url":"https:\/\/www.couchbase.com\/blog\/author\/oleg-kuzmincouchbase-com\/"}]}},"authors":[{"term_id":9081,"user_id":1414,"is_guest":0,"slug":"oleg-kuzmincouchbase-com","display_name":"Oleg Kuzmin, Sr. Solutions Engineer, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/0f297a537c749f924978fb4b8fd8d25dd01526af81550a9df5403c58cb300f06?s=96&d=mm&r=g","author_category":"","last_name":"Kuzmin, Sr. Solutions Engineer, Couchbase","first_name":"Oleg","job_title":"","user_url":"https:\/\/couchbase.com","description":"I help companies succeed in the Digital Economy through adoption of the best NoSQL data platform - Couchbase!"}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/8882","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\/1414"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=8882"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/8882\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=8882"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=8882"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=8882"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=8882"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}