ObjectId 规则
发表于|更新于
|浏览量:
| 时间戳 | 机器码 | PID | 计数器 |
|---|---|---|---|
| 0,1,2,3 | 4,5,6 | 7,8 | 9,10,11 |
- 前四位是时间戳,可以提供秒级别的唯一性。
- 接下来三位是所在主机的唯一标识符,通常是机器主机名的散列值。
- 接下来两位是产生 ObjectId 的 PID,确保同一台机器上并发产生的 ObjectId 是唯一的。
- 前九位保证了同一秒钟不同机器的不同进程产生的 ObjectId 时唯一的。
- 最后三位是自增计数器,确保相同进程同一秒钟产生的 ObjectId 是唯一的。
文章作者: 烦恼多一点
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 非鱼小站!
相关推荐

2022-07-02
分库与分表带来的分布式困境与应对之策
数据迁移与扩容问题前面介绍到水平分表策略归纳总结为随机分表和连续分表两种情况。连续分表有可能存在数据热点的问题,有些表可能会被频繁地查询从而造成较大压力,热数据的表就成为了整个库的瓶颈,而有些表可能存的是历史数据,很少需要被查询到。连续分表的另外一个好处在于比较容易,不需要考虑迁移旧的数据,只需要添加分表就可以自动扩容。随机分表的数据相对比较均匀,不容易出现热点和并发访问的瓶颈。但是,分表扩展需要迁移旧的数据。 针对于水平分表的设计至关重要,需要评估中短期内业务的增长速度,对当前的数据量进行容量规划,综合成本因素,推算出大概需要多少分片。对于数据迁移的问题,一般做法是通过程序先读出数据,然后按照指定的分表策略再将数据写入到各个分表中。 表关联问题在单库单表的情况下,联合查询是非常容易的。但是,随着分库与分表的演变,联合查询就遇到跨库关联和跨表关系问题。在设计之初就应该尽量避免联合查询,可以通过程序中进行拼装,或者通过反范式化设计进行规避。 分页与排序问题一般情况下,列表分页时需要按照指定字段进行排序。在单库单表的情况下,分页和排序也是非常容易的。但是,随着分库与分表的演变,也会遇...

2022-07-03
说说 SQL 优化之道
一些常见的 SQL 实践 负向条件查询不能使用索引 select from order where status!=0 and status!=1 not in/not exists # 都不是好习惯 可以优化为 in 查询: select from order where status in(2,3) 前导模糊查询不能使用索引 select from order where desc like '%XX' 而非前导模糊查询则可以: select from order where desc like 'XX%' 数据区分度不大的字段不宜使用索引 select from user where sex=1 原因:性别只有男,女,每次过滤掉的数据很少,不宜使用索引。 经验上,能过滤80%数据时就可以使用索引。对于订单状态,如果状态值很少,不宜使用索引,如果状态值很多,能够过滤大量数据,则应该建立索引。 在属性上进行计算不能命中索引 select from order where YEAR(date) < = ...

2022-07-12
选择合适的数据存储方案
选择合适的数据存储方案关系型数据库 MySQLMySQL 是一个最流行的关系型数据库,在互联网产品中应用比较广泛。一般情况下,MySQL 数据库是选择的第一方案,基本上有 80% ~ 90% 的场景都是基于 MySQL 数据库的。因为,需要关系型数据库进行管理,此外,业务存在许多事务性的操作,需要保证事务的强一致性。同时,可能还存在一些复杂的 SQL 的查询。值得注意的是,前期尽量减少表的联合查询,便于后期数据量增大的情况下,做数据库的分库分表。 内存数据库 Redis随着数据量的增长,MySQL 已经满足不了大型互联网类应用的需求。因此,Redis 基于内存存储数据,可以极大的提高查询性能,对产品在架构上很好的补充。例如,为了提高服务端接口的访问速度,尽可能将读频率高的热点数据存放在 Redis 中。这个是非常典型的以空间换时间的策略,使用更多的内存换取 CPU 资源,通过增加系统的内存消耗,来加快程序的运行速度。 在某些场景下,可以充分的利用 Redis 的特性,大大提高效率。这些场景包括缓存,会话缓存,时效性,访问频率,计数器,社交列表,记录用户判定信息,交集、并集和差集,...

2022-07-05
MySQL 遇到的死锁问题
产生死锁的四个必要条件: 互斥条件:一个资源每次只能被一个进程使用。 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。 这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。 下列方法有助于最大限度地降低死锁: 按同一顺序访问对象。 避免事务中的用户交互。 保持事务简短并在一个批处理中。 使用低隔离级别。 使用绑定连接。

2022-07-23
使用缓存的合理性问题
热点数据,缓存才有价值 频繁修改的数据,看情况考虑使用缓存 数据不一致性 缓存更新机制 缓存可用性 缓存服务降级 缓存预热 缓存穿透

2022-07-28
自己如何实现消息队列
大体上的设计是由一条线程 1 执行从等待列表中获取任务插入任务队列再由线程池中的线程从任务队列中取出任务去执行. 添加一条线程 1 主要是防止在执行耗时的任务时阻塞主线程.当执行耗时任务时,添加的任务的操作快于取出任务的操作, 当任务队列长度达到最大值时,线程 1 将被阻塞,等待线程 2,3… 从任务队列取出任务执行。
评论
WalineDisqus
公告
This is my Blog






