ObjectId为唯一的较短字符串

时间:2016-11-09 15:21:35

标签: c# mongodb function objectid

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

我想要完成与YouTube的视频几乎相同的事情,而每个网址都非常简短,他们仍然拥有数十亿的视频。

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

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

感谢。

我在想什么? 我正在考虑从ObjectId获取Increment字段并对其进行操作,但我仍然在寻找那些在多个服务器上是否足够安全的线程以及如果它达到max Int会发生什么情况,如果可能的话。

此外,increment偶尔重复一次,因此将其视为随机数生成器。

如果相关,将提供任何其他所需信息

1 个答案:

答案 0 :(得分:1)

如果您不喜欢,可能根本不需要使用ObjectId。在某些情况下,自动增加的ID很好。人们争论的主要原因是因为您经常以分布式方式使用MongoDB,其中您的表位于多个服务器上的不同数据库中,但每个文档ID在所有这些数据库中应该是唯一的。但

  1. 有时你根本不打算这样做(分片),所以你不关心唯一性问题
  2. 您可以使用某些服务(您自己的)来生成顺序唯一ID。是的,有一些性能考虑,但在你的特定情况下可能不是问题。
  3. 您可以自己拆分您的ID序列。例如,您预计最多有2000万件商品。因此,第一个分片将使用序列0-20m作为id字段。第二个碎片将使用20m-40m(因此,从id = 20.000.000开始),依此类推。这样你就可以涵盖你未来对分片的所有要求(如果你有的话)。