出现的原因:如果我的业务类访问的数据库突然挂掉了,造成我们的业务瘫痪。这时候需要我保证我们业务正常访问,就出现了主从数据库和集群数据库。主要是针对业务的可用性来说。
集群数据库:如果我们的业务使用了两个数据库A、B,那么这个时候两个数据库的id如果是自增长的,那么id肯定会重复,那么这个时候即使前端来了一条数据,我们也不知道查那个表(问题1)?
为了解决(问题1),如是我们将A、B表的ID抽出来放到C表中生成,当A、B需要插入数据的时候,需要在C表中获取ID。这个时候解决了ID重复的问题。但是如果数据库插入很大的时候,一张生成ID的C表肯定会出现性能问题,出现这种性能问题的时候,我们又该怎么处理呢?(问题2)
解决问题2:因为性能不好,这个时候,我们将生成id的C表也拆分成C、D两张表来生成。这个是时候生成的ID,又不能确认唯一性,这么解决这个唯一性的问题?(问题3)
解决问题3 :使用步长来解决,如果是两张创建id的表,那么设置数据库创建表的id步长为2,这个时候第一个数据库创建的id是1,3,5,7.....。第二个创建id表的id是2,4,6,8...就不会出现重复。
性能进一步优化:我们可以在我们的业务层直接生成一个一段id的list集合,比如[1,1000],然后当使用到一定的比率的时候,我们在数据库中申请第二段[2000, 3000].这样,性能更好,不用每次都去访问数据库生成ID。