我可以阅读MySQL文档,它非常清楚.但是,如何决定使用哪个字符集?整理有哪些数据会产生影响?
我要求解释这两个以及如何选择它们.
我想要一种在URL中表示整数的最短方式.例如,11234可以使用十六进制缩短为"2be2".由于base64使用的是64字符编码,因此应该可以使用比十六进制更少的字符来表示base64中的整数.问题是我无法弄清楚使用Python将整数转换为base64(以及再返回)的最简洁方法.
base64模块有处理字节串的方法 - 所以也许一个解决方案是将一个整数转换为二进制表示形式作为Python字符串...但我不知道如何做到这一点.
我需要生成一个GUID并通过字符串表示保存它.字符串表示应尽可能短,因为它将用作已经很长的URL字符串的一部分.
现在,我使用生成的原始字节而不是使用正常的abcd-efgh -...表示,而是使用base64编码,这会导致字符串更短.
但它有可能使它更短吗?
我可以失去一定程度的独特性和保持计数器,但扫描所有现有的密钥不是一种选择.建议?
疯狂的克里斯滕森得到一个到00amyWGct0y_ze4lIsj2Mw
它可以小于那个吗?
我决定使用GUID作为我的许多项目数据库表的主键.我认为这是一个很好的做法,特别是考虑到可扩展性,备份和恢复.问题是我不想使用常规GUID并搜索替代方法.我真的很想知道Pinterest我用什么作为主键.当您查看URL时,您会看到如下内容:
http://pinterest.com/pin/275001120966638272/
Run Code Online (Sandbox Code Playgroud)
我更喜欢数字表示,即使是存储为字符串.有没有办法实现这个目标?
此外,youtube还使用了一种不同的散列技术,我无法弄清楚:
http://www.youtube.com/watch?v=kOXFLI6fd5A
Run Code Online (Sandbox Code Playgroud)
这让我想起了缩短网址的方案.
我更喜欢最短的一个,但我知道它不能保证是唯一的.我首先考虑做这样的事情:
DateTime dt1970 = new DateTime(1970, 1, 1);
DateTime current = DateTime.Now;
TimeSpan span = current - dt1970;
Run Code Online (Sandbox Code Playgroud)
结果示例:
1350433430523.66
Run Code Online (Sandbox Code Playgroud)
打印自1970年以来的总毫秒数,但如果我每秒有数十万次写入会发生什么.
我主要更喜欢非BIGINT自动增量解决方案,因为使用第三方工具扩展数据库以及不太有问题的备份/恢复功能会减少很少的麻烦,因为我可以在服务器之间传输数据,如果我想要的话.
另一种复杂的方法是根据我的应用定制解决方案.在数据库中,主键还将包含用户名(唯一且用户无法更改),因此我可以将名称的数值与毫秒数组合,这将为我提供唯一的数字字符串.由于用户不以如此高的速率插入数据,因此数字ID保证是唯一的.我也可以删除最后5个数字并仍然获得一个唯一的ID,因为我假设用户不会以每秒超过1的速度插入数据,但我可能不会这样做(你怎么看?这个想法?)
所以我请求你的帮助.我的数据假设增长非常大,每年2TB,每秒有10万个新行.我希望URL看起来尽可能"友好",并且不想使用"常规"GUID.
我正在使用ASP.NET 4.5和MySQL开发我的应用程序
谢谢.
guid ×5
friendly-url ×2
asp.net ×1
base64 ×1
compression ×1
database ×1
encoding ×1
mysql ×1
python ×1
url ×1