2016-05-11 13 views
1

現在、私は2つのコアと4GBのRAMを搭載したマシンで作業しています。私はテーブルにデータを一括して挿入する簡単なC#プログラムを作った(100万行)。コードを実行するたびに、テーブルに約250.000行しか挿入されません。デュアルコアマシンのCassandra

これはハードウェアの問題です。なぜなら、このコードを8つのコアと16GBのRAMを持つ別のマシンで使用すると、問題なく完全にうまく動作し、100万行も挿入されるからです。

私はCassandraからもC#からもエラーはありません。なぜなら、それらをすべて挿入しないからです。

Cassandraの設定を変更する(ヒープスペースを増やす、またはRAMを増やすなど)、Cassandraは行の挿入を停止するだけでなく、実際に挿入を終了することはできますか?

private void bt_cluster_Click(object sender, EventArgs e) 
    { 
     Connect(); //Cluster.Builder and connecting to a cluster. 
     List<Meter> meterList = fillList(); // filling a list with meter ojects 
     var statement = session.Prepare("insert into meters (ID, ConnectionMeterID, ConnectionMeterRevision, PeriodStart, PeriodEnd, Volume1, Volume2, Volume3, Volume4, Volume5, Volume6, Volume7, Volume8, DataTypeID, FileID, Remarks, QualityScore, LocationID, Removed) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"); 
     var tasks = new List<Task>(); 
     foreach (Meter m in meterList) 
     { 

      var bind = statement.Bind(m.ID, m.ConnectionMeterID, m.ConnectionMeterRevision, m.date1, m.date2, m.volume1, m.volume2, m.volume3, m.volume4, m.volume5, m.volume6, m.volume7, m.volume8, m.DataTypeID, m.FileID, m.Remarks, m.QualityScore, m.LocationID, m.Removed); 
      var resultSetFuture = session.ExecuteAsync(bind); 
      tasks.Add(resultSetFuture); 
     } 
     CloseConnection();//shutdown the cluster 
    } 

答えて

0

私はあなたが非同期タスクを待っていない疑いがある:それは任意の使用であるが、ここで私はカサンドラのデータベースにデータを挿入するために使用しています(簡単な)コードの場合

わかりません接続を閉じる前に終了してください。

Task.WaitAll(tasks.ToArray());を使用して接続を終了してください。

更新日: このような大きな仕事のために、WaitAllは機能しません。 使用:

foreach(var task in tasks) 
{ 
    task.Wait(); 
} 

または非同期メソッドで

Task.WhenAll(tasks).Wait();はあなただけ使用します。

await Task.WhenAll(tasks);