做电商网站的主键策略
来源:互联网 发布:网络p2p理财 编辑:程序博客网 时间:2024/06/16 09:29
一般最常见的主键策略都是自增
但是为了应对分布式集群环境。数据库自然不能选择自增,否则并发大的时候会出现主键冲突。
一般oracle下选择了sequence的方式,mysql有的会自己设计sequence,有的会用uuid策略。这里对于对外展示的数据表来说,sequence可能不是一个好主意,不管你如何加密,最后都会泄露相关数据信息。所以有些电商互联网公司选择了uuid这个策略。在oracle数据库和5.0版本的mysql应该都支持。
那么我们先看看什么是UUID?简单的说,UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。在UUID的算法中,可能会用到诸如网卡MAC地址,IP,主机名,进程ID等信息以保证其独立性。
如果你的MySQL版本不太老的话,键入 SELECT UUID(); 输出的就是UUID,如下:
mysql> select uuid();
+--------------------------------------+
| uuid() |
+--------------------------------------+
| 54b4c01f-dce0-102a-a4e0-462c07a00c5e |
+--------------------------------------+
现在大家应该对UUID有一个比较直观的认识了,我们来看看UUID的优缺点分别是什么。
优点:
能够保证独立性,程序可以在不同的数据库间迁移,效果不受影响。
保证生成的ID不仅是表独立的,而且是库独立的,这点在你想切分数据库的时候尤为重要。
缺点:
比较占地方,和INT类型相比,存储一个UUID要花费更多的空间。
使用UUID后,URL显得冗长,不够友好。
下面针对上述UUID的缺点说说我的看法,比较占地方这个缺点我不是很在乎,现在最不值钱的就是硬盘了,略过此条缺点无妨,但需要注意的一点数据在索引的时候效率会随着体积的增加而降低。至于说使用UUID后,URL显得不友好,我觉得这多少是你的INT情结造成的惯性思维,其实,和INT类型相比,UUID才是最自然的主键选择,注意,我这里用的是自然这个形容词,仔细体会一下你能理解我的意思。另外,很多时候,URL本身就不需要友好,比如,一个电子商务网站,按照INT友好的URL说法,她的订单URL大概是下面这个形式的:/order.action/id/123,我要说明的是,这样是很友好,但是有些太友好了,友好的甚至不安全,比如说,我早晨下一个订单,发现URL是/order.php/id/1000,晚上再下一个订单发现URL是/order.php/id/2000,那么我就可以估计出此网站一天的订单数大致是1000左右,甚至能大体估计出它的销售额,而这些数据往往都是重要的商业秘密。使用UUID就没有这个顾虑。
同理oracle获取uuid的方法如下:
select sys_guid() from dual
- 做电商网站的主键策略
- 主键的生成策略
- 主键的生成策略
- 主键的生成策略
- hibernate的主键策略
- hibernate主键的生成策略
- Spring的主键生成策略
- Hibernate的主键生成策略
- hibernate的主键生成策略
- Hibernate的主键生成策略
- hibernate的主键生成策略
- 自定义主键的生成策略
- JPA的主键产生策略
- hibernate的主键生成策略
- Hibernate主键的增长策略
- 高效透明的主键策略
- JPA的主键产生策略
- hibernate的主键生成策略
- 开始学习Ext4.1,先转一个
- Socket编程指南及示例程序
- 设置光标位置
- nginx 源码学习笔记(十九)—— nginx启动过程函数调用图
- 如何写出好的代码
- 做电商网站的主键策略
- 【搜索】最少转弯问题(初级版)
- OpenGL 学习笔记(一)
- SQLSERVER 2005 递归查询
- 从ASP.NET应用程序生存周期谈起(3)
- Listview动态加载网络数据Activity大概实现
- 如何在CSDN博客添加友情链接
- RTF模板开发
- 更改记事本(notepad)默认编码为Unicode或UTF-8的方法