文件名转换的URL

时间:2014-10-11 02:45:22

标签: ruby

我有1000万个网页网址,我想将他们的HTML保存为文件。操作系统对我在文件名中使用的内容非常严格。我想要一些系统将URL映射到字母数字表示,以存储在键值数据库中,生成重复条目的可能性很小。我需要一个可以扩展的解决方案,那就是:

  1. 某些编码方案(例如,Windows限制了文件名的长度,因此太大的网址可以产生大的编码字符串)

  2. stdlib的一些功能,它可能产生重复的机会非常小(并在键值数据库中映射random_string => url_path)。

  3. 我提出了以下解决方案:

    • 使用base64编码。这会为大型网址生成大字符串。
    • 使用安全随机生成urlsafe base64。在得到重复的条目之前,我不知道有多少组合。

3 个答案:

答案 0 :(得分:1)

我认为在十六进制表示中的SHA是这种情况下的标准方式。它给出了固定的长度。

sha = Digest::SHA1.file(file).hexdigest

答案 1 :(得分:1)

保存到磁盘将成为一个不断增长的令人头痛的问题。相反,你需要使用更好的设计用于此目的;您应该将HTML保存到数据库。您的查找速度会快得多,名称根本不重要。甚至SQLite也能很好地处理这个任务。

您需要一个实际网址字段,一个用于友好名称,一般是网页标题,另一个用于实际HTML内容。

我建议使用Sequel gem,这将使这项任务变得非常容易。查看他们的文档以获取更多信息和工作示例。

答案 2 :(得分:0)

md5(base64(filename))    

它应该足够独特:)