项目中,很多的场景需要使用到双写或者是多写的操作的。
场景1:
1.业务数据存储在mysql中;
2.分析数据写入到es;
3.实时分析需要写入到hbase,clickhouse中进行联机分析和处理;
4.为了处理查询的速度问题,需要使用到redis来进行缓存加速的操作
这种情况下,数据就需要存到到多个数据库中,充分的利用每一个数据库在不同的场景下面的优势来保证服务的性能和高效处理的速度。
但是这样的操作本身存在一定的缺陷的,缺陷的内容如下:
1.如何保证在多写操作的时候数据不会出现不同步的问题?那种机制可以来解决问题;
2.数据在多个数据源中的时候,如何进行同步的维护操作,比如需要对其中的一个数据库进行服务器版本的升级操作,如何保证不会出现问题?
还有就是数据多写的过程中数据的不一致问题或者数据丢失问题的补偿机制;
3.如何是使用了分布式数据的话,架构会增加的复杂,维护的难度极大,如何解决。
下面针对于集中特定的场景来进行分析和解决:
1.mysql数据库以及redis缓存的双写操作:
这种情况,业界有比较成熟的技术方案.称之为延迟双删方案,可以解决双写过程中的数据不一致的问题。
2.大数据的项目中,经常需要解决的一个问题技术项目的即席查询和分析操作,其中可以使用flink的cdc机制来保证将对应的mysql的数据同步到hbase或者是clickhouse,底层是一套完善的分布式解决方案的。可以解决这种双写的问题的。至于其他的多写操作的话,逐步的转换成为双写操作是一个比较好的解决方案的,现在大多数的双写方案都是比较完善的。多写方案也可以使用flink来完成操作的。
3.业界原有的方案是采用人工补偿或者是其他的较为复杂的补偿机制来实现数据的一致的,这种方案大公司可以这么做,会形成较为复杂的架构的,不便于后期的维护的。推荐使用较为成熟的业界的成熟的技术方案来实现的。
双写或者是多写的理解
于 2022-04-09 12:32:42 首次发布