Today we are releasing a follow up release to 2.1.0 and 2.1.1 that includes support for Multidimensional Scaling (MDS) for Couchbase Server 4.0 Beta and a plethora of bug fixes! In this post i’ll explain what MDS is and why you're going to want to take advantage of it with Couchbase Server 4.0! Note that 2.1.3 is 2.1.2 with one single bug fix; if your using 2.1.2, I highly reccomend you upgrade to 2.1.3!

Multidimensional Scaling (MDS)

Multidimensional scaling is a new feature in Couchbase Server 4 that allows you to both scale your cluster out and up.

Previous to 4.0, the services were scaled homogeneously across the server, now you can specify that specific nodes be say a query node or a data node or an index (or both or all three, lots of options), and then on the nodes where more CPU is needed, those nodes can be scaled up with beefier hardware. On the other hand, if you want to scale your data nodes out on cheaper hardware, you can easily do that as well. It’s a great feature for optimizing your cluster for specific workloads.

In order for applications to take advantage of this, the client has to be aware of which nodes are designated for querying (N1QL) and which nodes are responsible for the services, like key/value CRUD (data nodes). In this release we provide support for MDS by splitting the nodes into specific collections dedicated to a specific task (data, index, query, etc). From an external perspective, there is no difference, however internally only clients that are “service” aware will work with a 4.0 cluster. For backwards compatibility, however, this (and future versions) of the SDK will continue to work with Couchbase Server 3.0 and 2.5.


Bug Fixes for 2.1.3


  • [NCBC-932] – BodyLength is zero when receive buffer tries read from it


Bug Fixes, Tasks, and Improvements in 2.1.2


Technical task

  • [NCBC-901] – Make IServer implementations aware of Services defined by NodesExt
  • [NCBC-902] – Make Server selection “service aware”
  • [NCBC-903] – Ensure k/v requests to memcached buckets use data nodes
  • [NCBC-904] – Return correct error or exception when operation is attempted on node that does support service


  • [NCBC-823] – IndexOutOfRangeException during fail over with .NET SDK 2.0 .NET SDK
  • [NCBC-886] – Couchbase client returning wrong documents
  • [NCBC-895] – BufferAllocator is created per Connection
  • [NCBC-908] – Fix connection leak on Memcached bucket dispose
  • [NCBC-911] – Documentation Bug in IViewQuery.ConnectionTimeout
  • [NCBC-912] – Client tries to deserialize memcached body when it is empty
  • [NCBC-913] – SDK incorrectly states down node heartbeat is 1000seconds
  • [NCBC-917] – Collection modified error during bulk operation
  • [NCBC-918] – Throughput is not restored with rb2out on memcached bucket
  • [NCBC-924] – Port defaults to 0 when NodeExt is not found in cluster map


  • [NCBC-891] – Update Common.Logging to version 3.1
  • [NCBC-899] – Change default value of MaxAcquireIterationCount and add Delay
  • [NCBC-919] – Global connection pool setting for app.config

New Feature

  • [NCBC-833] – Add support for nodesext for n1ql service for CB 4.0 Beta


  • [NCBC-922] – Receiving none(0xffffffff) as response status during failover


How to Get the Couchbase .NET SDK

The SDK is available for download directly, through NuGet, or by cloning and pulling the Github repo:

  • Download the binaries here.
  • The NuGet package can be found here.
  • The Github repo is here.



Posted by Jeff Morris, Senior Software Engineer, Couchbase

Jeff Morris is a Senior Software Engineer at Couchbase. Prior to joining Couchbase, Jeff spent six years at Source Interlink as an Enterprise Web Architect. Jeff is responsible for the development of Couchbase SDKs and how to integrate with N1QL (query language).

Leave a reply