2013-06-30 40 views
0

我希望創建一個隊列,其中很多計算機將被寫入,但是每臺計算機都會在他的整個生命只有一次寫。你認爲什麼是實現這一目標的最好方法?最佳途徑,一個讀者

我看了一下SQL Server隊列,作爲隊列或服務代理基礎的SQL Server表。

  • SQL Server表:很容易創建,但恐怕性能
  • 服務經紀人:更復雜的基礎設施。看起來你必須在發送者上運行一個服務,並且有一個發送隊列,這對我而言是無用的,因爲他們所有的人都只在他們的整個生活中發送一條消息。

什麼解決辦法是在我的情況是最好的?

回答

0

您不必在每臺計算機上創建服務。 Service Broker對象可以侷限於一個數據庫服務器。例如,如果您有100臺需要刪除消息的計算機,則它們需要一個到數據庫服務器的連接字符串,並執行一個存儲過程來排隊所述消息。
說,它似乎是一個Service Broker隊列將是一個矯枉過正。一張簡單的表格可能就足夠了,或者甚至更好一個MSMSQ(這將消除連接到數據庫的需要)。

0

我們的生產代碼使用表作爲隊列。我們並不需要Service Broker的健壯性,而且我們的所有代碼已經連接到其他資料的數據庫。

我們的代碼並不需要超過每秒幾百交易多了,我已經表明,我們的隊列可以達到每秒10K的交易,所以我的表現還算滿意。

這裏的描述如何設計表用作隊列一個偉大的文章:http://rusanu.com/2010/03/26/using-tables-as-queues/

我不會不首先給它一個讀設計你的表格。

我們公司也在考慮一個涉及Redis的替代隊列策略,它不需要磁盤訪問,因爲我們正在考慮一個需要數十或數十萬次插入的設計,但不一定關心丟失數據在發生故障時發生。如果您需要吞吐量,我也會考慮這些方法。

0

也許是更好的方式轉變,從「幾個作家和一位讀者」整個系統以「一個作家和一個讀者」?我的意思是你可能會提供一些服務(網絡或任何其他),他們會接收寫入請求,並將成爲數據庫中的唯一編寫者。這是一般情況,並有許多標準解決方案。