亲爱的
我正在尝试使用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秒。 可以更快地插入数据??
答案 0 :(得分:3)
您可以使用多种技术来发送稳定的执行流,同时还限制并发级别。
驱动程序存储库中有一个示例:https://github.com/datastax/csharp-driver/blob/master/examples/ConcurrentExecutions/ExecuteInLoop/Program.cs
DataStax驱动程序的开发人员指南中还有一个主题:https://docs.datastax.com/en/devapp/doc/devapp/driverManagingConcurrency.html
并行提交多个请求时,这些请求在以下三个级别之一排队:在驱动程序端,网络堆栈或服务器端。这些级别上的过多排队会影响每个操作完成的总时间。调整并发级别或并发请求数,以减少排队数量并获得高吞吐量和低延迟。