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。在某些情况下,自动递增的id很好。人们反对这一点的主要原因是因为您经常以分布式方式使用MongoDB,其中您的表位于多个服务器上的单独数据库中,但每个文档id在所有这些数据库中应该是唯一的。但
- 有时候你根本不打算这样做(分片),所以你不关心唯一性问题
- 您可以使用一些服务(您自己的)来生成顺序唯一id。是的,这有一些性能方面的考虑,但在您的特殊情况下,这可能不是问题。
- 你可以自己拆分id序列。例如,您期望最多有2000万个项目。所以第一个分片将使用序列0-20m作为id字段。第二个分片将使用20m-40m(因此,从id = 20.000.000开始),以此类推。这样你就可以满足所有将来对分片的需求(如果你有的话)。