Ist UPSertasync in Couchbase wirklich asynchron?C#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Ist UPSertasync in Couchbase wirklich asynchron?

Post by Anonymous »

Ich habe versucht, einige Dokumente mit C#in Couchbase zu verbessern. Hier ist mein (sehr einfacher) Code. < /P>

Code: Select all

var cluster = await Cluster.ConnectAsync("127.0.0.1", "Admin", "*****");
var bucket = await cluster.BucketAsync("Embedding");
var scope = await bucket.ScopeAsync("Testing");
var collection = await scope.CollectionAsync("Testing");

int i = 0;

Stopwatch stopwatch = Stopwatch.StartNew();

while (i < 10000)
{
string Id = "my-document-" + i;

var input = new { Name = "Ted", Number = i };

collection.UpsertAsync(Id,input);

i++;
}

stopwatch.Stop();

Console.WriteLine($"Complete in {stopwatch.ElapsedMilliseconds / 1000.00} seconds");
< /code>
so erhöht es einfach 10000 Dokumente dieser einfachen Form. Ich kann nicht glauben, dass es nur rund 150 Dokumente pro Sekunde ausführt. Mein Teamkollege sagte, dass dies völlig inakzeptabel sei, er schrieb einen Java -Code mit der offiziellen Couchbase SDK, und es dauerte nur 300 ms in upsering 10000 Dokumenten.docker run -d --name db -p 8091-8096:8091-8096 -p 11210-11211:11210-11211 couchbase
< /code>
Und dies wird von der offiziellen Couchbase -Website vorgeschlagen. Ich ziehe nicht von einer seltsamen Quelle. Ich benutze i5-8250u CPU zusammen mit 12,0 GB RAM. Ich denke, das ist viel zu ausreichend, um diese einfachen Dokumente zu verbessern. Was für ein Zufall ist, dass mein Teamkollege, als mein Teamkollege die asynchronisierte Version in seinem Java-Code entfernte, 4 Sekunden dauerte, bis das vervollständigte, dass der Upsertasync in C# jetzt nicht wie eine asynchrone Aufgabe verhalten kann. Fragen: 

  Obwohl mein alter Laptop (I5-8250U, 12,0 GB RAM) unterscheidet als die neue (i5-1135g7, 32,0 GB RAM), also kann die Geschwindigkeit von upserting dokumenten wie 150/1s und 10000/6S? Upsertasync in C# Wirklich asynchron? Seine Geschwindigkeit verhält sich dem nicht asynchronischen Upsert in Java sehr ähnlich wie das, was mein Teamkollege mir gezeigt hat.package com.ecom.demo.couchbase;

import com.couchbase.client.java.*;
import com.couchbase.client.java.kv.*;
import com.couchbase.client.java.json.*;
import com.couchbase.client.java.query.*;
import reactor.core.publisher.Mono;

import java.time.Duration;
import java.util.List;
import java.util.stream.IntStream;

public class StartUsing {
instance and credentials.
static String connectionString = "couchbase://192.168.11.11";
static String username = "Administrator";
static String password = "*****";
static String bucketName = "*****";

public static void main(String...  args) throws InterruptedException {
Cluster cluster = Cluster.connect(
connectionString,
ClusterOptions.clusterOptions(username, password).environment(env -> {
})
);

Bucket bucket = cluster.bucket(bucketName);
bucket.waitUntilReady(Duration.ofSeconds(10));

Scope scope = bucket.scope("test");
Collection collection = scope.collection("data");
ReactiveCollection reactiveCollection = collection.reactive();

System.out.println("connected");

int count = 10_000;

sync(count, collection);

//async(count, reactiveCollection);
}

static void sync(int count, Collection collection) {

long start = System.currentTimeMillis();

for (int i=1; i {
String id = "my-document-" + i;
JsonObject doc = JsonObject.create()
.put("name", "mike")
.put("age", i);
return reactiveCollection.upsert(id, doc)
.doOnError(error -> System.err.println("Upsert failed: " + error));
})
.toList();

Mono.when(upsertTasks)
.doOnTerminate(() -> {
long end = System.currentTimeMillis();
System.out.println("Total time (ms): " + (end - start));
})
.block();

long end = System.currentTimeMillis();

System.out.println(end - start);
}
}
< /code>
Geschwindigkeitstest auf meinem neueren Laptop (32 GB eins) mit Stopwatch genau wie im C# Code: < /p>
1 document = 0.022 seconds,
10 documents = 0.03 seconds,
100 documents = 0.074 seconds,
1000 documents = 0.412 seconds,
10000 documents = 5.713 seconds,
100000 documents = 55.072 seconds
< /code>
unten teste ich auf meinem 32 -GB -Laptop mit Java: < /p>
package com.ecom.demo.couchbase;

import com.couchbase.client.java.*;
import com.couchbase.client.java.kv.*;
import com.couchbase.client.java.json.*;
import com.couchbase.client.java.query.*;
import reactor.core.publisher.Mono;

import java.time.Duration;
import java.util.List;
import java.util.stream.IntStream;

public class StartUsing {

static String connectionString = "127.0.0.1";
static String username = "Administrator";
static String password = "*****";
static String bucketName = "Embedding";

public static void main(String...  args) throws InterruptedException {
Cluster cluster = Cluster.connect(
connectionString,
ClusterOptions.clusterOptions(username, password).environment(env -> {
})
);

Bucket bucket = cluster.bucket(bucketName);
bucket.waitUntilReady(Duration.ofSeconds(10));

// get a user-defined collection reference
Scope scope = bucket.scope("Testing");
Collection collection = scope.collection("Testing");
ReactiveCollection reactiveCollection = collection.reactive();

System.out.println("connected");

int count = 10_000;

sync(count, collection);

//async(count, reactiveCollection);

}

static void sync(int count, Collection collection) {

long start = System.currentTimeMillis();

for (int i=1; i {
String id = "my-document-" + i;
JsonObject doc = JsonObject.create()
.put("Name", "Ted")
.put("Number", i);
return reactiveCollection.upsert(id, doc)
.doOnError(error -> System.err.println("Upsert failed: " + error));
})
.toList();

Mono.when(upsertTasks)
.doOnTerminate(() -> {
long end = System.currentTimeMillis();
System.out.println("Total time (ms): " + (end - start));
})
.block();

long end = System.currentTimeMillis();

System.out.println(end - start);
}
}
Für 10000 Dokumente dauerte die Synchronisation 3,4 Sekunden und der Async dauerte 1,62 Sekunden. /> Wie von Amos angegeben, habe ich auch versucht, < /p>

Code: Select all

Stopwatch stopwatch = Stopwatch.StartNew();

int i = 0;

var tasks = new Task[10000];

while (i < 10000)
{
string Id = "my-document-" + i;

var input = new { Name = "Ted", Number = i };

tasks[i] = collection.UpsertAsync(Id, input);

i++;
}

Task.WaitAll(tasks);

stopwatch.Stop();
Es dauerte 6,55 Sekunden.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post