2013-08-27 56 views
2

我正在使用Cassandra的C#驅動程序與多線程處理。 起初,我嘗試創建一個連接並執行命令,然後在完成工作後關閉連接。但它似乎不適合我,有時它有一個例外,沒有可用的主機。使用Cassandra C#驅動程序與多線程

因此,我改爲使用靜態連接。它似乎也起作用。 但是當線程工作得太快時,它又被打破了。我必須放置一些Thread.Sleep 1秒鐘,然後才能正常工作。

而在這個靜態解決方案中,我嘗試使用異步進程BeginExecute,它對我也不適用,異常沒有主機可用。

因此,任何人都有更好的想法或更好的實現與Cassandra c#驅動程序的多線程處理,如果您可以共享,將不勝感激。

預先感謝您。

乾杯, 健

+0

,它將如果你發佈一些代碼 – Ehsan

+0

其中C#的客戶高度讚賞??? Datastax C#驅動程序或FluentCandandra。默認情況下,Cassandra Client是併發的。默認限制是64. – abhi

+0

它是Datastax C#驅動程序。 – n4kin

回答

1

CassandraSession只能有一次一個連接。現在我想到它可能不是線程安全的。但連接池是線程安全的,所以如果你使用,你將永遠有一個高可用性連接

0
  1. 確保您的設置是滿足connection requirements

  2. C#的司機一定要在多工作 - 線程環境(1個羣集對象,1個會話對象/密鑰空間)

  3. 很難說爲什麼在看不到任何代碼的情況下看到NoHostAvailable異常。

+0

1羣集對象,1會話對象/密鑰空間 這意味着這1個羣集對象,1會話對象將服務於所有線程更新/選擇相同的密鑰空間,對嗎? – n4kin

1

如果使用異步方法,它看起來就像是:

Statement sta=new SimpleStatement("Select * from XXX where XXX;"); 
session.ExecutAsync(sta); 
+0

您是如何解決「異常無主機可用」的。在第三段? –

+0

我在多線程中使用signle-pattern。我得到一個會話,並使用session.ExecutAsync或mapper.FetchAsync – David

相關問題