【问题标题】:Cassandra batch insert using DataStax c# driverCassandra 使用 DataStax c# 驱动程序批量插入
【发布时间】: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


【解决方案1】:

批处理语句不适用于 Cassandra 中的批量加载,C# faq Datastax 中明确建议批量大小为数十。

如果您想在您的案例中插入大量数据,您应该regular or async statements 这样做。

【讨论】:

  • 加我一份。使用批处理语句背后的“为什么”是使用 Cassandra 的新开发人员最常见的困惑点之一。它是为了原子性,而不是性能。
猜你喜欢
  • 2015-05-18
  • 2015-08-08
  • 2019-04-18
  • 2014-12-03
  • 1970-01-01
  • 2016-02-27
  • 2017-01-20
  • 2014-03-27
  • 2017-08-04
相关资源
最近更新 更多