【发布时间】:2012-10-07 02:46:00
【问题描述】:
我决定使用 GUID 作为我的许多项目数据库表的主键。我认为这是一个很好的做法,尤其是考虑到可扩展性、备份和恢复。问题是我不想使用常规 GUID 并搜索替代方法。我实际上很想知道我使用什么 Pinterest 作为主键。当您查看 URL 时,您会看到如下内容:
http://pinterest.com/pin/275001120966638272/
我更喜欢数字表示,即使它是以字符串形式存储的。有什么方法可以实现吗?
此外,youtube 还使用了另一种我无法弄清楚的散列技术:
http://www.youtube.com/watch?v=kOXFLI6fd5A
这让我想起了像方案一样缩短网址。
我更喜欢最短的,但我知道它不能保证是唯一的。我首先想到做这样的事情:
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 开发我的应用程序
谢谢。
【问题讨论】:
-
每秒有数万个新项目,我不明白您如何才能保持 URL 的“友好”。
-
pinterest 如何使用这些数字,我该如何实现?
-
您如何确定 pinterest(和其他人)不使用 bigint 方法?老相关问题:stackoverflow.com/questions/2827627/…
标签: asp.net guid friendly-url