我有1000万个网页网址,我想将他们的HTML保存为文件。操作系统对我在文件名中使用的内容非常严格。我想要一些系统将URL映射到字母数字表示,以存储在键值数据库中,生成重复条目的可能性很小。我需要一个可以扩展的解决方案,那就是:
某些编码方案(例如,Windows限制了文件名的长度,因此太大的网址可以产生大的编码字符串)
stdlib的一些功能,它可能产生重复的机会非常小(并在键值数据库中映射random_string => url_path)。
我提出了以下解决方案:
答案 0 :(得分:1)
我认为在十六进制表示中的SHA是这种情况下的标准方式。它给出了固定的长度。
sha = Digest::SHA1.file(file).hexdigest
答案 1 :(得分:1)
保存到磁盘将成为一个不断增长的令人头痛的问题。相反,你需要使用更好的设计用于此目的;您应该将HTML保存到数据库。您的查找速度会快得多,名称根本不重要。甚至SQLite也能很好地处理这个任务。
您需要一个实际网址字段,一个用于友好名称,一般是网页标题,另一个用于实际HTML内容。
我建议使用Sequel gem,这将使这项任务变得非常容易。查看他们的文档以获取更多信息和工作示例。
答案 2 :(得分:0)
试
md5(base64(filename))
它应该足够独特:)