为什么有些ID不用自动增长的整型,而用的是类似于“F9FB995E-C93D-456A-8097-0B27CCB25C4E” 这种的字符串,,而且也是唯一的,也体现不出上下级关系,,我就搞不懂为什么就不用整型呢?而且还节约空间,反正都没什么上下级关系。。 高手赐教  对于像CSDN这样的论坛网站,用户ID应该用什么做主键呢?? UUID,还是自动增长的呢??
thanks

解决方案 »

  1.   

    用的是类似于“F9FB995E-C93D-456A-8097-0B27CCB25C4E” 这种的字符串,,而且也是唯一的-------------
    估计你这个当初设计的目的是想利用散列值作为索引对于像CSDN这样的论坛网站,用户ID应该用什么做主键呢?? UUID,还是自动增长的呢??
    -------------------------
    csdn这里用户是唯一的,而且用户名支持字母数字,所以,其表设计上用户名这列肯定不能是整型,而且这列肯定是唯一约束,考虑到数据量大时,非整型的索引比整型的要大,所以,猜csdn的用户表里面应该有整形的“用户ID”,出于管理方便,估计其设计成自增的主键列。
      

  2.   

    UUID 对于分布式数据库比较方便地得到不重复的键。 比如你的100台服务器,来均衡负载,如果用INT则就比较复杂了。其实没有什么好坏,不同情况下不同的应用。
    CSDN 的用户,看上去应该是直接 以用户名 xgj1989 为主键了。
      

  3.   

    不使用int作为id有很多原因,比如
    1,不够长。只能到2,147,483,647而已。对于有些系统无法满足需要。
    2,不同的系统上生成的id不至于重复。比如有两个子站,最后生成的对象合并到主站,为了避免ID重复,UUID是一个好选择。
    3,不泄露业务量。根据你的int的ID的增长速度,你觉得是否可以判断出业务量?我个人而言,我使用long的id
      

  4.   

    CSDN 有两种可能性,我猜测:
    1. 用户名。
    2. 用户名的一定规则的HASH值。
    3. 自增。