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) 数据库可查看到:

img

(3) 将l_hdfspath的路径黏贴在10.10.12.7:1210/columnfamily?val=的固定路径后面即可下载数据(10.10.12.7为测试节点ip):

img

(4) 将下载的数据和从hdfs copyToLocal的数据源进行md5比对:

img

  • 测试服务器上的https的数据源
(1) 数据入库:
sh load.sh -t info -tp txt -f /testlocaldata.txt -sp , -fl l_id,l_hdfspath
(2) 数据库可查看到:

img

(3) 将l_hdfspath的路径黏贴在10.10.12.7:1210/columnfamily?val=的固定路径后面即可下载数据:

img

(4) 将下载的数据和服务器上的数据源进行md5比对:

img

4. 测试图片数据

  • 测试hdfs的图片数据
(1) 数据入库:
sh load.sh -t info -tp txt -f /testhdfsimage.txt -sp , -fl l_id,l_hdfspath
(2) 数据库可查看到:

img

(3) 将l_hdfspath的路径黏贴在10.10.12.7:1210/columnfamily?val=的固定路径后面即可下载数据:

img

(4) 将下载的数据和从hdfs copyToLocal的数据源进行md5比对:

img

  • 测试https的图片数据。
(1) 数据入库:
sh load.sh -t info -tp txt -f /testlocalimage.txt -sp , -fl l_id,l_hdfspath
(2) 数据库可查看到:

img

(3) 将l_hdfspath的路径黏贴在10.10.12.7:1210/columnfamily?val=的固定路径后面即可下载数据:

img

(4) 将下载的数据和服务器上的数据源进行md5比对:

img

5. 测试视频数据

  • 测试hdfs的视频数据。
(1) 数据入库:
sh load.sh -t info -tp txt -f /testhdfsvideo.txt -sp , -fl l_id,l_hdfspath
(2) 数据库可查看到:

img

(3) 将l_hdfspath的路径黏贴在10.10.12.7:1210/columnfamily?val=的固定路径后面即可下载数据:

img

(4) 将下载的数据和从hdfs copyToLocal的数据源进行md5比对:

img

  • 测试https的视频数据。
(1) 数据入库:
sh load.sh -t info -tp txt -f /testlocalvideo.txt -sp , -fl l_id,l_hdfspath
(2) 数据库可查看到:

img

(3) 将l_hdfspath的路径黏贴在10.10.12.7:1210/columnfamily?val=的固定路径后面即可下载数据:

img

(4) 将下载的数据和服务器上的数据源进行md5比对:

img

Copyright © lucene.xin 2020 all right reserved修改时间: 2021-07-02 11:42:23

results matching ""

    No results matching ""