ObjectId为唯一的短字符串

本文关键字:字符串 唯一 ObjectId | 更新日期: 2023-09-27 18:17:03

由于自动生成,增量Id不是存储文档Id的常用方法,我想构建一个函数,将这个长ObjectId转换为5-7长的字符串。

我想完成几乎和YouTube一样的事情,虽然每个url都很短,但他们仍然有数十亿的视频。

由于YouTube的视频标识符是10个字符长,我认为我不会有超过10m-20m的id,因此我认为我需要更少的字符。

重要的是,我不需要url minimizer,我需要它有不同的用途。有没有已知的算法可以解决这个问题?

谢谢。

我怎么想的?我正在考虑从ObjectId中获取Increment字段并操纵它,但我仍然在寻找跨多个服务器的线程安全是否足够,如果它达到最大Int会发生什么,如果可能的话。

而且,increment每隔一段时间重复一次,所以取它完全就像随机数生成器一样。

其他需要的信息将提供,如果相关

ObjectId为唯一的短字符串

如果你不喜欢它,也许你根本不需要使用ObjectId。在某些情况下,自动递增的id很好。人们反对这一点的主要原因是因为您经常以分布式方式使用MongoDB,其中您的表位于多个服务器上的单独数据库中,但每个文档id在所有这些数据库中应该是唯一的。但

  1. 有时候你根本不打算这样做(分片),所以你不关心唯一性问题
  2. 您可以使用一些服务(您自己的)来生成顺序唯一id。是的,这有一些性能方面的考虑,但在您的特殊情况下,这可能不是问题。
  3. 你可以自己拆分id序列。例如,您期望最多有2000万个项目。所以第一个分片将使用序列0-20m作为id字段。第二个分片将使用20m-40m(因此,从id = 20.000.000开始),以此类推。这样你就可以满足所有将来对分片的需求(如果你有的话)。