Cassandra CSharp驱动程序批处理语句失败

时间:2017-11-01 14:31:17

标签: c# cassandra

我正在尝试使用批处理语句而不是单个绑定的插入语句 即使这是一个非常小的变化,但这也失败了,我不是在寻找错误处理的好方法,也不知道哪个部分是问题。
一个问题是,Java API有一个getStatements方法C#驱动程序中缺少 伪代码如下所示:

private BatchStatement batchStatement = new BatchStatement();
private const int blockingFactor = 5;
private int i = 0;
private object locker = new object();
public CassandraBufferHandler()
{
    Cluster = Cluster.Builder().AddContactPoints("localhost").Build();
    Session = Cluster.Connect("my_keyspace");
    InsertStatement = Session.Prepare("Insert into ticks (instrumentcode, timestamp, type, exchange, price, volume) values(?,?,?,?,?,?) if not exists;");
}


public void OnEvent(TickCassandra tickCassandra, long sequence, bool endOfBatch)
{
    try
    {
            lock (locker)
                batchStatement.Add(
                InsertStatement.Bind(tickCassandra.Instrumentcode,
                                     tickCassandra.Timestamp,
                                     tickCassandra.Type,
                                     tickCassandra.Exchange,
                                     tickCassandra.Price,
                                     tickCassandra.Volume));
            if (i++ % blockingFactor == 0)
            {
                BatchStatement tmp;
                lock (locker)
                {
                    tmp = batchStatement;
                    tmp.EnableTracing();
                    batchStatement = new BatchStatement();
                }
                Session.ExecuteAsync(tmp).ContinueWith(t =>
                {
                    if (t.Exception != null)
                    {
                        ErrorCount++;
                        Log.Error(t.Exception.Message + tmp.ToString());
                    }
                    else
                        InsertCount++;
                });
            }                
    }
    catch (Exception ex)
    {
        Log.Error("Exception:" + ex);
        Active = false;
    }

0 个答案:

没有答案