A newer version of this documentation is available.

View Latest

Scan Consistency Using the .NET SDK with Couchbase Server

You can balance performance against consistency in N1QL queries via the Couchbase .NET client and the AtPlus option.

Setting a Scan Consistency, lets you choose between NotBounded (the default), for sharpest performance; RequestPlus, for strongest consistency; and AtPlus, for a good balance between increased performance and completeness of results.

In order to use at_plus, you’ll need to make sure that you explicitly set UseEnhancedDurability to true when setting up your ClientConfiguration:

config.BucketConfigs = new Dictionary<string, BucketConfiguration> {
    {
        "travel-sample", new BucketConfiguration
        {
            UseEnhancedDurability = true
        }
    }
};

In the example below, the N1QL query will wait only for the new document to be indexed.

Setting at_plus consistency
private static void AtPlusExample()
{
    Console.WriteLine("========= AtPlus");

    // get the current count
    var getResult = _bucket.Query<dynamic>("SELECT COUNT(1) as airportCount FROM `travel-sample` WHERE type='airport'")
            .Rows.First();
    Console.WriteLine($"Initial count: {result1.airportCount}");

    // insert a new airport
    var doc = new Document<dynamic>
    {
        Id = "ScanConsistency::airport::" + _random.Next(10000),
        Content = new
        {
            type = "airport"
        }
    };
    var insertResult = _bucket.Insert(doc);

    // get the count again, creating mutation state from insert result
    var state = MutationState.From(insertResult.Document);
    var request = new QueryRequest("SELECT COUNT(1) as airportCount FROM `travel-sample` WHERE type='airport'")
        .ConsistentWith(state);
    var queryResult = _bucket.Query<dynamic>(t).Rows.First();
    Console.WriteLine($"Count after insert with AtPlus: {result2.airportCount}");
}