总览
具备以下功能点:
1)、支持各种类型的文件。支持文本形式和二进制形式的文件,如果是在大数据领域的用户,可以将他们的脚本文件、物料压缩包都可以存储到本系统中。
2)、服务无状态,多实例部署,做到服务高可用。本系统在部署的时候,可以进行多实例部署,每个实例对外独立提供服务,不会互相干扰,所有的信息都是存储在数据库中进行共享。
3)、使用方式多样。提供Rest接口和SDK两种方式,用户可以根据自己的需要进行选择。
4)、文件采用追加方式,避免过多的HDFS小文件。HDFS小文件多会导致HDFS整体性能的下降,我们采用了文件追加的方式,将多个版本的资源文件合成一个大文件,有效减少了HDFS的文件数量。
5)、精确权限控制,用户资源文件内容安全存储。资源文件往往会有重要的内容,用户只希望自己可读
6)、提供了文件上传、更新、下载等操作任务的生命周期管理。
1、Service层 包含资源管理、上传资源、下载资源、共享资源还有工程资源管理。
资源管理负责资源的增删改查操作,访问权限控制,文件是否过期等基本操作。
2、文件版本控制 每个BML资源文件都是具有版本信息的,同一个资源每次更新操作都会产生一个新的版本,当然也支持历史版本的查询和下载操作。BML使用版本信息表记录了每个版本的资源文件HDFS存储的偏离位置和大小,可以在一个HDFS文件上存储多个版本的数据。
3、资源文件存储 主要使用HDFS文件作为实际的数据存储,HDFS文件可以有效保证物料库文件不被丢失,文件采用追加方式,避免过多的HDFS小文件。
上传文件:
判断用户上传文件的操作类型,属于首次上传还是更新上传,如果是首次上传需要新增一条资源信息记录,系统已经为这个资源生成了一个全局唯一标识的resource_id和一个资源放置的位置resource_location。资源A的第一个版本A1需要在HDFS文件系统中resource_location位置进行存储。存储完之后,就可以得到第一个版本记为V00001,如果是更新上传需要查找上次最新的版本。
上传文件流到指定的HDFS文件,如果是更新则采用文件追加的方式加到上次内容的末尾。
下载文件:
用户下载资源的时候,需要指定两个参数一个是resource_id,另外一个是版本version,如果不指定version的话,默认下载最新版本。
用户传入resource_id和version两个参数到系统之后,系统查询resource_version表,查到对应的resource_location和start_byte和end_byte进行下载,通过流处理的skipByte方法,将resource_location的前(start_byte-1)个字节跳过,然后读取到end_byte 字节数。读取成功之后,将流信息返回给用户。
在resource_download_history中插入一条下载成功的记录
1、资源信息表(resource)
2、资源版本信息表(resource_version)
3、资源下载历史表(resource_download_history)