{"id":12561,"date":"2021-12-13T08:00:12","date_gmt":"2021-12-13T16:00:12","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=12561"},"modified":"2025-06-13T21:49:43","modified_gmt":"2025-06-14T04:49:43","slug":"durability-performance-testing-with-sdk-3-0","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/durability-performance-testing-with-sdk-3-0\/","title":{"rendered":"Durability Performance Testing With SDK 3.0+"},"content":{"rendered":"<p><em><span style=\"font-weight: 400;\">Learn about performance testing for durable writes with SDK 3.0+ and setting up infrastructure using Couchbase\u2019s cbc-pillowfight.<\/span><\/em><\/p>\n<p><span style=\"font-weight: 400;\">Performance-testing durability with any database can be subjective and challenging because there are other factors that influence performance. Durability is the act of ability to write to active, replica, and persisted copies of the data. Couchbase has different levels of durability based on the use case and SLA\u2019s. But ultimately network speed, disk writing speed, and available CPU resources are as sensitive to performance as the database itself.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">What defines performance (or high performance) of durable writes? Is it latency of the operation? Is it throughput (operations per second)? It depends on the use case. The popular answer is usually&#8230;BOTH!<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Durability updates in Couchbase SDK<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Earlier versions of the Couchbase SDK (Pre-3.0) do have durable writes with the parameters <\/span><i><span style=\"font-weight: 400;\">replicateTo <\/span><\/i><span style=\"font-weight: 400;\">and <\/span><i><span style=\"font-weight: 400;\">persistTo<\/span><\/i><span style=\"font-weight: 400;\">. <\/span><i><span style=\"font-weight: 400;\">ReplicateTo <\/span><\/i><span style=\"font-weight: 400;\">waits for the write to complete from 1 to 3 replicas. <\/span><i><span style=\"font-weight: 400;\">PersistTo <\/span><\/i><span style=\"font-weight: 400;\">waits for the active copy on disk to be written to as well. Developers wanted finer control and improved performance with durable writes to replicas and disk.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Couchbase SDK 3.0 was released about a year ago. A fundamental update to the new SDK version is durability with both latency and throughput in mind.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">See the definitions in the documentation:\u00a0<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><a href=\"https:\/\/docs.couchbase.com\/server\/current\/learn\/data\/durability.html\"><span style=\"font-weight: 400;\">Durability in Couchbase<\/span><\/a><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><a href=\"https:\/\/docs.couchbase.com\/java-sdk\/current\/concept-docs\/durability-replication-failure-considerations.html\"><span style=\"font-weight: 400;\">Durability &amp; Replication Failure Considerations<\/span><\/a><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">There are three levels of durability:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Majority <\/b><span style=\"font-weight: 400;\">\u2013 The server will ensure that the change is available in memory on the majority of configured replicas.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>MajorityAndPersistToActive <\/b><span style=\"font-weight: 400;\">\u2013 Majority level, plus persisted to disk on the active node.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>PersistToMajority <\/b><span style=\"font-weight: 400;\">\u2013 Majority level, plus persisted to disk on the majority of configured replicas.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Each durability level has an impact on performance as the SDK will wait for the write to be completed using <\/span><i><span style=\"font-weight: 400;\">majority<\/span><\/i><span style=\"font-weight: 400;\">, <\/span><i><span style=\"font-weight: 400;\">persistTo<\/span><\/i><span style=\"font-weight: 400;\">, or both.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">In my experience working with customers with a relational database background, the knee jerk decision is to go with the highest durability level. But their experience is quite different, as RDBMS have durability built into the architecture to disallow reads before writes are done.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Whereas Couchbase has finer grained control over durability settings than traditional RDBMS users may have expected. For example, Couchbase also has a <\/span><b>bucket level durability<\/b><span style=\"font-weight: 400;\"> setting.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-12562 size-large\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/12\/durability-and-performance-713x1024.png\" alt=\"\" width=\"713\" height=\"1024\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/12\/durability-and-performance-713x1024.png 713w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/12\/durability-and-performance-209x300.png 209w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/12\/durability-and-performance-768x1103.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/12\/durability-and-performance-300x431.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/12\/durability-and-performance-14x20.png 14w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/12\/durability-and-performance.png 1040w\" sizes=\"auto, (max-width: 713px) 100vw, 713px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">Furthermore, the durability choice is specific to the use case, application, and SLAs. If bucket level durability is not enough control, Couchbase supports <\/span><b>durability on a write-by-write basis <\/b><span style=\"font-weight: 400;\">\u2013 each individual write can be configured for specific durability or it can be set to the bucket level, i.e., all writes will follow the same durability level.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Server Setup Considerations for Testing<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Even more important than the mechanism of durability within the database architecture are the hosting machine specifications to test the performance of durable writes. Couchbase will never place an active and replica copy onto the same disk; we autoshard the data and guarantee that replicas won\u2019t reside with an active thus being on a different node.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">This means that writing to replicas is affected by the network speed and latency. The faster the network, the faster the durable write to replica, i.e., to majority. <\/span><b>The most influential hosting machine factor for durable writes is disk latency and throughput.<\/b><span style=\"font-weight: 400;\"> Couchbase recommends local SSDs for persistence, not only for speed but for quick and efficient recovery of a node from failure.<\/span><\/p>\n<h4><span style=\"font-weight: 400;\">Public Cloud Considerations<\/span><\/h4>\n<p><span style=\"font-weight: 400;\">Today, more customers are conducting testing and POCs in public cloud environments for speed, simplicity, and temporary investment of resources.\u00a0<\/span><\/p>\n<h4><span style=\"font-weight: 400;\">Storage\/disk selection<\/span><\/h4>\n<p><span style=\"font-weight: 400;\">In the public cloud, all of the providers have different levels of disk storage for machine instances\u2013from EBS-type storage which is typically the slowest, to high-performance NVRAM SSDs.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Any storage type will work but the evaluation must be aware that the performance of volume types are, arguably, the bigger factor for durable writes no matter what database is being evaluated. For example, <\/span><a href=\"https:\/\/docs.aws.amazon.com\/AWSEC2\/latest\/UserGuide\/ebs-volume-types.html\"><span style=\"font-weight: 400;\">this AWS documentation link<\/span><\/a><span style=\"font-weight: 400;\"> shows how complicated storage types can be in public cloud storage.<\/span><\/p>\n<h4><span style=\"font-weight: 400;\">Instance type selection<\/span><\/h4>\n<p><span style=\"font-weight: 400;\">Customers that have successfully tested Couchbase durability try to match the testing environment to their production hosted environment. However, customers also deploy <\/span><i><span style=\"font-weight: 400;\">t3.large <\/span><\/i><span style=\"font-weight: 400;\">or <\/span><i><span style=\"font-weight: 400;\">t3.small <\/span><\/i><span style=\"font-weight: 400;\">for testing and then ask why it\u2019s not performing.<\/span><\/p>\n<h4><span style=\"font-weight: 400;\">Network scenarios<\/span><\/h4>\n<p><span style=\"font-weight: 400;\">Make sure the client is on the same network as the server environment for best performance. Poor quality tests are often run on a laptop over wireless to a publicly exposed hostname in a public cloud. There are so many network hops from wireless to router, public network, hosted network, etc. that the latencies are huge.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">In summary, with event handling for durable writes, Couchbase has very fast writes. Durable writes are done as fast as the hosting environment will allow and\/or set up for.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Testing Couchbase Durability<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Durability can be tested using any applications that you have already created with the Couchbase SDK, however, to simplify and standardized testing, one of our tools may help.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Included in Couchbase Server is a performance measurement command line tool called <\/span><i><span style=\"font-weight: 400;\">cbc-pillowfight<\/span><\/i><span style=\"font-weight: 400;\">. Pillowfight has been a part of Couchbase for years so it is rock solid for performance testing. Pillowfight is based on the Couchbase C SDK so it is highly performant. It is very fast to the point of being too fast! What do I mean about &#8220;too fast&#8221;? I will get to that in a moment.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Setup and configuration information is presented in <\/span><a href=\"https:\/\/www.couchbase.com\/blog\/performance-testing-load-testing-couchbase-pillowfight\/\"><span style=\"font-weight: 400;\">this earlier blog<\/span><\/a><span style=\"font-weight: 400;\"> regarding testing Couchbase with pillowfight and some sample scenarios are laid out below.\u00a0<\/span><\/p>\n<h4><span style=\"font-weight: 400;\">Options for performance testing using pillowfight<\/span><\/h4>\n<p><span style=\"font-weight: 400;\">The default pillowfight settings may not be optimal for the type of application that you\u2019ll be using with Couchbase. There are many ways to adjust pillowfight to better fit your use cases. For the full list of options, type <\/span><i><span style=\"font-weight: 400;\">cbc-pillowfight &#8211;help<\/span><\/i><span style=\"font-weight: 400;\"> at the command line.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Here are some notable options you might want to try out:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\"><em>-I<\/em> <\/span><span style=\"font-weight: 400;\">or <\/span><em><span style=\"font-weight: 400;\">&#8211;num-items <\/span><\/em><span style=\"font-weight: 400;\">with a number, to specify how many documents you want to operate on.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><em><span style=\"font-weight: 400;\">&#8211;json<\/span><\/em><span style=\"font-weight: 400;\"> to use JSON payloads in the documents. By default, documents are created with <\/span><a href=\"https:\/\/www.couchbase.com\/blog\/using-couchbase-to-store-non-json-data\/\"><span style=\"font-weight: 400;\">non-JSON payloads<\/span><\/a><span style=\"font-weight: 400;\">, but you may want to have real JSON documents in order to test other aspects of performance while the pillow fight is running.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><em><span style=\"font-weight: 400;\">-e<\/span><\/em><span style=\"font-weight: 400;\"> to expire documents after a certain period of time. If you are using Couchbase as a cache or short-term storage, you will want to use this setting to monitor the effect of documents expiring.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><em><span style=\"font-weight: 400;\">&#8211;subdoc<\/span><\/em><span style=\"font-weight: 400;\"> to use the subdocument API. Not every operation will need to be on an entire document.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\"><em>-M<\/em> <\/span><span style=\"font-weight: 400;\">or <\/span><em><span style=\"font-weight: 400;\">&#8211;max-size<\/span><\/em><span style=\"font-weight: 400;\"> to set a ceiling on the size of the documents. You may want to adjust this to tailor a more realistic document size for your system. There is a corresponding -m and &#8211;min-size too<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Here\u2019s another example using the above options:<\/span><\/p>\n<p><em><span style=\"font-weight: 400;\">cbc-pillowfight.exe -U couchbase:\/\/localhost\/pillow -u Administrator -P password -I 10000 &#8211;json -e 10 &#8211;subdoc -M 1024<\/span><\/em><\/p>\n<p><span style=\"font-weight: 400;\">This will start a pillowfight using 10000 JSON documents, that expire after 10 seconds, use the sub-document API, and has a max document size of 1024 bytes.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Note: There is a <\/span><em><span style=\"font-weight: 400;\">-t &#8211;num-threads<\/span><\/em><span style=\"font-weight: 400;\"> option. Currently, if you\u2019re using Windows (like me), you are limited to a single thread (see <\/span><a href=\"https:\/\/github.com\/couchbase\/libcouchbase\/blob\/master\/tools\/cbc-pillowfight.cc#L874-L879\"><span style=\"font-weight: 400;\">this code<\/span><\/a><span style=\"font-weight: 400;\">).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Pillowfight can be tuned for specific operations, especially durable writes performance testing.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Let\u2019s review this pillowfight command:<\/span><\/p>\n<p><em><span style=\"font-weight: 400;\">cbc-pillowfight -U &lt;hostname&gt;\/&lt;bucket&gt; -u &lt;login&gt; -P &lt;password&gt; -I 2000 &#8211;set-pct=100 &#8211;min-size=100 &#8211;max-size=250 -t 10 &#8211;durability majority_and_persist_to_active &#8211;no-population<\/span><\/em><\/p>\n<p><span style=\"font-weight: 400;\">What is this command doing?\u00a0<\/span><\/p>\n<p><em><span style=\"font-weight: 400;\">-I 2000<\/span><\/em> <span style=\"font-weight: 400;\">is number of items, 2000.\u00a0<\/span><\/p>\n<p><em><span style=\"font-weight: 400;\">&#8211;set-pct=100<\/span> <\/em><span style=\"font-weight: 400;\"><em>i<\/em>s 100% of the operations are writes. If set to 50 then 50\/50 writes to reads.<\/span><\/p>\n<p><em><span style=\"font-weight: 400;\">&#8211;min-size=100<\/span><\/em> <span style=\"font-weight: 400;\">is minimum size document of 100 bytes.<\/span><\/p>\n<p><em><span style=\"font-weight: 400;\">&#8211;max-size=250<\/span> <\/em><span style=\"font-weight: 400;\">is maximum size document of 250 bytes. Pillowfight will randomize the documents from 100 to 250 bytes.<\/span><\/p>\n<p><em><span style=\"font-weight: 400;\">-t 10<\/span> <\/em><span style=\"font-weight: 400;\">is 10 threads<\/span><\/p>\n<p><em><span style=\"font-weight: 400;\">&#8211;durability majority_and_persist_to_active<\/span><\/em> <span style=\"font-weight: 400;\">is the durability setting<\/span><span style=\"font-weight: 400;\">. <\/span><span style=\"font-weight: 400;\">The SDK will write to the majority of replicas if more than one and wait for persist to active copy on disk.<\/span><\/p>\n<p><em><span style=\"font-weight: 400;\">&#8211;no-population<\/span> <\/em><span style=\"font-weight: 400;\">setting commits the write then deletes it.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Managing threads\/buffers<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">This command will keep creating documents and writing into Couchbase as fast as possible. Pillowfight will create a list of keys as an array and recursively write. Once it reaches the end it will go back to the top of the array and start writing the same keys again.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Remember my &#8220;too fast&#8221; comment earlier? When testing durability, especially in slow hosting environments with slow networks and mass storage (EBS S3), pillowfight will be much faster than the infrastructure. This means that a pillowfight thread will still be waiting to finish while another thread is waiting to do the next write.<\/span><\/p>\n<p><b>How do we create a test that truly tests durability?<\/b><span style=\"font-weight: 400;\"> Make the buffer of keys large and don\u2019t go back to the top.\u00a0<\/span><\/p>\n<p><em><span style=\"font-weight: 400;\">cbc-pillowfight -U &lt;hostname&gt;\/&lt;bucket&gt; -u &lt;login&gt; -P &lt;password&gt; -I 2000000 &#8211;set-pct=100 &#8211;min-size=100 &#8211;max-size=250 -t 10 &#8211;durability majority_and_persist_to_active &#8211;batch-size 1 &#8211;no-population<\/span><\/em><\/p>\n<p><span style=\"font-weight: 400;\">What\u2019s the difference between these commands? The command above creates a list of 2 million keys and only goes through it once. This will guarantee that one thread won\u2019t be waiting for a previous thread\u2019s write to complete the same document. This is truly testing Couchbase and the hosting environment capability of durable writes. It is possible to remove <\/span><i><span style=\"font-weight: 400;\">batch-size<\/span><\/i><span style=\"font-weight: 400;\">, most likely no threads will be waiting to write.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Even if the test doesn\u2019t use pillowfight, the application and test criteria should be aware that if a buffer of documents will be recursively used, there is a likelihood with threads that one write might be waiting for another write to complete.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Conclusions<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Couchbase is quite capable of high-performance writes but each use case and conditions are unique to the test. Setting up the right testing environment is critical to any durable write test.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Pillowfight is a great tool for testing Couchbase with many of the features already built-in like setting ratio of reads to writes, threading, document size, and durability levels.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">If the test application is being created, it is important to conduct testing that truly tests the database and infrastructure. The results are subjective to not only the database but also the environment in which it was tested.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">If you have any questions, reach out to me at <\/span><a href=\"mailto:james.powenski@couchbase.com\"><span style=\"font-weight: 400;\">james.powenski@couchbase.com<\/span><\/a><span style=\"font-weight: 400;\"> I would be more than happy to help.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Learn about performance testing for durable writes with SDK 3.0+ and setting up infrastructure using Couchbase\u2019s cbc-pillowfight. Performance-testing durability with any database can be subjective and challenging because there are other factors that influence performance. Durability is the act of [&hellip;]<\/p>\n","protected":false},"author":77552,"featured_media":12577,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[9986,9417,2201],"tags":[2194,2072],"ppma_author":[9217],"class_list":["post-12561","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c","category-performance","category-tools-sdks","tag-durability","tag-pillowfight"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.8 (Yoast SEO v25.8) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Durability Performance Testing With SDK 3.0+ - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"Learn about performance testing for durable writes with SDK 3.0+ and setting up infrastructure using Couchbase\u2019s cbc-pillowfight.\" \/>\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\/durability-performance-testing-with-sdk-3-0\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Durability Performance Testing With SDK 3.0+\" \/>\n<meta property=\"og:description\" content=\"Learn about performance testing for durable writes with SDK 3.0+ and setting up infrastructure using Couchbase\u2019s cbc-pillowfight.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/durability-performance-testing-with-sdk-3-0\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2021-12-13T16:00:12+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T04:49:43+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/12\/christina-wocintechchat-com-glRqyWJgUeY-unsplash-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1709\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"James Powenski, Couchbase Senior Solutions Engineer\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"James Powenski, Couchbase Senior Solutions Engineer\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/durability-performance-testing-with-sdk-3-0\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/durability-performance-testing-with-sdk-3-0\/\"},\"author\":{\"name\":\"james.powenski\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/5b6cdf2c0ffc337f914a4eb5fff2937f\"},\"headline\":\"Durability Performance Testing With SDK 3.0+\",\"datePublished\":\"2021-12-13T16:00:12+00:00\",\"dateModified\":\"2025-06-14T04:49:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/durability-performance-testing-with-sdk-3-0\/\"},\"wordCount\":1707,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/durability-performance-testing-with-sdk-3-0\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/12\/christina-wocintechchat-com-glRqyWJgUeY-unsplash-scaled.jpg\",\"keywords\":[\"durability\",\"pillowfight\"],\"articleSection\":[\"C\/C++\",\"High Performance\",\"Tools &amp; SDKs\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/durability-performance-testing-with-sdk-3-0\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/durability-performance-testing-with-sdk-3-0\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/durability-performance-testing-with-sdk-3-0\/\",\"name\":\"Durability Performance Testing With SDK 3.0+ - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/durability-performance-testing-with-sdk-3-0\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/durability-performance-testing-with-sdk-3-0\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/12\/christina-wocintechchat-com-glRqyWJgUeY-unsplash-scaled.jpg\",\"datePublished\":\"2021-12-13T16:00:12+00:00\",\"dateModified\":\"2025-06-14T04:49:43+00:00\",\"description\":\"Learn about performance testing for durable writes with SDK 3.0+ and setting up infrastructure using Couchbase\u2019s cbc-pillowfight.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/durability-performance-testing-with-sdk-3-0\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/durability-performance-testing-with-sdk-3-0\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/durability-performance-testing-with-sdk-3-0\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/12\/christina-wocintechchat-com-glRqyWJgUeY-unsplash-scaled.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/12\/christina-wocintechchat-com-glRqyWJgUeY-unsplash-scaled.jpg\",\"width\":2560,\"height\":1709,\"caption\":\"women in tech\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/durability-performance-testing-with-sdk-3-0\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Durability Performance Testing With SDK 3.0+\"}]},{\"@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\/5b6cdf2c0ffc337f914a4eb5fff2937f\",\"name\":\"james.powenski\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/e45dcba7caaaefe99434ad0a75964282\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/james-powenski-couchbase.jpeg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/james-powenski-couchbase.jpeg\",\"caption\":\"james.powenski\"},\"description\":\"Couchbase Senior Solutions Engineer\",\"url\":\"https:\/\/www.couchbase.com\/blog\/author\/james-powenski\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Durability Performance Testing With SDK 3.0+ - The Couchbase Blog","description":"Learn about performance testing for durable writes with SDK 3.0+ and setting up infrastructure using Couchbase\u2019s cbc-pillowfight.","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\/durability-performance-testing-with-sdk-3-0\/","og_locale":"en_US","og_type":"article","og_title":"Durability Performance Testing With SDK 3.0+","og_description":"Learn about performance testing for durable writes with SDK 3.0+ and setting up infrastructure using Couchbase\u2019s cbc-pillowfight.","og_url":"https:\/\/www.couchbase.com\/blog\/durability-performance-testing-with-sdk-3-0\/","og_site_name":"The Couchbase Blog","article_published_time":"2021-12-13T16:00:12+00:00","article_modified_time":"2025-06-14T04:49:43+00:00","og_image":[{"width":2560,"height":1709,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/12\/christina-wocintechchat-com-glRqyWJgUeY-unsplash-scaled.jpg","type":"image\/jpeg"}],"author":"James Powenski, Couchbase Senior Solutions Engineer","twitter_card":"summary_large_image","twitter_misc":{"Written by":"James Powenski, Couchbase Senior Solutions Engineer","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/durability-performance-testing-with-sdk-3-0\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/durability-performance-testing-with-sdk-3-0\/"},"author":{"name":"james.powenski","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/5b6cdf2c0ffc337f914a4eb5fff2937f"},"headline":"Durability Performance Testing With SDK 3.0+","datePublished":"2021-12-13T16:00:12+00:00","dateModified":"2025-06-14T04:49:43+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/durability-performance-testing-with-sdk-3-0\/"},"wordCount":1707,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/durability-performance-testing-with-sdk-3-0\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/12\/christina-wocintechchat-com-glRqyWJgUeY-unsplash-scaled.jpg","keywords":["durability","pillowfight"],"articleSection":["C\/C++","High Performance","Tools &amp; SDKs"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/durability-performance-testing-with-sdk-3-0\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/durability-performance-testing-with-sdk-3-0\/","url":"https:\/\/www.couchbase.com\/blog\/durability-performance-testing-with-sdk-3-0\/","name":"Durability Performance Testing With SDK 3.0+ - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/durability-performance-testing-with-sdk-3-0\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/durability-performance-testing-with-sdk-3-0\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/12\/christina-wocintechchat-com-glRqyWJgUeY-unsplash-scaled.jpg","datePublished":"2021-12-13T16:00:12+00:00","dateModified":"2025-06-14T04:49:43+00:00","description":"Learn about performance testing for durable writes with SDK 3.0+ and setting up infrastructure using Couchbase\u2019s cbc-pillowfight.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/durability-performance-testing-with-sdk-3-0\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/durability-performance-testing-with-sdk-3-0\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/durability-performance-testing-with-sdk-3-0\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/12\/christina-wocintechchat-com-glRqyWJgUeY-unsplash-scaled.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/12\/christina-wocintechchat-com-glRqyWJgUeY-unsplash-scaled.jpg","width":2560,"height":1709,"caption":"women in tech"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/durability-performance-testing-with-sdk-3-0\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Durability Performance Testing With SDK 3.0+"}]},{"@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\/5b6cdf2c0ffc337f914a4eb5fff2937f","name":"james.powenski","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/e45dcba7caaaefe99434ad0a75964282","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/james-powenski-couchbase.jpeg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/james-powenski-couchbase.jpeg","caption":"james.powenski"},"description":"Couchbase Senior Solutions Engineer","url":"https:\/\/www.couchbase.com\/blog\/author\/james-powenski\/"}]}},"authors":[{"term_id":9217,"user_id":77552,"is_guest":0,"slug":"james-powenski","display_name":"James Powenski, Couchbase Senior Solutions Engineer","avatar_url":{"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/james-powenski-couchbase.jpeg","url2x":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/06\/james-powenski-couchbase.jpeg"},"author_category":"","last_name":"Powenski","first_name":"James","job_title":"","user_url":"","description":"Couchbase Senior Solutions Engineer"}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/12561","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\/77552"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=12561"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/12561\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/12577"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=12561"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=12561"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=12561"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=12561"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}