统一数据模型
仓鼠系统使用了统一的数据源模型来定义各类数据源信息,含数据库、Web服务、特殊应用服务类。基本的拆分思路是将特定数据源的连结信息按数据库对象结构,拆分为3层结构:
数据服务
数据类型 | 数据源类型 | 第1层-数据源(根目录) | 第2层-数据库(顶层目录) | 第3层-数据表 | 任务配置(工作目录) | 账户-域名 | 账户名 | 密码 |
---|---|---|---|---|---|---|---|---|
数据 | 关系型数据库 RDS | 服务器名或IP | 数据库实例名 | 数据表名 | - | 账户域名(可选) | 账户 | 密码 |
文件服务
数据类型 | 数据源类型 | 第1层-数据源(根目录) | 第2层-数据库(顶层目录) | 第3层-数据表 | 任务配置(工作目录) | 账户-域名 | 账户名 | 密码 |
---|---|---|---|---|---|---|---|---|
文件 | 共享目录 | 服务器名或IP | 共享目录名 (仅第一层目录名) | - | 子目录\文件名 | 账户域名(可选) | 账户 | 密码 |
文件 | 本地目录 Windows | 目录业务名称 | 绝对目录路径,如:( D:\Temp\wkr) | - | 子目录名 | 账户域名(可选) | 账户 | 密码 |
文件 | 本地目录 Linux | 目录业务名称 | 根目录路径,如:( \\hamster\wkr) | - | 子目录 | 账户 | 密码 | |
文件 | 文件服务 FTP | 服务器名或IP | 根目录 (/) | - | 子目录/文件名 | 账户 | 密码 | |
文件 | 文件服务 SFTP | 服务器名或IP | 根目录 (/) | - | 子目录/文件名 | 账户 | 密码 | |
文件 | SharePoint 站点 | 站点主域名地址 (含协议) | (子)站点名(去除主域名后,目标文档库所在的(子)站点名) | - | 文档库/子目录/文件名 | 账户域名 | 账户 | 密码 |
云服务
数据类型 | 数据源类型 | 第1层-数据源(根目录) | 第2层-数据库(顶层目录) | 第3层-数据表 | 任务配置(工作目录) | 账户-域名 | 账户名 | 密码 |
---|---|---|---|---|---|---|---|---|
文件 | AWS S3 | 外网 EndPoint (如下案例) | 全局存储桶名 | - | 子节点/文件名 | - | AccessKeyId | SecretAccessKey |
文件 | 阿里云 OSS | 外网 EndPoint (如下案例) | 全局存储桶名 | - | 子节点/文件名 | - | AccessKey ID | AccessKey Secret |
文件 | 华为云 OBS | 外网 EndPoint (如下案例) | 全局存储桶名 | - | 子节点/文件名 | - | AccessKeyId | SecretAccessKey |
文件 | 腾讯云 COS | 外网 EndPoint (如下案例) | 全局存储桶名 | - | 子节点/文件名 | - | API:SecretId | API:SecretKey |
文件 | Azure Blob | 外网 EndPoint (可选:core.windows.net) | 存储账户下容器名 | - | 子节点/文件名 | - | 存储账户名 | 访问密钥Key |
即时服务
数据类型 | 数据源类型 | 第1层-数据源(根目录) | 第2层-数据库(顶层目录) | 第3层-数据表 | 任务配置(工作目录) | 账户-域名 | 账户名 | 密码 |
---|---|---|---|---|---|---|---|---|
服务 | 企微 WeComm | 企业环境名称 (配置CorpId) | 自建应用 (配置AgentId、SecuritKey) | - | - | - | - | - |
服务 | 企微 WeComm | 企业环境名称 | 群机器人组 | 机器人名称 (配置服务地址:Webhook URL) | - | - | - | - |
服务 | 钉钉 DingTalk | 企业环境名称 (配置CorpId) | 自建应用 (配置AgentId、SecuritKey) | - | - | - | - | - |
服务 | 飞书 Feishu | 企业环境名称 | 自建应用 (配置AppKey、SecuritKey) | - | - | - | - | - |
服务 | 群机器人 Webhook | 机器人环境名称 | 业务分组名称 | 功能名称 (配Webhook URL) | - | - | - | - |
应用服务
数据类型 | 数据源类型 | 第1层-数据源(根目录) | 第2层-数据库(顶层目录) | 第3层-数据表 | 任务配置(工作目录) | 账户-域名 | 账户名 | 密码 |
---|---|---|---|---|---|---|---|---|
服务 | 阿兹卡班 Azkanban | 服务Url地址 (含协议和端口号) | / (恒为/) | - | 配置 项目和流名称 | - | - | - |
消息 | 消息队列 | 服务器名或IP(不含协)+端口号 | 队列名+协议类型及配置 | - | - | - | - | - |
特定数据源案例
案例: AWS S3 对象存储
对象存储的存储桶区域,需要选择对应的EndPoint地址。如下:
地域 ID | 外网 Endpoint(第1层-数据源) | 存储桶(第2层-数据库) |
---|---|---|
北京 | cn-north-1 | 全局桶名 |
宁夏 | cn-northwest-1 | 全局桶名 |
案例: 阿里云 OSS 对象存储
阿里云的对象存储的存储桶区域,需要选择对应的EndPoint地址。如下:
地域 ID | 外网 Endpoint(第1层-数据源) | 存储桶(第2层-数据库) |
---|---|---|
oss-cn-hangzhou | http://oss-cn-hangzhou.aliyuncs.com | 全局桶名 |
oss-cn-shanghai | http://oss-cn-shanghai.aliyuncs.com | 全局桶名 |
oss-cn-shenzhen | http://oss-cn-shenzhen.aliyuncs.com | 全局桶名 |
oss-cn-beijing | http://oss-cn-beijing.aliyuncs.com | 全局桶名 |
案例: 华为 OBS 对象存储
对象存储的存储桶区域,需要选择对应的EndPoint地址。如下:
地域 ID | 外网 Endpoint(第1层-数据源) | 存储桶(第2层-数据库) |
---|---|---|
cn-north-1 | https://obs.cn-north-1.myhuaweicloud.com | 全局桶名 |
cn-east-2 | https://obs.cn-east-2.myhuaweicloud.com | 全局桶名 |
cn-east-3 | https://obs.cn-east-3.myhuaweicloud.com | 全局桶名 |
案例: 腾讯 COS 对象存储
对象存储的存储桶区域,需要选择对应的EndPoint地址。如下:
地域 ID | 外网 Endpoint(第1层-数据源) | 存储桶(第2层-数据库) |
---|---|---|
上海 | ap-shanghai | 全局桶名 |
北京 | ap-beijing | 全局桶名 |
广州 | ap-guangzhou | 全局桶名 |
案例: SharePoint文档库
需要访问MyDoc文档库中按当前日期命名的目录文件。
目标文档库MyDoc站点地址如:http://sharepoint.flyenter.com/sites/IT/DI/MyDoc/2020-09-19
拆分如:
- 数据源:http://sharepoint.flyenter.com (SharePoint站点的主域名,含协议头)
- 数据库:sites/IT/DI (目标文档库MyDoc隶属的子站点。IT为一级站点,DI为二级站点)
- 数据表:(不配置)
- 任务中配置的子路径:MyDoc/2020-09-19 (文档库即其下的目录名称)
案例:共享目录路径拆分
目标共享目录地址如:\\127.0.0.1\share\datalake\2023-08-29
,其中:
- 数据源(RootFolder):
127.0.0.1
- 数据库(TopFolder):
share
- 工作目录(WorkingFolder):
datalake\2023-08-29
基于上述场景,假设工作目录下面有子目录 \\127.0.0.1\share\datalake\2023-08-29\docs\masterdata
,则可以产生如下的路径地址:
- 纯相对路径(PureRelativedPath):
docs\masterdata
- 相对路径(RelativedPath):
datalake\2023-08-29\docs\masterdata
- 完全路径(FullPath):
\\127.0.0.1\share\datalake\2023-08-29\docs\masterdata
路径相关概念
文件系统完整路径可拆分为:协议头+根目录+顶层目录+工作目录+子目录+文件名
- 协议头(ProxyHeader): 只特定文件系统访问时使用的协议,如https://, ftp://, \\等
- 根目录(RootFolder):指数据源层定义的内容,初始化链接时及自动配置好
- 顶层目录(TopFolder):数据库层定义的子站点/第一层共享目录/第一层服务目录/桶内第一级目录等
- 工作目录(WorkingFolder):指在应用任务中配置的子目录节点
- 子目录(SubFolder):指在访问工作目录时,遍历出来的子目录节点,该节点是动态变化的
- 纯相对路径(PureRelativedPath): 特指工作目录下的子目录地址,路径中不含工作目录及其上地址。
- 相对路径(RelativeFolder):指从工作目录开始,且仅含工作目录的路径地址。
- SharePoint :工作目录+子目录(文件名)
- SFTP :顶层目录+工作目录+子目录
- ShareFolder :工作目录+子目录
- AWS S3 :顶层目录+工作目录+子目录
- 完全路径(FullPath):指拼接了协议头+根+顶层目录+工作目录+子目录(文件名)的完整路径
路径相关功能
- GetRootAndTopPath():获取协议头+根+顶层目录
- GetParentPath(currentPath): 从当前路径中提取父级目录名称,返回路径尾部不含链接符
- ConvertToFullPath(relativeFolder): 用于将相对路径转换成完整路径,及添加相应的协议头和根等头部节点信息
- ConvertToRelativePath(currentPath): 剔除当前路径中的协议头+根目录的部分,SharePoint站点会再去除顶层目录(当前站点)信息
- ConvertToRelativePath(currentPath, parentPath): 基于父节点路径,将当前(可能是完全路径)路径转换成仅针对父节点的纯子相对路径。
- 这里面的父节点,有可能是工作目录,也有可能是遍历后的子目录,PureRelativePath是仅仅针对当前父节点来计算的。
- 如果没有提供父节点目录,则默认剔除协议头/根/顶层目录组成父节点路径。
- CombinePathNode(firstPath,params string[] pathNodes): 针对特定数据源类型,采取相应的链接符链接多个路径节点,不清理链接后路径的收尾是否有链接符