Skip to main content

Command Palette

Search for a command to run...

#databases

Articles tagged with #databases

  1. 数据库分库分表解决方案

    数据切分(Sharding) 关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据量达到 1000W 或 100G 以后,由于查询维度较多,即使添加从库、优化索引,做很多操作时性能仍下降严重。此时就要考虑对其进行切分了,切分的目的就在于减少数据库的负担,缩短查询时间。 数据库分布式核心内容无非就是数据切分(Sharding),以及切分后对数据的定位、整合。数据切分就是将数据分散存储到多个数据库中,使得单一数据库中的数据量变小,通过扩充主机的数量缓解单一数据库的...

    Jul 11, 20223 min read43
  2. 高并发下重复插入问题及更新同一行数据

    重复插入问题 很多业务场景下,我们需要记录有唯一性,不允许重复插入。一般业务代码的逻辑通常是先查询,表记录存在则返回,不存在则插入数据。 但是在高并发场景下,多个线程同时进行查询,都查询到没有记录,随后都进行插入,这样就会出现需要唯一记录的重复插入。 解决方案 方案一: 使用悲观锁/分布式锁 该方案实现简单,但很影响性能。 方案二: 唯一性约束 使用 唯一性约束 ,业务代码通过捕获唯一性约束冲突的异常进行处理。但如果表设计中存在状态字段,唯一约束是某种状态的约束,那么添加唯一性约束的方式就不可行...

    Jul 7, 20221 min read939
  3. 保持 Unique Key 的逻辑删除方案

    前言 实际开发中,重要的业务数据一般不回使用物理删除,都是使用一个状态标记 deleted 实现逻辑删除,但这种情况下会破坏唯一索引。 再往唯一约束列插入相同的值时,会报 Duplicate Entry,但在业务上该值是必须要插入的。 下面我们聊聊如何保持唯一索引 解决方案 方案一:使用物理删除 方案二: 新建历史/备份表 每次删除时,主表进行物理删除,同时将删除的记录保存到历史/备份表中 方案三: 多 deleted 值 deleted:0 代表未删除,其他值代表删除 iduser...

    Jul 7, 20221 min read94