【发布时间】:2012-08-17 01:22:50
【问题描述】:
我正在尝试创建一个在外观和行为上类似于 youtube 的 /v=xxx 的 URL。简而言之,用户将上传文件并能够通过该 URL 访问它们。此 URL 代码需要是某种形式的数据库主键,以便页面可以收集所需的数据。我是数据库新手,这更像是一个数据库问题。
在我的数据库中,我有一个自动递增的主键,用于访问文件数据。我想使用该号码来创建文件的 URL。我开始研究不同的哈希函数,但我担心冲突。我不希望两个不同的文件使用相同的 URL。
我还考虑使用uniqid() 作为我的主键CHAR(13),直接使用它即可。但有了这个,我担心效率。另外环顾四周,我似乎找不到太多关于它的信息,所以这可能是一个奇怪的想法。更不用说在生成 id 时我需要测试冲突,这可能是低效的。自动增量要容易得多。
有什么好的解决办法吗?我的任何一个想法都会奏效吗?如何从自动递增的主键生成唯一 URL 并避免冲突?
我倾向于我的第二个想法,它的效率不会很高,但是当需要将东西添加到数据库(测试冲突)时会导致最大的性能缺陷,这对于最终用户来说只会发生一次。另一个性能缺点可能是实际查找字符而不是整数。但我主要担心这是不好的做法。
编辑:
一个简单的解决方案就是直接使用自动递增的值。叫我挑剔,但这看起来有点难看。
【问题讨论】:
-
您预计将拥有多少条记录?
-
为什么你认为使用自增值很难看?
-
@sberry 这真的取决于,从一开始就不多。但我想值得注意的是,文件将在 2 个月后被删除。因此,一次不要超过几千个。
-
@Briguy37 我的意思是 URL 很丑,
www.example.com/id=123对我来说似乎很奇怪,仅此而已 -
我有点困惑,因为它与您想要的 YouTube 示例网址
/v=xxx的格式相同。如果你想要 id 中的字母,你总是可以将 id 转换为十六进制或自定义的字母数字系统,并从一个看起来不错的值开始 id 计数。
标签: php mysql primary-key