自计算机发展以来,数据的存储的方式也不断的在发生变化,如一开始的的文件存储,到关系型数据库,再到非关键型数据库,半结构化的数据。再到当下火热的分布式存储。每种数据存储方式为了满足某种需求而自成一套体系。这就造成了数据之间的沟通存在困难,比如oracle数据导入mysql数据,redis数据库到mysql数据库等等。打破数据各有体系的壁垒,实现数据的互通有无,为进一步的数据分析都有着重要意义
1、数据分布
首先给数据分两个大类,一个是基本类型的比如 字符串,数字这些类型,另一种就是文件类型,比较图片,音乐等。而数据迁移针对是第一种基本类型。对于这样数据一般而已存储的地方如下:
- 关系型数据库(mysql、oracal、达梦、sqlite、SQLServer等)
- 非关系型数据库 (redis,monogoDB等)
- 分布式数据库 (HBase,TiDB)
- 文件系统 (CVS,excel,hadoop)
以上是数据存储在不同系统之上的冰山一角,还有存在许多不同地方以不同形式的存在的数据文件。
2、数据迁移过程
数据迁移过程主要分为3步:取出数据,数据过滤,插入数据。
这里着重说下数据过滤,在取出数据的时候,有可能原有的数据并不适合当下的系统,也有可能原有数据的一些字段要发生改变,以适应当前系统的需求。因此对原有数据进行过滤是很有必有的事情。
3、设计思路
面对如此海量的数据存储产品,在设计上确实面临了很大的困难,就比如说,数据访问的规范不一致,数据结构的不一致,关系型数据库和非关系型数据的不一致等等一系列问题。导致数据迁移在设计上的困难性。
但在设计上可以仿照JDBC的实现,数据迁移设计一系列的接口,通过统一的接口,来对下层数据统一查询进行访问,对上数据插入也是统一接口向上插入数据。
在当下的数据迁移面对关系型数据进行了深度的数据解耦,只需定义不同数据库的数据的类型,对不同的数据库里面的数据进取出操作,即可很方便的实现数据间的迁移。简单来说,对于mysql里面的数据转到oracle里面去,简单的逻辑来说就是用sql查询mysql里面的数据,然后通过oracal的sql语句将插入到oracle数据库里面去。
其核心转化逻辑就是这样的。因此对于不同数据间的转化就有一个匹配模式来进行自动匹配,好的做法通过相应的URL地址去识别数据库类别,在通过转化方向去进行相应的数据转化。
4. 总结
本文分析了相应的数据转化方案,会以此为基础上进行相应的具体实现