伴随着「数据安全法」的落地,数据安全又成为了时下的热门话题。我们通常说企业内部数据价值,显然并不是指躺在一个个静态excel表格中的数据。在数据量呈指数级上升、数据结构越来越复杂的背景下,催生出了「大数据」概念。海量数据的出现导致数据库的容量时刻经受巨大的考验,性能波动的同时催生出 DBA 越来越频繁的备份、导入、导出动作。

虽然行业正在迎来云和大数据时代,我们日常使用的工具却仍然停留在 PC 机时代。在数据批量操作时,逐个单点工具慢慢无法应付逐渐增大的数据量和更加灵活的操作场景。因此 CloudQuery 在 1.4.0 版本提出了「DTS」概念,即「数据库工具箱服务」,旨在为数据管理员提供各类数据批量操作工具,大幅提升工作效率。本文我们将详细阐述 CloudQuery「DTS」的第一款工具——「数据导入导出」

以往 DBA 实现数据备份、数据导入导出通常需要借助现有桌面端工具,不仅成功率无法保证,在文件格式的选择上也难以做到两全。若导出格式为查看数据友好的 excel 格,则对数据量的要求较高,一旦导出数据量超出excel的承载,导出动作往往会走向失败;如果选择 sql 格式,虽然避开了数据量限制的问题,却面临着定位数据困难、特殊字段无法再次导入等问题。

并且,市面上的导入导出工具通常不具备云端数据存储能力,导出文件只能存放在导出机本地,如果对数据有留存或共享需求,则需要借助其他各种云盘工具,但由于文件往往较大,所以上传下载都耗时较长,非常不灵活。

此外,导入导出动作在企业内部属于高风险动作,一旦发生数据库账号信息泄漏或盗用事件会给企业数据安全带来极大威胁。开篇也提到数据通常是一个企业的立足根本,内部数据的泄漏往往比外部损害更加致命。

所以 CloudQuery 对数据管理员的使用场景进行评估,结合业务实际需求,推出了独特的「导入导出」功能,主要具备以下特点:

① 导出文件云端存储

平台提供个人文件夹功能,每个用户都属于自己的云端空间。所有导出数据保留在服务器上,真正做到跨客户端数据同步,让操作人员从不同客户端登录平台都可以随时获取远端数据,无需通过各种移动硬盘或云盘来进行数据共享。

② 工具使用权限纳入管控

CloudQuery 将工具使用权限纳入平台权限管控体系,员工使用「导入导出」功能,需管理员对其开通对应权限,否则无法使用该工具。工具使用权限纳入平台权限管控体系贯彻了 CloudQuery 作为数据管控平台的安全原则,将用户在平台上的所有动作纳入管控体系,尽可能降低数据泄露风险,防止因账号泄露或盗用导致大批量数据泄露、拖库拖表事件发生。

③ 云原生形态,操作方式更灵活

在企业内部 DBA 通常面临繁多复杂的数据交互场景,例如数据定时备份、生产到测试数据库的数据导入导出等等,但现有桌面端工具囿于PC的不灵活性会使得 DBA 在进行异端恢复时面临无数的麻烦。CloudQuery 提供的导出数据上云解除了数据操作人员与端强耦合,也提高了企业内部的数据可控性,导出文件仅会存储在用户的个人文件夹下,避免数据文件存储在硬盘中被其他人员窃取、传播导致数据泄露。同时, CloudQuery 支持的自定义参数功能可以帮助 DBA 灵活选择导出数据,例如 ignore=y full=y 等等。

④ 数据源特性支持

考虑到各种复杂场景的数据交互,我们在设计导入导出模块时对各个数据源进行了针对性的特性支持,例如 mysql 的 mysqldump --single-transaction,在导出时将会话事务隔离级别改为RR隔离级别并开启一个事务,RR隔离级别下,导出数据都是开启事务时的数据快照,保证了导出数据的一致性。

而在开发语言的选择上,由于大部分导出动作需要与数据库终端命令直接交互,所以我们抛弃了市面上主流使用的 Java 转而采用 Go 语言进行代码开发,目的是将命令行工具 SaaS 化,接入各种数据库工具,方便扩展。DTS 的每个工具都拥有自己独立的描述文件,在后续的工具扩展道路上可以通过描述语言来定义新增的命令行工具。同样前端交互页面、后端工具、命令等等都可以通过描述文件实现。所有实时状态输出由 websocket 推送进行前端页面交互。

还是以mysqldump 举例:

如上图所示,在新增工具支持时首先需要定义描述文件,当 DTS 服务启动时会自动将文件映射到动态类中,类之间互相独立,方便后续扩展。启动成功后,前端在渲染页面工具库时会自动对动态类进行检索,以服务端来进行动态页面表单渲染,选择指定任务后再根据用户所选以及自定义参数转换为操作命令。当用户请求提交至服务端执行时,服务端会屏蔽工具之间差异性,通过参数不同进行区别处理并动态生成数据库命令,随后以异步方式提交至数据库执行,执行过程中会进行实时日志信息以及执行状态收集,最终以 ws 形式进行结果反馈以及日志输出,同时会配合持久层缓存方便用户执行后进行日志二次下载查看。

以上场景中我们可以看到 CloudQuery 的工具支持能力已经跨越了以往 PC 时代的桌面端限制。伴随云端服务器建设的逐步完善,DTS 中会集成更多数据操作工具,在提升工具性能的同时更加贴近企业内部完整数据操作场景,从不同使用人员的角度出发构建对应的操作路径,以直观、便捷的方式重新构造 DBA 一体化智能工具箱。

CloudQuery 如何实现云上数据导入导出的更多相关文章

  1. 从零自学Hadoop(16):Hive数据导入导出,集群数据迁移上

    阅读目录 序 导入文件到Hive 将其他表的查询结果导入表 动态分区插入 将SQL语句的值插入到表中 模拟数据文件下载 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并 ...

  2. ITTC数据挖掘平台介绍(五) 数据导入导出向导和报告生成

    一. 前言 经过了一个多月的努力,软件系统又添加了不少新功能.这些功能包括非常实用的数据导入导出,对触摸进行优化的画布和画笔工具,以及对一些智能分析的报告生成模块等.进一步加强了平台系统级的功能. 马 ...

  3. oracle数据导入/导出

    Oracle数据导入导出imp/exp 功能:Oracle数据导入导出imp/exp就相当与oracle数据还原与备份.   大多情况都可以用Oracle数据导入导出完成数据的备份和还原(不会造成数据 ...

  4. Oracle数据导入导出

    Oracle数据导入导出imp/exp 在oracle安装目录下有EXP.EXE与IMP.EXE这2个文件,他们分别被用来执行数据库的导入导出.所以Oracle数据导入导出imp/exp就相当与ora ...

  5. SQL SERVER 和ACCESS的数据导入导出

            //批量导入Access         string filepath = Server.MapPath("student.mdb");         stri ...

  6. 关于 Oracle 的数据导入导出及 Sql Loader (sqlldr) 的用法

    在 Oracle 数据库中,我们通常在不同数据库的表间记录进行复制或迁移时会用以下几种方法: 1. A 表的记录导出为一条条分号隔开的 insert 语句,然后执行插入到 B 表中2. 建立数据库间的 ...

  7. Hive 实战(1)--hive数据导入/导出基础

    前沿: Hive也采用类SQL的语法, 但其作为数据仓库, 与面向OLTP的传统关系型数据库(Mysql/Oracle)有着天然的差别. 它用于离线的数据计算分析, 而不追求高并发/低延时的应用场景. ...

  8. Winform开发框架之通用数据导入导出操作的事务性操作完善

    1.通用数据导入导出操作模块回顾 在我的Winfrom开发框架里面,有一个通用的导入模块,它在默默处理这把规范的Excel数据导入到不同的对象表里面,一直用它来快速完成数据导入的工作.很早在随笔< ...

  9. Oracle数据导入导出imp/exp

    功能:Oracle数据导入导出imp/exp就相当与oracle数据还原与备份. 大多情况都可以用Oracle数据导入导出完成数据的备份和还原(不会造成数据的丢失). Oracle有个好处,虽然你的电 ...

  10. Sqoop -- 用于Hadoop与关系数据库间数据导入导出工作的工具

    Sqoop是一款开源的工具,主要用于在Hadoop相关存储(HDFS.Hive.HBase)与传统关系数据库(MySql.Oracle等)间进行数据传递工作.Sqoop最早是作为Hadoop的一个第三 ...

随机推荐

  1. Python 潮流周刊#102:微软裁员 Faster CPython 团队(摘要)

    本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...

  2. C#之清除已经注册的事件

    private static void DealA(object sender, UnhandledExceptionEventArgs e) { Console.WriteLine($"E ...

  3. 关于C#的Dynamic调用方法前的一些准备的小Demo

    using System; using System.CodeDom.Compiler; using System.Collections.Generic; using System.Linq; us ...

  4. 哨兵线性搜索算法浅析与Python,C#实践Demo

    如题: 在数组A[]中搜索给定值foundNum,其中length是A[]的长度 常规线性搜索 1.令索引i初始值为0,按次序依次赋值到n-1; (a)如果A[i]==foundNum,返回当前i; ...

  5. Everyone's Favorite Linear, Direct Access, Homogeneous Data Structure: The Array(英翻中)

    Arrays are one of the simplest and most widely used data structures in computer programs. Arrays in ...

  6. acwing 智商药

    题目链接:5046. 智商药 - AcWing题库 首先考虑dfs 不用想肯定超时 过了10/17个测试点 代码 1 #include<bits/stdc++.h> 2 3 using n ...

  7. L1-1、Prompt 是什么?为什么它能“控制 AI”?

    *--Prompt 入门 L1-1 想象一下,你只需输入一句话,AI 就能自动为你写一篇文案.生成一份报告.甚至规划你的创业计划.这种"对话即编程"的背后魔法,就是 Prompt ...

  8. Spring IoC容器添加组件的方式

      小编在博文<Spring Bean是什么>中介绍了Bean的基本概念,这里详细地介绍如何注册bean. 1.包扫描@ComponentScan+组件标注注解   适用场景:可以通过该方 ...

  9. 【转载】Indexer 源码分析

    Indexer 源码分析 介绍 我们知道DeltaFIFO 中的元素通过 Pop 函数弹出后,在指定的回调函数中将元素添加到了 Indexer 中. Indexer 是什么?字面意思是索引器,它就是 ...

  10. P1155 [NOIP 2008 提高组] 双栈排序

    将一组数据分成两组,且组内不能冲突.考虑使用二分图. 我们来思考什么样的两个数不能存在于一个栈中.因为最后要求我们升序排序输出,所以在一个栈中的数字必定是降序. 那么当 \(i<j\) 时并且 ...