问题:当你有一个.NET GUID要插入数据库时,它的结构应该像这样:
60 bits of timestamp,
48 bits of computer identifier,
14 bits of uniquifier, and
6 bits are fixed,
----
128 bits total
现在我遇到了一个GUID问题,因为它是一个128位数,而我使用的一些数据库只支持64位数。
我不想通过使用自增的bigint值来解决这个困境,因为我想能够进行离线复制。
所以我想到了创建一个本地唯一标识符类,它基本上是将GUID缩小到64位值。
我想出了以下方法:
day 9 bit (12*31=372 d)
year 8 bit (2266-2010 = 256 y)
seconds 17 bit (24*60*60=86400 s)
hostname 12 bit (2^12=4096)
random 18 bit (2^18=262144)
------------------------
64 bits total
现在我的问题是:时间戳基本上固定为34位,留下了30位用于主机名+随机数。
现在我的问题是: 1)您更愿意增加主机名哈希位大小并减少随机位大小还是增加随机位大小并减少主机名哈希位大小? 2)是否存在一种哈希算法,将每个字符串缩减到n位? 其中n理想情况下为12或尽可能接近。