Datastax Cassandra c#驱动程序不通过批处理插入数据

本文关键字:批处理 插入 数据 Cassandra 驱动程序 Datastax | 更新日期: 2023-09-27 17:50:48

我一直在尝试使用datastax cassandra c#驱动程序使用批处理插入数据到cassandra keyspace .尝试在批处理中插入100行。代码工作正常,但当我检查列家族没有数据。请建议为什么数据插入不工作,如果有人知道?如果有异常,为什么catch不能得到那个异常?通过cqlsh命令行插入数据没有问题。

private static void InsertData(ISession session, List<cf_Data> lsData)
    {
        try
        {
            var table = session.GetTable<cf_Data>();
            table.CreateIfNotExists();
            int count = 0;
            var batch  =session.CreateBatch();;
            foreach (cf_Data val in lsData)
            {
                try
                {
                    if (((count) % 100) == 1)
                    {
                       batch = session.CreateBatch();
                    }
                    batch.Append(table.Insert(val)); 
                    if (count % 100 == 0)
                    {
                        batch.Execute();   
                    }
                }
                catch (Exception)
                {
                    throw;
                }
                count++;
            }
        }
        catch (Exception)
        {
            throw;
        }
    }

用于将c#类映射到Cassandra列族,Cassandra。使用映射器命名空间。映射器类代码:

[AllowFiltering]
[Table("cf_Data ")]
internal class cf_Data 
{
    [PartitionKey]
    public Guid Id { get; set; }
    public DateTimeOffset Rundate { get; set; }
    public DateTimeOffset OtherDate{ get; set; }
    public String StudentFirstName { get; set; }
    public String StudentLastName { get; set; }
}

Datastax Cassandra c#驱动程序不通过批处理插入数据

如果你想执行一个包含一些查询的批处理,你应该调用Batch.Execute()一次。

在你的例子中,它应该是:

var batch = session.CreateBatch();
foreach (var val in lsData) 
{
    batch.Append(table.Insert(val)); 
}
batch.Execute();

也就是说,对于"批量"插入,使用Batch并不是最好的方法。如果只做一次插入,速度会更快。

你应该阅读@oleksii: https://lostechies.com/ryansvihla/2014/08/28/cassandra-batch-loading-without-the-batch-keyword/建议的帖子

您可以阅读Linq组件的DataStax c#驱动程序文档