C#如何在Cassandra表中插入大量数据

亲爱的

我正在尝试使用C#应用程序在Cassandra数据库中插入约10万行。

要达到这个目的,我使用了nuget:

https://www.nuget.org/packages/CassandraCSharpDriver/

我已经在笔记本电脑上本地安装了Cassandra(i5、32GB RAM,Windows 10)。

我的Cassandra的设置为默认设置:

var cluster = Cluster.Builder()
                                 .AddContactPoints(CassandracontactPoint)
                                 .WithPort(CassandraPort)
                                 .WithLoadBalancingPolicy(new DCAwareRoundRobinPolicy("datacenter1"))
                                 .WithAuthProvider(new PlainTextAuthProvider(username,Password))
                                 .Build();

Cassandra表如下:

            session.Execute("DROP KEYSPACE IF EXISTS eventstore");
            session.Execute("CREATE KEYSPACE eventstoreWITH REPLICATION = { 'class' : 'NetworkTopologyStrategy','datacenter1' : 1 };");

            session.Execute(@"
                                CREATE TABLE IF NOT EXISTS eventstore.Event(
                                Id uuid,Data text,Version int,AgregateId uuid,EventIdentity uuid,Date timestamp,PRIMARY KEY (AgregateId,Version)
                                ) WITH CLUSTERING ORDER BY (Version ASC)");

要插入事件,我使用以下代码:

events变量包含3秒内插入的2000个事件。

            var tasks = events.Select(async @event =>
            {
                await mapper.InsertAsync(@event);
            });

            await Task.WhenAll(tasks);

目前,此解决方案的性能对于2000个事件而言约为3秒。 可以更快地插入数据??

hrslhjbgfdk 回答:C#如何在Cassandra表中插入大量数据

您可以使用多种技术来发送稳定的执行流,同时还限制并发级别。

驱动程序存储库中有一个示例:https://github.com/datastax/csharp-driver/blob/master/examples/ConcurrentExecutions/ExecuteInLoop/Program.cs

DataStax驱动程序的开发人员指南中还有一个主题:https://docs.datastax.com/en/devapp/doc/devapp/driverManagingConcurrency.html

  

并行提交多个请求时,这些请求在以下三个级别之一排队:在驱动程序端,网络堆栈或服务器端。这些级别上的过多排队会影响每个操作完成的总时间。调整并发级别或并发请求数,以减少排队数量并获得高吞吐量和低延迟。

本文链接:https://www.f2er.com/3138020.html

大家都在问