Является ли upsertasync в Couchbase действительно асинхронным в C#?C#

Место общения программистов C#
Anonymous
 Является ли upsertasync в Couchbase действительно асинхронным в C#?

Сообщение Anonymous »

Я пытался поднять некоторые документы в Couchbase, используя C#. Вот мой (очень простой) код. < /P>
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 = Guid.NewGuid().ToString();

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

collection.UpsertAsync(Id,input);

i++;
}

stopwatch.Stop();

Console.WriteLine($"Complete in {stopwatch.ElapsedMilliseconds / 1000.00} seconds");
< /code>
Так что это просто подчеркивает 10000 документов этой простой формы. Я не могу поверить, что он выполняет всего около 150 документов в секунду. Мой товарищ по команде сказал, что это совершенно неприемлемо, он написал код Java, используя официальный SDK Couchbase, и это потребовалось всего 300 мс на 10000 документов. Я потянул его на < /p>
docker run -d --name db -p 8091-8096:8091-8096 -p 11210-11211:11210-11211 couchbase
< /code>
И это предлагается официальным веб -сайтом Couchbase, я не вытаскиваю из какого -то странного источника. < /p>
Поэтому я начинаю подозревать, что это был мой ноутбук аппаратная проблема. Я использую процессор I5-8250U вместе с 12,0 ГБ оперативной памяти. Я думаю, что это слишком достаточное для повышения этих простых документов. < /P>
Кстати, мой товарищ по команде использует Apple M2 16 ГБ. Необъяснимо, что я перешел на другой ноутбук с более высоким оборудованием (i5-1135G7, 32,0 ГБ оперативной памяти), потребовалось 6 секунд, чтобы заполнить эти 10000 документов. Что связано с тем, что, когда мой товарищ по команде удалил асинхронную версию в своем коде Java, потребовалось 4 секунды, поэтому я теперь подозреваю, что Upsertasync в C# не может вести себя как асинхронная задача. < /P>
Кстати, я замечаю, что нет несинхрочной версии upsert в c#. < /p>
В целом есть два Вопросы: < /p>

[*] Хотя мой старый ноутбук (i5-8250U, 12,0 ГБ оперативной памяти) отличается, чем новый (i5-1135G7, 32,0 ГБ ОЗУ) , так что скорость повышения документов может отличаться как 150/1S и 10000/6S?

Upsertasync в c# действительно асинхронно? Его скорость ведет себя очень похоже на несинхродический подъем в Java, как то, что показал мне мой товарищ по команде. < /P>
< /li>
< /ol>
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 {
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>
Тест на скорость на моем новом ноутбуке (32 ГБ один), используя секундомер, как в коде C#: < /p>
1 document = 0.035 seconds,
10 documents = 0.047 seconds,
100 documents = 0.086 seconds,
1000 documents = 0.753 seconds,
10000 documents = 5.483 seconds,
100000 documents = 64.585 seconds


Подробнее здесь: https://stackoverflow.com/questions/794 ... onous-in-c

Вернуться в «C#»