近期,巨杉数据库正式推出了完整的SequoiaDB 工具包,作为辅助工具,更好地帮助大家使用和运维管理分布式数据库。为此,巨杉技术社区还将持续推出工具系列文章,帮助大家了解巨杉数据库丰富的工具矩阵。
本文作为系列第一篇,将分享巨杉数据库大数据存储工具 sdblobtool 的基本介绍和应用实践。
巨杉工具矩阵
一、对象存储与自建存储对比
通俗地讲,自建存储就是自己购买服务器设备存储文件,通过运维人员手工进行文件的上传下载。而对象存储,则是使用不同的存储形态来存储文件。目前,对象存储独立的存储形态有三种:块存储、⽂件存储以及新出现的对象存储。
块存储:简单来说,块存储就是将硬盘直接挂载到主机,在主机上我们能够看到的就是一块块的硬盘以及硬盘分区。从存储架构的角度而言,块存储又分为DAS存储(Direct-Attached Storage,直连式存储)和SAN存储(Storage Area Network,存储区域网络)。
文件存储:指的是在文件系统上的存储,也就是主机操作系统中的文件系统。我们知道,文件系统中有分区,有文件夹,子文件夹,整体形成⼀个自上而下的⽂件结构,⽤户可以通过操作系统中的应⽤程序来打开和修改文件系统下的⽂件。
对象存储:指的是⾯向对象/⽂件的、海量的互联网存储对象。虽然它也是文件,但它是已经被封装的⽂件(编程中的对象就有封装性的特点)。在对象存储系统⾥,用户不能直接打开和修改⽂件,但可以像 ftp ⼀样上传和下载⽂件。另外,对象存储不像⽂件系统那样有⼀个很多层级的⽂件结构,而是只有⼀个“桶”的概念(也就是存储空间),“桶”⾥⾯全部都是对象,是一种非常扁平化的存储方式。
二、巨杉数据库大对象存储
SequoiaDB 和各大云平台对象存储都提供存储服务,都具备分布式、可扩展、高可用等特性。各大云平台对象存储是专门为对象存储而设计的,而SequoiaDB的块存储引擎则针对非结构化数据存储。
SequoiaDB 的块存储字段类型叫做LOB(Large OBject,大对象),其核心机制是将内容文件打散成多个数据块,每个数据块被分别发送到不同分区独立存放。如下图所示:
LOB 文件逻辑结构
与其他解决方案相比,由于不存在独立中控元数据节点,SequoiaDB 提供的 LOB 存储机制理论上可以存放近乎无限数量的对象文件,并且不会由于元数据堆积而造成性能下降。同时,由于数据块被散列分布到所有数据节点,整个系统的吞吐量随集群磁盘数量的增加近乎线性提升。最后,SequoiaDB 提供原生的内容管理接口,通过 REST 访问方式支持批次管理、版本管理、流程管理等一系列基本CM特性。
基于LOB 存储机制的内容管理平台架构图
从使用方式上看,SequoiaDB的 LOB 机制可以使用原生 API 的访问形式,对底层 LOB 对象进行读写访问;同时,用户也可以通过高阶 CM API Java 接口,Java 驱动会将请求封装成 RESTful 形式,通过发送接收 HTTP 报文进行对象和批次级别读写更新操作。
相对于其他云存储平台,巨杉数据库对象存储具有以下优势:
安全性
SequoiaDB 提供基于本地化的对象存储,通过多副本数据备份,实现数据安全,安全性毋庸置疑。
支持全类型数据的覆盖
SequoiaDB 是⼀款以 JSON/BSON 数据类型作为底层存储格式的分布式关系型数据库,支持灵活的数据类型定义和存储,支持全类型数据的覆盖,可同时存储结构化、半结构化和非结构化数据,对大数据的存储与分析提供了了一个坚实、可靠、高效与灵活的底层平台。
更加灵活的一致性策略
目前,SequoiaDB 数据分区组的数据一致性是基于集合级别进行配置的。用户在使用SequoiaDB 的过程中,可以随时调整数据一致性的强度。在一个多副本的 SequoiaDB 集群中,集合默认的数据⼀致性行级别为“最终⼀致性”。
深度整合大数据体系组件
SequoiaDB 的企业版本不仅集成了 Hadoop 的 HDFS、MapReduce和Spark,还向客户提供完善的 SQL 解决方案和丰富的第三方插件,例如 ETL 工具 Kettle 的 SequoiaDB 插件,Spark SQL 的扩展包--支持 Spark SQL 自动同步操作 SequoiaDB 数据集等。
SequoiaDB 不仅通过了全球最大的 Hadoop 发行商 Cloudera 的官方认证(全球只有四家 NoSQL 数据库获得),还获得了了 DataBricks 的官方认证,同时,SequoiaDB 也是国内三家经过 DataBricks 授权,拥有发行 Spark 权利的厂商之⼀。
三、大对象存储工具 sdblobtool ⽤法
sdblobtool 是一款用于管理 SequoiaDB 集合中大对象的工具,具有大对象(lob)的导出、导⼊、迁移的功能。
- 大对象的导出
导出功能是将集合中的⼤对象导出到本地⽂件。导出参数:
Note:
--prefer 的取值包括 M 或 m 指master(主节点); S 或 s(从节点); A 或 a 表示anyone; 通过1~255指定instanceid(实例id)
导出示例:
- 连接主机名为 sdb 的数据库服务器中服务名为11810协调节点,将集合空间为 sample,集合为 employee 中的大对象导⼊到本地文件 mylob。
[sdbadmin@sdb01]$ sdblobtool --operation export --hostname sdb --svcname 11810
--collection sample.employee --file /opt/file/lobfile
执行效果
[sdbadmin@sdb] sdblobtool --operation export --hostname sdb --svcname 11810 --collection sample.employee --file /home/sdbadmin/mylob
lob exporting has been done, total num:6
查看当前目录下的日志文件
[sdbadmin@sdb] ls -lrt
总用量 104
-rw-r-----1 sdbadmin sdbadmin_group 99328 10月 27 18:24 myblog
-rw-r--r--1 sdbadmin sdbadmin_group 1497 10月 27 18:24 sdblobtool.log
导出日志
2019-10-27-18.24.33.252414 Level:EVENT
PID:23987 TID:23987
Function:main Line:323
Message:
Start sdblobtool [Ver:3.2, Re;ease: 42463, Build: 2019-07-27-20.55.27]...
2019-10-27-18.24.33.252848 Level:EVENT
PID:23987 TID:23987
Function:main Line:344
File:SequoiaDB/engine/pmd/sdblobtool.cpp
Message:
options:{省略}
2019-10-27-18.24.33.257633 Level:EVENT
PID:23987 TID:23987
Function:_exportLob
File:Sequoiadb/engine/mig/migLobTool.cpp
Message:
begin to export lob
2019-10-27-18.24.33.270184 Level:EVENT
PID:23987 TID:23987
Function:_exportLob
File:Sequoiadb/engine/mig/migLobTool.cpp
Message:
lob exporting has been done, total num:6
2019-10-27-18.24.33.270323 Level:EVENT
PID:23987 TID:23987
Function:_exportLob
File:Sequoiadb/engine/pmd/sdblobtool.cpp
Message:
sdblobtool quit. rc: 0, shell rc: 0.
- 连接主机名为 sdb01 的数据库服务器器中服务名为 11810 协调节点,使用用户名 sdbadmin,密码 sdbadmin,将集合空间为 sample,集合为 employee 中的大对象导入到本地文件 lobfile。
[sdbadmin@sdb01]$ sdblobtool --operation export --hostname sdb01 --svcname
11810 --username sdbadmin --password sdbadmin --collection samole.employee --file
/opt/file/lobfile
- 将集合空间为bizz,集合为 img 中的大对象导入到本地文件 lobfile 中,并指定从主节点导出。
[sdbadmin@sdb01]$ sdblobtool --operation export --hostname sdb01 --svcname
11810 --collection bizz.img --prefer M --file /opt/file/lobfile
- 大对象的导入
⼤对象导入是将本地文件中的大对象文件导入到集合中, 导入参数:
Note:
指定--ignorefe 时只需要添加 --ignorefe即可,不需要为其指定具体值。--file的本地⽂文件指使用 sdblobtool 导出⽣生成的文件。
导入示例:
- 将本地文件 mylob 中的⼤对象导入至集合空间 sample,集合 employee2 中,当遇到已经存在的大对象时跳过。
[sdbadmin@sdb01]$ sdblobtool --operation import --hostname sdb --svcname 11810
--collection sample.employee2 --file /home/sdbadmin/mylob --ignorefe
执行效果
[sdbadmin@sdb] ls lrt
总用量 100
-rw-r-----1 sdbadmin sdbadmin_group 99328 10月 27 18:27 mylob
[sdbadmin@sdb]
[sdbadmin@sdb] sdblobtool --operation import --hostname sdb --svcname 11810 --collection sample.employee2 --file /home/sdbadmin/mylob --ignoref
File version: 1 TotalNum: 6 CreateTime: 2019-10-27-18.27.27.894000
lob importing has been done, total num: 0
[sdbadmin@sdb]
[sdbadmin@sdb] ls -lrt
总用量 104
-rw-r-----1 sdbadmin sdbadmin_group 99328 10月 27 18:27 mylob
-rw-r--r--1 sdbadmin sdbadmin_group 1492 10月 27 18:30 sdblobtool.log
导出日志
2019-10-27-18.30.08.474176 Level:EVENT
PID:8084 TID:8084
Function:main Line:323
File:SequoiaDB/engine/pmd/sdblobtool.cpp
Message:
Start sdblobtool [Ver: 3.2, Release: 42463, Build: 2019-07-27-20.55.27]...
2019-10-27-18.30.08.474534 Level:EVENT
PID:8084 TID:8084
Function:main Line:344
File:SequoiaDB/engine/pmd/sdblobtool.cpp
Message:
options:{ "hostname": "sdb", "svcname": "11810", "usrname": "", "passwd": "", "operation": "import", "collection": "foo.bar2", "file": "/home/sdbadmin/mylob", "ignorefe": true, "dsthost": "localhost", "dstservice": "11810", "dstusrname": "", "dstpasswd": "", "PreferedInstance": "M", "ssl": false }
2019-10-27-18.30.08.478471 Level:EVENT
PID:8084 TID:8084
Function:_importLob Line:628
File:SequoiaDB/engine/mig/migLobTool.cpp
Message:
begin to import lob
2019-10-27-18.30.08.484134 Level:EVENT
PID:8084 TID:8084
Function:_importLob Line:654
File:SequoiaDB/engine/mig/migLobTool.cpp
Message:
lob importing has been done, total num:0
2019-10-27-18.30.08.484228 Level:EVENT
PID:8084 TID:8084
Function:main Line:365
File:SequoiaDB/engine/pmd/sdblobtool.cpp
Message:
sdblobtool quit. rc: 0, shell rc: 0.
- 使用用户名 sdbadmin 密码 sdbadmin 将本地文件 mylob 中的大对象导入至集合空间 sample,集合 employee2 中,当遇到已经存在的大对象则跳过。
[sdbadmin@sdb01]$ sdblobtool --operation import --hostname sdb01 --username sdbadmin --passwd sdbadmin --svcname 11810 --collection sample.employee2 --file /home/sdbadmin/mylob --ignorefe
- 大对象迁移
大对象迁移是将集合中的大对象迁移到另一个集合中,迁移参数:
Note:
指定--ignorefe 时只需要添加 --ignorefe即可,不需要为其指定具体值。
迁移示例:
连接集群主机名为 sdb01 中的协调节点11810,将集合空间 sample,集合 employee 下的大对象复制到另一个集群,目标集群主机名为 sdb02,协调节点为11810,集合空间 sample,集合 employee2 中,需要已存在的大对象跳过。
[sdbadmin@sdb01]$ sdblobtool --operation migration --hostname sdb01 --svcname 11810 --collection sample.employee --dsthost sdb02 --dstservice 11810 --dstcollection sample.employee2 --ignorefe
- 导出成功标志
指定大对象迁移命令后,控制台会在命令执行后给出本次命令执行结果:
大对象导出
lob exporting has been done, total num:6
大对象导入
File version: 1 TotalNum: 6 CreateTime: 2019-10-27-18.27.27.894000
lob importing has been done, total num: 0
用户通过控制台输出可以判断本次导入或者导出是否存在问题。然后再进入导入/导出生成的 sdblobtool.log 日志文件,检查日志文件中文件导出数量的统计,查看日志文件是否存在 ERROR 信息,判断本地操作是否存在错误。
- 大对象工具日志
使用 sdblobtool 时,命令执行结束会在当前所在目录生成 "sdblobtool.log" 日志文件,当发生错误时,用户可以进入日志文件查看错误的详细信息。
- 常见问题
其他问题可参照巨杉数据库错误码文档进行对照
错误码参考文档:
http://doc.sequoiadb.com/cn/s...
四、总结
巨杉数据库对象存储通过多副本备份机制实现数据安全,并且具备更加灵活的⼀致性策略,支持全类型数据覆盖,深度整合大数据体系组件。
sdblobtool 是一款用于管理 SequoiaDB 集合中大对象的工具,具有大对象(lob)的导出、导入、迁移的功能,使用便捷高效。