【发布时间】:2015-08-08 03:32:42
【问题描述】:
我一直在尝试使用 datastax cassandra c# 驱动程序使用批处理将数据插入 cassandra 键空间。尝试批量插入 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.Mapper 命名空间。 映射器类代码:
[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; }
}
【问题讨论】:
-
当您执行此代码时,您是否在
cf_Data表中获得了准确的1 条记录?通过在cqlsh中运行select count(*) from cf_Data来检查这一点。如何生成id:Guid Id? -
如果您出于性能原因这样做,您可能会doing this wrong。一个接一个地插入记录通常会更快,因为插入可以直接命中集群中的多个节点。在批量插入的情况下,请求将命中单个协调节点,然后将写入重定向到其他节点。
-
另一个关于性能的说明;但您不应该在生产系统上使用 ALLOW FILTERING。
-
@oleksii:没有得到任何行。