近期,巨杉数据库正式推出了完整的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。
[[email protected]]$ sdblobtool --operation export --hostname sdb --svcname 11810
--collection sample.employee --file /opt/file/lobfile
执行效果
[[email protected]] sdblobtool --operation export --hostname sdb --svcname 11810 --collection sample.employee --file /home/sdbadmin/mylob
lob exporting has been done, total num:6
#查看当前目录下的日志文件
[[email protected]] 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。
[[email protected]]$ sdblobtool --operation export --hostname sdb01 --svcname
11810 --username sdbadmin --password sdbadmin --collection samole.employee --file
/opt/file/lobfile - 将集合空间为bizz,集合为 img 中的大对象导入到本地文件 lobfile 中,并指定从主节点导出。
[[email protected]]$ sdblobtool --operation export --hostname sdb01 --svcname
11810 --collection bizz.img --prefer M --file /opt/file/lobfile - 大对象的导入
?对象导入是将本地文件中的大对象文件导入到集合中, 导入参数:
Note:
指定--ignorefe 时只需要添加 --ignorefe即可,不需要为其指定具体值。--file的本地?文件指使用 sdblobtool 导出?生成的文件。
导入示例:
- 将本地文件 mylob 中的?对象导入至集合空间 sample,集合 employee2 中,当遇到已经存在的大对象时跳过。
[[email protected]]$ sdblobtool --operation import --hostname sdb --svcname 11810
--collection sample.employee2 --file /home/sdbadmin/mylob --ignorefe
执行效果
[sdb[email protected]] ls lrt
总用量 100
-rw-r-----1 sdbadmin sdbadmin_group 99328 10月 27 18:27 mylobbr/>[[email protected]]
[[email protected]] 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: 0br/>[[email protected]]
[[email protected]b] 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 中,当遇到已经存在的大对象则跳过。
[[email protected]]$ 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 中,需要已存在的大对象跳过。
[[email protected]]$ 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" 日志文件,当发生错误时,用户可以进入日志文件查看错误的详细信息。
- 常见问题
以下为使用 sdblobtool 工具时常见问题。
其他问题可参照巨杉数据库错误码文档进行对照
错误码参考文档:
http://doc.sequoiadb.com/cn/sequoiadb-cat_id-1432190985-edition_id-0
四、总结
巨杉数据库对象存储通过多副本备份机制实现数据安全,并且具备更加灵活的?致性策略,支持全类型数据覆盖,深度整合大数据体系组件。
sdblobtool 是一款用于管理 SequoiaDB 集合中大对象的工具,具有大对象(lob)的导出、导入、迁移的功能,使用便捷高效。
原文地址:https://blog.51cto.com/13722387/2451856