【问题标题】:Turning unique filepath into unique integer将唯一文件路径转换为唯一整数
【发布时间】:2017-01-09 21:28:38
【问题描述】:

我经常使用文件路径为某些软件系统提供某种唯一 ID。有什么方法可以以相对快速(计算)的方式获取文件路径并将其转换为唯一整数?

我可以接受更大的整数。据我所知,这必须是一个非常漂亮的算法,但在某些情况下会非常有用。

有人知道这样的事情是否存在吗?

【问题讨论】:

  • 也许这回答了我的问题:stackoverflow.com/questions/12238228/…
  • 如果您在内存中运行它,您可以使用相应语言的标准哈希图之一。不仅适用于文件名,还适用于任何类似情况。
  • 您的意思是将文件名散列为某个唯一整数?
  • 这是一个库,所以想在给定文件路径的情况下生成一个唯一编号,然后将该唯一编号提供给该库的用户
  • 好吧.......

标签: node.js algorithm unique filepath


【解决方案1】:

你可以试试inode号:

fs.statSync(filename).ino

【讨论】:

    【解决方案2】:

    @djones 对 inode 编号的建议很好,如果程序只在一台机器上运行并且您不关心复制旧文件的 id 的新文件,则该文件已删除。重复使用 inode 编号。

    另一种简单的方法是将路径散列到一个大整数空间。例如。使用 128 位 murmurhash(在 Java 中我会使用 Guava Hashing 类;有几个 js 端口),十亿条路径之间发生冲突的机会仍然是 1/2^96。如果您真的很偏执,请保留一组您已经使用过的哈希值并在发生冲突时重新哈希。

    【讨论】:

      【解决方案3】:

      这只是我的评论变成了答案。 如果您在内存中运行它,您可以使用相应语言的标准哈希映射之一。不仅适用于文件名,还适用于任何类似情况。正常情况下,不同编程语言的hashmap都是满足bucket的冲突,所以hash number和对应的bucket number会提供一个唯一的id。

      顺便说一句,编写自己的哈希图并不难,这样您就可以控制底层结构(例如检索数字等)。

      【讨论】:

      • 在我的情况下,有多个进程(不是所有相同的共享内存)可能更难做到这一点
      • 是的,这可能并不容易,但要克服这个问题,您可以编写一个维护此哈希图的服务。同样,通常一种体面的编程语言支持并发。因此,您可以从所有其他应用程序中调用该服务来为您提供一个唯一号码。有时(例如午夜),您可以通过该服务将这些唯一号码自动保存在数据库或文件中。这样您就不会丢失信息。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-02
      • 1970-01-01
      • 2021-10-28
      • 2014-11-23
      • 1970-01-01
      相关资源
      最近更新 更多