asp.net – 考虑Scalablity和友好URL的GUID替代方案
|
我决定使用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自动增量解决方案,因为使用第三方工具扩展数据库以及不太有问题的备份/恢复功能会减少很少的麻烦,因为我可以在服务器之间传输数据,如果我想要的话. 另一种复杂的方法是根据我的应用定制解决方案.在数据库中,主键还将包含用户名(唯一且用户无法更改),因此我可以将名称的数值与毫秒数组合,这将为我提供唯一的数字字符串.因为用户不以如此高的速率插入数据,所以数字ID保证是唯一的.我也可以删除最后5个数字并仍然获得一个唯一的ID,因为我假设用户不会以每秒超过1的速度插入数据,但我可能不会这样做(你怎么看?这个想法?) 所以我请求你的帮助.我的数据假设增长非常大,每年2TB,每秒新增数十万行.我希望URL看起来尽可能“友好”,并且不想使用“常规”GUID. 我正在使用ASP.NET 4.5和MySQL开发我的应用程序 谢谢. 解决方法碰撞表对于像GUID这样的YouTube,你可以看到this的答案.他们基本上保留了他们正在生成的所有随机视频ID的数据库表.当他们请求新的时,他们会检查表格是否有任何碰撞.如果他们发现了碰撞,他们会尝试生成一个新碰撞. 长主键 我可能错了,但Pintrest看起来像是使用了一个长(例如275001120966638272)作为数据库主键.如果您使用的是GUID,则无济于事. Twitter似乎也有类似的东西. Base64编码的GUID 您可以使用ShortGuid将GUID编码为base64字符串.缺点是输出有点难看(例如00amyWGct0y_ze4lIsj2Mw)并且它区分大小写,如果你对它们进行较低的封装,这可能不适合URL. Base32编码的GUID 还有GUID的base32编码,你可以看到this的答案.这些比上面的ShortGuid稍长(例如lt7fz44kdqlu5pt7wnyzmu4ov4),但优点是它们可以全部小写. 多重因素 我一直在考虑的一个替代方案是引入多个因素,例如:如果Pintrest使用用户名和ID来获得额外的唯一性:
在这里,ID 1对于用户而言是独一无二的,并且可能是他们发布的帖子数量,即他们的下一篇文章将是2.您还可以使用YouTube的方法使用他们的视频ID但是特定于用户,这可能导致一些荒谬的短URL. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 如何刷新#include文件 – 它们在IIS7 / ASP.NET上进行缓存
- asp.net-mvc-3 – 有没有办法通过html.actionlink在ASP.NET
- asp.net – 向实体框架添加其他属性4代码首先是CTP 5实体
- asp.net-mvc – 如何获取路由值在视图(Asp.net Mvc)
- asp.net-mvc – MVC6自托管wwwroot内容返回404,IIS Express
- asp.net – MVC4在配置文件中查看缓存持续时间?
- 如何使用ASP.NET授权允许访问.css文件?
- asp.net-mvc – 允许一个人一次使用帐户的可重用方式
- asp.net-web-api – 如何在ASP.NET Web API中设置默认序列化
- asp.net-mvc – 当Bundling EnableOptimizations为true时,F
- asp.net – 什么是SQL Server Reporting Service
- asp.net – 将数值强制为HTML表导出为excel的文本
- asp.net-mvc – 在哪里得到的Microsoft.Web.Mvc.
- ASP.NET性能在32位/ 64位服务器之间降低
- asp.net – 页面查看计数器像StackOverFlow
- ASP.NET [图像处理程序]
- asp.net – 如何将IIS Developer Express切换到“
- asp.net-mvc-3 – 此版本的SQL Server不支持没有
- asp.net – WCF中的405方法不允许错误
- asp.net-mvc – 如何使用EF Code First解释为枚举
