【发布时间】:2016-01-22 23:24:27
【问题描述】:
我正在构建应用程序来测量 NoSQL 数据库的性能,但在 Cassandra 数据库中批量插入大量数据时遇到了问题。
当我尝试使用 DataStax C# 驱动程序批量插入超过 1000 条记录时,我收到了 AggregateException。
这是我的数据模型:
public Guid Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public int Year { get; set; }
public string Genres { get; set; }
public int Rating { get; set; }
public string OriginalLanguage { get; set; }
public string ProductionCountry { get; set; }
public int VotingsNumber { get; set; }
这是我的代码:
private string InsertData(ISession session, List<Movie> moviesList)
{
var table = session.GetTable<Movie>();
table.CreateIfNotExists();
var batch = session.CreateBatch();
foreach (var record in moviesList)
{
batch.Append(table.Insert(record));
}
Stopwatch watch = new Stopwatch();
watch.Start();
batch.Execute();
watch.Stop();
return watch.ElapsedMilliseconds.ToString();
}
有人可以向我解释我做错了什么吗?
【问题讨论】:
-
AggregateException里面是什么?您确定要同时批处理 >1000 行吗?那是你真正的用例吗?批处理通常很慢,最好尽可能避免,但这是另一个问题。 -
@kha 是的,我确定。那么,尽可能快地将大型集合(大约 1000000 条记录)插入 Cassandra 数据库有什么不同的方法?
-
Cassandra 批处理不涉及多线程(或快速)。您将 SQL 批量插入语句与 c* 批处理混淆了。 C* 批处理旨在重现“事务”(此处使用松散的词,因为它与 SQL 的含义不同)。他们绝对不是一回事。如果您想将大型集合插入 cassandra,您可以使用其驱动程序中的各种异步执行模式。
-
好的,我试试。感谢您的解释。
标签: c# cassandra datastax batch-insert