2011-06-24 22 views
3

我正在開發一個項目,其中一些客戶端有互聯網連接問題。脫機同步(性能UUID作爲主鍵)

當互聯網連接不起作用時,我們將信息存儲在位於客戶端PC的數據庫中。 當我們再次連接時,我們將本地數據庫與中央數據庫同步。

爲避免2個數據庫之間記錄ID發生衝突,我們將使用UUID [char(36)]而不是自動增量。

數據庫是Mysql與InnoDB引擎。

我的問題是這會影響選擇,連接等的性能嗎? 我們應該使用varbinary(16)而不是char(36)來提高性能嗎?

注意:我們已經有一個現有的數據庫與4 Go數據 我們也接受其他建議來解決這個離線/在線問題。

感謝

回答

2

既然你沒有說的是正在使用的數據庫引擎(MyISAM數據或InnoDB的),那麼它很難說有什麼寓意表現的幅度。

但是,爲了簡化故事 - 是的,對於更大的數據集會有性能影響。 原因是,您需要36個字節的主鍵索引與4(8如果bigint)字節相反。

我會給你一個提示你如何避免衝突:

首先是要有不同的自動增量上的數據庫偏移。如果你有2個數據庫,你會在一個甚至另一個上產生自動增量。

二是有複合主鍵。如果將主鍵定義爲PRIMARY KEY(id, server_id),那麼如果將數據複製到中央數據庫中,則不會發生任何衝突。 你也會知道它來自哪裏。 缺點是您需要爲每個查詢提供server_id。

+0

正在使用數據庫引擎InnoDB –

+0

可以肯定的是數據庫的性能會隨着時間的推移而下降。您正在使用更多數據來存儲內容。然而,這個數量是難以猜測的。沒有人可以告訴你「是的,如果你使用UUID(),你的性能會降低30%」,如果你決定保留UUID()作爲主鍵,你只需要自己測量一下。 –