我决定使用 GUID 作为我的许多项目数据库表的主键。我认为这是一个很好的做法,尤其是考虑到可扩展性、备份和恢复。问题是我不想使用常规 GUID 并搜索替代方法。我实际上很想知道我使用什么 Pinterest 作为主键。当您查看 URL 时,您会看到如下内容:
http://pinterest.com/pin/275001120966638272/
我更喜欢数字表示,即使它是以字符串形式存储的。有什么办法可以做到这一点?
此外,youtube 还使用了另一种我无法弄清楚的散列技术:
http://www.youtube.com/watch?v=kOXFLI6fd5A
这让我想起了缩短 url 之类的方案。
我更喜欢最短的,但我知道它不能保证是唯一的。我首先想到做这样的事情:
DateTime dt1970 = new DateTime(1970, 1, 1);
DateTime current = DateTime.Now;
TimeSpan span = current - dt1970;
结果示例:
1350433430523.66
打印自 1970 年以来的总毫秒数,但是如果我每秒有数十万次写入会发生什么。
我主要更喜欢非 BIGINT Auto-Increment 解决方案,因为它使使用 3rd 方工具扩展数据库以及问题较少的备份/恢复功能减少了很多麻烦,因为如果我愿意,我可以在服务器之间传输数据等。
另一种复杂的方法是针对我的应用程序定制解决方案。在数据库中,主键还将包含用户名(唯一且用户不能更改),因此我可以将名称的数值与毫秒数结合起来,这将给我一个唯一的数字字符串。因为用户插入数据的频率不高,所以保证数字ID是唯一的。我也可以删除最后 5 个数字,仍然得到一个唯一的 ID,因为我假设用户不会以每秒超过 1 的速度插入数据,但我可能不会那样做(你怎么看这个想法?)
所以我请求你的帮助。我的数据假设增长非常大,每年 2TB,每秒有数万行新行。我希望 URL 看起来尽可能“友好”,并且不希望使用“常规”GUID。
我正在使用 ASP.NET 4.5 和 MySQL 开发我的应用程序
谢谢。