2010-04-14 94 views
1

我有一個高端架構,每秒接收很多請求(事實上,它可以每毫秒接收很多請求)。該體系結構的設計使得某些控件依賴於爲每個請求分配的某個唯一標識。使用數據庫序列的策略?

要創建這樣的UID,我們使用DB2序列。現在我已經明白這種方法是有缺陷的,因爲使用數據庫代價昂貴,但這樣做是有道理的,因爲這個值也將用於記錄數據庫的信息。

我們的團隊剛剛發現,每次交易的流逝時間增加了近1000%,我們認爲這是因爲順序而發生的。現在我想知道,使用序列將序列化訪問我的應用程序?由於他們必須保證增量以他們應該的方式工作,他們必須,對吧?

那麼,使用序列時有更好的策略嗎?請假定除了依賴數據庫之外,我沒有其他方式獲得唯一的ID。

回答

1

使用序列必然會序列化您的應用程序。但是,這些事情被優化以具有最小化影響。當然,我們總是可以通過無用的方式宣佈事情來彌補自己。那麼,這個序列是如何定義的?它有一個大的CACHE?你有沒有指定NO ORDER?

說到這....

,從你的問題躍起出來的東西是不是在大膽的詞組,它是句之前:

「我的團隊剛剛發現 每次交易的經過時間幾乎增加 ,我們假設發生 因爲 序列。「

我們都知道ASSUME是怎麼做的(在這種情況下不是這樣,因爲我什麼也不假)。最近的變化是否影響到這個序列?如果沒有,爲什麼你們都認爲這是導致業績突然下降1000%的原因?不要假設(即猜測)或許收集一些證據會更好。那個時候正在某個地方,你需要發現哪裏。如果在代碼的某處存在競爭條件,或者正在刻錄CPU等待鎖定,或者存在互連不良(正在減慢寫入SAN等)等情況,則調整序列毫無意義。

是否有任何記錄或跟蹤已打開,或者您可以打開?您能否在其他環境中重現這種放緩,例如開發或系統測試?這可能是序列的責任。至少可以讓你知道自己正在解決真正的問題,從而有信心地完成重新設計任務。

+0

有一個團隊專門對應用程序進行性能分析。我們從數據庫分析和環境分析中收集了一些數據。但是,我們無法確定是否引入了導致巨大影響的序列,因爲分析工具有所限制。不過,我會盡量確保時間增加是由於序列造成的。關於序列參數,應該在這樣的並行應用程序中調整哪些參數? – 2010-04-14 18:33:46

0

獲取可能相關ID的一種可能方法是使用UUID/GUID。雖然我不知道如何產生這些價值,但絕對不會遇到您擔心的序列化問題。