转贴新思路: Guid 和 Int 作为系统编号的取舍
蝈蝈尊(四声).net
http://blog.joycode.com/ghj/archive/2004/11/29/39911.aspx
Guid 和 Int 作为系统编号的取舍
最近一直在做下一代CSDN社区的设计,在帖子编号到底采用Guid,还是自增Int选择的时候,花费了不少心思。
最后的确定的方案是采用Guid。
原因如下:
Guid 虽然在搜索、索引寻找的时候,速度肯定比不上Int型字段。
但是,如果帖子编号采用Guid,在提交到中间层之前,就可以知道要增加的这个帖子编号是那个。
而如果使用自增Int,如果中间层的应用逻辑需要在增加到数据库之前执行,那么我要做多少费时的操作才可以知道要新增的这个帖子编号是多少。如果这个中间过程比较费时,完了,肯定超时。
在大数据量下,使用Guid的上述好处体现的非常明显。
使用Guid,中间层可以引入队列的概念,表现层只要简单的向中间层待处理队列中增加一条,既可以返回了。而不用等中间层和数据库层处理完毕。
微软的BizTalk 中表示编号的是Guid,而不是Int,这就是其中一个原因。同时很多大型系统,也是使用的Guid而不是Int。 当然,你也可以使用一套自己的编号方式。不过Guid和Int是最简单的而已。
Guid 类型字段跟Int类型字段速度对比数据,可以参看以下Blog:
http://www.cnblogs.com/zhenyulu/archive/2004/07/20/25816.html
playyuer feedback:
guid (帖子编号)可以在前端(Web/App Server 不是 DB Server)先生成,相当于预知了ID (不错)!
to SpiderMan:
"生成guid的过程可以放在数据库端" 该讨论岂不没意义了?
为了 Order By 是不是还要最好加上一个 Auto ID?????
# re: Guid 和 Int 作为系统编号的取舍 12/1/2004 1:04 PM playyuer
re: msdn上面说的,还是有可能会重复对嘛?
在同一台(中间件)机器(Web Server OR App Server 不是 DB Server)上生成 GUID ,应该肯定永远不会重复!
# re: Guid 和 Int 作为系统编号的取舍 12/1/2004 1:24 PM playyuer
如果理想状态下 GUID 真的可以保证在所有星球,所有计算机,所有数据库,所有表之间都不会出现重复!?!?!?!
就可以在"最终"客户端生成,预知 ID ! (太理想了)
本题没必要这样(不是在"最终"客户端),所以 smartphone/pocket pc 不支持GUID的生成也无所谓!