2010-10-03 70 views
0

隨着現在數據被高速緩存,數據庫只有在有新數據時才被訪問(然後數據被緩存了lol),使用Int主鍵與UUID甚至有真正的性能差異主鍵。UUID主鍵和Memcached

例如,讓我們假設建立NetFlix。一部新電影被添加到數據庫中,並且電影列表和相關數據將被放入緩存中。

用戶搜索電影(搜索服務器處理此操作),然後找到列表,單擊它並從緩存中檢索數據。

在整個過程中,數據庫從不讀取。

你的想法是什麼?

回答

1

我是一個類似於Netflix的主要站點的架構師,並且您在大多數情況下都是正確的,幾乎所有非事務性數據都被緩存,因此優化數據庫的廣告並不總是有回報。我們所有的電影名稱都是通過重複性任務預先加載到memcached中的,因此對於系統的庫部分,數據庫永遠不會被實際的客戶擊中。

儘管如此,我們在設計數據庫結構和查詢時並不感到疲憊,因爲我們希望預加載器儘可能快速和高效地運行。

+0

嘿克里斯,有什麼方法可以讓我與您聯繫。我對你的電影流媒體服務感興趣。 – 2011-02-23 23:55:07

0

我贊成主鍵使用UUID(實際爲GuidComb)。誠然,它確實有些瑕疵,但隨着64位RDBMS無處不在,內存相當便宜,我認爲這些優勢遠遠超過了這些缺點。不需要等到你插入來知道你的PK將是我的最愛。

0

我支持克里斯的回答,但我也想指出,如果試圖一次加載很多密鑰到內存中,那麼你會用很多內存。

比較:

6ba7b810-9dad-11d1-80b4-00c04fd430c8 - 37個字節,或38,如果\ 0終止

凡作爲一個64位的整數只有8個字節。並且可能可以存儲在單個寄存器中。

把這個提升到下一個層次。

假設你想裝入100,000個ID到RAM中。

這將是800,000字節(64位整數)或3,800,000字節!

更新:10月8日,2010年

此外,驗證一個UUID字符串是有點難度,你必須使用正則表達式。

但是,驗證整數很簡單。 intval()php或.to_i ruby​​和int()for perl。

這提高了安全性相對於其他人發送您懷疑數據(網絡機器人)