# 数据异构

## 什么是数据异构

数据异构体现在很多个层次上：

1. 数据存储地点的异构：数据存储在多个物理位置上，比如mysql集群，在北京，上海都有节点。
2. 数据格式的异构：数据的存储管理机制不同，可以是关系型数据库系统，如：Mysql、SQL Server、DB2等，也可以是非关系型数据库，比如redis，MongoDB等，也可以是文件行二维数据，如：txt、CSV、XLS等。
3. 数据的逻辑模型异构：数据分别在不同的业务逻辑中存储和维护，从而相同意义的数据存在表现的异构；如：独立的销售系统和独立的采购系统中存在产品的字段不相同等。
4. 操作系统的异构；数据的存储来源于不同的操作系统，如：Unix、Windows、Linux、OS/400等。
5. 计算机体系结构的异构；数据的物理存储来源于不同体系结构的计算机中，如：大型机、小型机、工作站、PC或嵌入式系统中。

## 数据格式异构实现的方式

目前业界比较流行的数据格式异构方式有三种：

* 双写：在写入数据的时候，同时将数据写入mysql和缓存；
* MQ：写入mysql成功后，发一个mq消息，缓存读取mq消息并将消息写入缓存；
* Binlog：写入mysql后，缓存系统x消费binlog，将变动写入缓存。

三种实现方式的优缺点对比：

|       | 双写    | MQ    | Binlog |
| ----- | ----- | ----- | ------ |
| 数据一致性 | 存在不一致 | 存在不一致 | 存在不一致  |
| 数据延迟  | 低     | 中     | 高      |
| 系统耦合度 | 高     | 中     | 低      |
| 系统复杂度 | 低     | 中     | 高      |
