ObjectId 到唯一的较短字符串
ObjectId to unique shorter string
由于自动生成,递增的 Id 不是存储文档 ID 的常用方法,我想构建一个函数,将这个长的 ObjectId 转换为 5-7 长的字符字符串。
我想完成几乎与 YouTube 对其视频所做的相同的事情,而每个 url 确实很短,但他们仍然有数十亿个。
由于 YouTube 的视频标识符长度为 10 个字符,我认为我的 ID 不会超过 1000 万到 2000 万,因此我认为我需要的字符要少得多。
重要,我不需要 url 最小化器,我需要它用于不同的用途。
有没有解决这个问题的已知算法?
谢谢。
我怎么想的?
我正在考虑从 ObjectId 中获取 Increment
字段并对其进行操作,但我仍在寻找该线程在多个服务器上是否足够安全,如果可能的话,如果它达到最大 Int 会发生什么。
另外,increment
偶尔会重复一次,所以拿来完全就是随机数生成器
如果相关,将提供任何其他需要的信息
如果您不喜欢,也许您根本不需要使用 ObjectId。自动递增的 id 在某些情况下很好。人们反对的主要原因是因为您经常以分布式方式使用 MongoDB,其中您的表位于多个服务器上的单独数据库中,但每个文档 ID 在所有这些数据库中应该是唯一的。但是
- 有时您根本不打算这样做(分片),所以您不关心唯一性问题
- 您可以使用某些服务(您自己的)来生成顺序唯一 ID。是的,这有一些性能方面的考虑,但在您的 特定情况下这可能不是问题。
- 你可以自己拆分你的id序列。例如,您预计最多 2000 万个项目。所以第一个分片将使用序列 0-20m 作为 id 字段。第二个分片将使用 20m-40m(因此,从 id = 20.000.000 开始)等等。这样你就可以满足你未来对分片的所有要求(如果你有的话)。
由于自动生成,递增的 Id 不是存储文档 ID 的常用方法,我想构建一个函数,将这个长的 ObjectId 转换为 5-7 长的字符字符串。
我想完成几乎与 YouTube 对其视频所做的相同的事情,而每个 url 确实很短,但他们仍然有数十亿个。
由于 YouTube 的视频标识符长度为 10 个字符,我认为我的 ID 不会超过 1000 万到 2000 万,因此我认为我需要的字符要少得多。
重要,我不需要 url 最小化器,我需要它用于不同的用途。 有没有解决这个问题的已知算法?
谢谢。
我怎么想的?
我正在考虑从 ObjectId 中获取 Increment
字段并对其进行操作,但我仍在寻找该线程在多个服务器上是否足够安全,如果可能的话,如果它达到最大 Int 会发生什么。
另外,increment
偶尔会重复一次,所以拿来完全就是随机数生成器
如果相关,将提供任何其他需要的信息
如果您不喜欢,也许您根本不需要使用 ObjectId。自动递增的 id 在某些情况下很好。人们反对的主要原因是因为您经常以分布式方式使用 MongoDB,其中您的表位于多个服务器上的单独数据库中,但每个文档 ID 在所有这些数据库中应该是唯一的。但是
- 有时您根本不打算这样做(分片),所以您不关心唯一性问题
- 您可以使用某些服务(您自己的)来生成顺序唯一 ID。是的,这有一些性能方面的考虑,但在您的 特定情况下这可能不是问题。
- 你可以自己拆分你的id序列。例如,您预计最多 2000 万个项目。所以第一个分片将使用序列 0-20m 作为 id 字段。第二个分片将使用 20m-40m(因此,从 id = 20.000.000 开始)等等。这样你就可以满足你未来对分片的所有要求(如果你有的话)。