做电商网站的主键策略
一般最常見(jiàn)的主鍵策略都是自增
但是為了應(yīng)對(duì)分布式集群環(huán)境。數(shù)據(jù)庫(kù)自然不能選擇自增,否則并發(fā)大的時(shí)候會(huì)出現(xiàn)主鍵沖突。
一般oracle下選擇了sequence的方式,mysql有的會(huì)自己設(shè)計(jì)sequence,有的會(huì)用uuid策略。這里對(duì)于對(duì)外展示的數(shù)據(jù)表來(lái)說(shuō),sequence可能不是一個(gè)好主意,不管你如何加密,最后都會(huì)泄露相關(guān)數(shù)據(jù)信息。所以有些電商互聯(lián)網(wǎng)公司選擇了uuid這個(gè)策略。在oracle數(shù)據(jù)庫(kù)和5.0版本的mysql應(yīng)該都支持。
那么我們先看看什么是UUID?簡(jiǎn)單的說(shuō),UUID是指在一臺(tái)機(jī)器上生成的數(shù)字,它保證對(duì)在同一時(shí)空中的所有機(jī)器都是唯一的。在UUID的算法中,可能會(huì)用到諸如網(wǎng)卡MAC地址,IP,主機(jī)名,進(jìn)程ID等信息以保證其獨(dú)立性。
如果你的MySQL版本不太老的話(huà),鍵入 SELECT UUID(); 輸出的就是UUID,如下:
mysql> select uuid();
+--------------------------------------+
| uuid()?????????????????????????????? |
+--------------------------------------+
| 54b4c01f-dce0-102a-a4e0-462c07a00c5e |
+--------------------------------------+
現(xiàn)在大家應(yīng)該對(duì)UUID有一個(gè)比較直觀的認(rèn)識(shí)了,我們來(lái)看看UUID的優(yōu)缺點(diǎn)分別是什么。
優(yōu)點(diǎn):
能夠保證獨(dú)立性,程序可以在不同的數(shù)據(jù)庫(kù)間遷移,效果不受影響。
保證生成的ID不僅是表獨(dú)立的,而且是庫(kù)獨(dú)立的,這點(diǎn)在你想切分?jǐn)?shù)據(jù)庫(kù)的時(shí)候尤為重要。
缺點(diǎn):
比較占地方,和INT類(lèi)型相比,存儲(chǔ)一個(gè)UUID要花費(fèi)更多的空間。
使用UUID后,URL顯得冗長(zhǎng),不夠友好。
下面針對(duì)上述UUID的缺點(diǎn)說(shuō)說(shuō)我的看法,比較占地方這個(gè)缺點(diǎn)我不是很在乎,現(xiàn)在最不值錢(qián)的就是硬盤(pán)了,略過(guò)此條缺點(diǎn)無(wú)妨,但需要注意的一點(diǎn)數(shù)據(jù)在索引的時(shí)候效率會(huì)隨著體積的增加而降低。至于說(shuō)使用UUID后,URL顯得不友好,我覺(jué)得這多少是你的INT情結(jié)造成的慣性思維,其實(shí),和INT類(lèi)型相比,UUID才是最自然的主鍵選擇,注意,我這里用的是自然這個(gè)形容詞,仔細(xì)體會(huì)一下你能理解我的意思。另外,很多時(shí)候,URL本身就不需要友好,比如,一個(gè)電子商務(wù)網(wǎng)站,按照INT友好的URL說(shuō)法,她的訂單URL大概是下面這個(gè)形式的:/order.action/id/123,我要說(shuō)明的是,這樣是很友好,但是有些太友好了,友好的甚至不安全,比如說(shuō),我早晨下一個(gè)訂單,發(fā)現(xiàn)URL是/order.php/id/1000,晚上再下一個(gè)訂單發(fā)現(xiàn)URL是/order.php/id/2000,那么我就可以估計(jì)出此網(wǎng)站一天的訂單數(shù)大致是1000左右,甚至能大體估計(jì)出它的銷(xiāo)售額,而這些數(shù)據(jù)往往都是重要的商業(yè)秘密。使用UUID就沒(méi)有這個(gè)顧慮。
同理oracle獲取uuid的方法如下:
select sys_guid() from dual
總結(jié)
以上是生活随笔為你收集整理的做电商网站的主键策略的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Tableau实用小技巧之——红绿色字体
- 下一篇: CentOS6云服务器磁盘扩容方案