6.10. 大文件存储
6.10.1. 存储需求
LSQL需支持文件体的存储管理和下载功能,例如给定bcp文件,内容为关键字段值(例如身份证,姓名等)及文件路径(例如/data/SFZ.jpg),LSQL根据需求进行存储规划。
6.10.2. 存储方案
LSQL独特的大文件存储技术,直接存储在HDFS之上,内置集成了对2M以上规模的字段的存储支持,针对大文件,图片有良好的解决方案,因此不会因为存储太大而影响索引的入库效率。
针对以上需求,lsql将分为两部分处理:
(1). 首先,针对2M及2M以下的文件体,lsql的解决方案如下:
- 创建相应表结构,文件体字段设为lsql可识别的特殊字段类型(类型待定)
- 将文件体按照一定规则转换格式(如二进制格式),再转换成kafka的json数组格式进行数据导入
- 通过关键字段检索,lsql自动根据第二步的规则将文件体转换回原文件体格式并展示
(2). 其次,针对2M以上的文件体,lsql的解决方案如下:
- 创建http共享目录,通过http方式lsql可以将图片等下载过来,并存储到hdfs里
- 创建相应表结构,文件路径设为lsql可识别的特殊字段类型(类型待定)
- 将bcp数据入库,lsql通过文件体路径特殊类型将共享目录下的文件拉取到hdfs上存储;
- 通过关键字段检索出文件体的下载路径streamID(如select streamID,name from lsql where sfz='220323199305261664';)
- lsql根据streamID,通过流的方式将文件下载下来(如http://127.0.0.1:1210/streamidsfz=220323199305261664)
6.10.3. 具体用法
目前可以支持http与hdfs上的大文件上传与下载。
1. 准备工作
关于hdfs和本地的测试文本、图片、视频作为被储存对象。
建表和建列簇,并且包括含有特殊列簇和普通列簇,其中列簇名包含hdfscolumnfamily为特殊列簇(其中hdfscolumnfamily不区分大小写)。
2. 建表和建列簇语句
create table info(
l_id y_string_is,
l_hdfspath y_string_is
);
create columnfamily info(
Default at 'index@true' 'store@false'
,nonhdfs at 'fields@l_id' 'index@true' 'store@true'
,hdfsColumnFamily_001 at 'fields@l_hdfspath' 'index@true' 'store@true'
);
注:此处创建表时字段必须为行存,创建列簇时列簇均需开启数据列簇管理,即'store@true'。
3. 测试文本数据
- 测试hdfs文本的列簇功能
(1) 数据入库:
sh load.sh -t info -tp txt -f /testhdfsdata.txt -sp , -fl l_id,l_hdfspath
(2) 数据库可查看到:
(3) 将l_hdfspath的路径黏贴在10.10.12.7:1210/columnfamily?val=的固定路径后面即可下载数据(10.10.12.7为测试节点ip):
(4) 将下载的数据和从hdfs copyToLocal的数据源进行md5比对:
- 测试服务器上的https的数据源
(1) 数据入库:
sh load.sh -t info -tp txt -f /testlocaldata.txt -sp , -fl l_id,l_hdfspath
(2) 数据库可查看到:
(3) 将l_hdfspath的路径黏贴在10.10.12.7:1210/columnfamily?val=的固定路径后面即可下载数据:
(4) 将下载的数据和服务器上的数据源进行md5比对:
4. 测试图片数据
- 测试hdfs的图片数据
(1) 数据入库:
sh load.sh -t info -tp txt -f /testhdfsimage.txt -sp , -fl l_id,l_hdfspath
(2) 数据库可查看到:
(3) 将l_hdfspath的路径黏贴在10.10.12.7:1210/columnfamily?val=的固定路径后面即可下载数据:
(4) 将下载的数据和从hdfs copyToLocal的数据源进行md5比对:
- 测试https的图片数据。
(1) 数据入库:
sh load.sh -t info -tp txt -f /testlocalimage.txt -sp , -fl l_id,l_hdfspath
(2) 数据库可查看到:
(3) 将l_hdfspath的路径黏贴在10.10.12.7:1210/columnfamily?val=的固定路径后面即可下载数据:
(4) 将下载的数据和服务器上的数据源进行md5比对:
5. 测试视频数据
- 测试hdfs的视频数据。
(1) 数据入库:
sh load.sh -t info -tp txt -f /testhdfsvideo.txt -sp , -fl l_id,l_hdfspath
(2) 数据库可查看到:
(3) 将l_hdfspath的路径黏贴在10.10.12.7:1210/columnfamily?val=的固定路径后面即可下载数据:
(4) 将下载的数据和从hdfs copyToLocal的数据源进行md5比对:
- 测试https的视频数据。
(1) 数据入库:
sh load.sh -t info -tp txt -f /testlocalvideo.txt -sp , -fl l_id,l_hdfspath
(2) 数据库可查看到:
(3) 将l_hdfspath的路径黏贴在10.10.12.7:1210/columnfamily?val=的固定路径后面即可下载数据:
(4) 将下载的数据和服务器上的数据源进行md5比对: