云平台的XML数据资源全文索引库表设计
名称:xml全文索引设计
版本:V1.0
数据库支持:SqlServer 、SqlLite、mySql、Oracle
设计背景:
1、平台的整体的数据表达根据FHIR的设计要求,采用XML数据格式。
2、公共云和私有云和客户端对XML数据快速查询的支持。大型数据库SQLserver、Oracle等对支持XML查询,经过测试对复杂性和速度的性能都不尽人意。需要一套全新的xml全文索引方式来保证海量数据的查询要求。
3、各级平台和应用对数据部署的快速部署要求,SQLserver、Oracle等对于中小应用数据库的快速部署相对复杂一些,需要制定一套全新的数据库部署方案。
设计原则:
1、保证中小客户的快速部署也要考虑中大型客户对海量数据分布和集群的要求。
2、对海量数据的存储和快速检索
设计目标:
1、小型客户免安装数据库,自动完成对数据的部署。大型数据库可以采用人工干预的方法。
2、数据资源检索速度,1000万索引记录小于300MS。
设计方案:
设计一套跨数据库XML数据表达的数据索引方案。同时建立一套具有数据时效性调度机制的数据存储,保证海量数据对业务的速度要求。
1、V1.0版: 中小型客户采用SqlLite数据库,大型客户可以采用Sqlserver
2、根据资源数据的性质,数据分为
Base:基础数据
Resource:资源数据
Log:日志资源数据
BPM:工作流资源数据
3、根据数据时效性分为
Excute:可执行数据,可以对资源进行CRUD等操作
Parellel:并行数据,可以与Excute数据进行联合查询,但不能做删除、增加、修改等业务操作。
History:历史数据,不参与直接运行,相当于历史的备份,可以通过相应的Restful API 查询。
sqlLite
4、V1.0资源处理,每个资源存储单元(ResourceDataStoreUnit)独立的数据分布,资源类型(resourceType)放在同一个Main表中
每个存储单元定义一个文件夹
库名定义:
库名称 |
说明 |
|
Base |
存放系统基础设置和数据字典等数据 |
|
Resource |
存放客户业务数据 |
|
BPM |
存放工作业务流实例数据 |
|
Log |
存放日志资源,请求和任务执行过程 |
|
Parallel |
并行库
|
只能查询 |
History |
历史库 |
只能条件(库名)查询 |
表名称定义
表名称 |
说明 |
|
Main |
资源主表 |
|
FullTextIndex |
资源全文索引 |
|
History |
历史主表 |
|
HistoryFullTextIndex |
历史资源全文索引 |
Main表结构
字段名 |
说明 |
类型 |
IDS |
主键 |
Int64 |
LogicID |
逻辑ID |
NVARCHAR (32) |
ResourceType |
资源类型 |
NVARCHAR(50) |
VersionID |
版本ID |
NVARCHAR(4) |
Digest |
摘要 |
[Digest] NVARCHAR(500) |
ResourceSavePath |
资源保存路径 |
NVARCHAR(100) |
LastUpdateTime |
最后更新时间 |
DATETIME |
Status |
状态 |
TinyInt |
Operator |
操作员ID |
CHAR(32) |
UnitID |
单位ID |
CHAR(32) |
http://xxx.xxx.x.x:80/patition/23
联合主键:LogicID+ResourceType
FullTextIndex
字段名 |
说明 |
类型 |
IDS |
外键 |
Int64 |
LogicID |
逻辑ID |
NVARCHAR (32) |
ResourceType |
资源类型 |
NVARCHAR(50) |
ElementValue |
元素值 |
NVARCHAR(255) |
XPath |
Xpath路径murmurHash值 |
BigInt |
XPath2 |
Xpath路径2 |
NVARCHAR(500) |
Expression |
表达式 |
NVARCHAR(100) |
联合索引:xpath+ElementValue+resourceType
History
字段名 |
说明 |
类型 |
IDS |
IDS |
|
LogicID |
逻辑ID |
|
ResourceType |
资源类型 |
|
VersionID |
版本ID |
|
Digest |
摘要 |
|
ResourceSavePath |
资源保存路径 |
|
LastUpdateTime |
最后更新时间 |
|
Status |
状态 |
|
Operator |
操作员ID |
|
UnitID |
单位ID |
联合主键:LogicID+ResourceType+VersionID
HistoryFullTextIndex
IDS |
History外键 |
|
LogicID |
||
ResourceType |
||
ElementValue |
||
XPath |
||
XPath2 |
||
Expression |
联合索引:xpath+ElementValue+resourceType
SqlServer
每个APP定义一个库
表名称定义 AppNo_Base
表名称 |
说明 |
|
Base_Main |
资源主表 |
|
Base_FullTextIndex |
资源全文索引 |
|
Base_History |
历史主表 |
|
Base_HistoryFullTextIndex |
历史资源全文索引 |
|
Resource_Main |
资源主表 |
|
Resource _FullTextIndex |
资源全文索引 |
|
Resource _History |
历史主表 |
|
Resource _HistoryFullTextIndex |
历史资源全文索引 |
|
BPM _Main |
资源主表 |
|
BPM _FullTextIndex |
资源全文索引 |
|
BPM _History |
历史主表 |
|
BPM _HistoryFullTextIndex |
历史资源全文索引 |
|
Log_Main |
资源主表 |
|
Log_FullTextIndex |
资源全文索引 |
|
Log_History |
历史主表 |
|
Log_HistoryFullTextIndex |
历史资源全文索引 |
|
Parallel_Main |
资源主表 |
|
Parallel_FullTextIndex |
资源全文索引 |
|
Parallel_History |
历史主表 |
|
Parallel_HistoryFullTextIndex |
历史资源全文索引 |
|
History_Main |
资源主表 |
|
History_FullTextIndex |
资源全文索引 |
|
History_History |
历史主表 |
|
History_HistoryFullTextIndex |
历史资源全文索引 |
Sqllite 数据库是分文件的。如果并行库和运行库在同一个硬盘上没有意义,其他大型数据库可以采用表横切接收将并行库放到其他硬盘上,也可以采用服务器集群来解决访问性能问题。历史库可以做成集群方式,采用sqllite 可以使用多硬盘或者多服务来解决性能问题。
文件保存机制:
采用数据库格式存储:
SqlLite文件名: 放在APP文件夹中 DocumentBase_ExcuteParalle 和 DocumentBase_History
表明:Document
SqlServer:库名AppNo_Document_ExcuteParalle
和 AppNo_Document_History
表明:Document
字段名 |
格式 |
|
Uri |
string |
xx\YY\123(主键) |
TextEncoding |
string |
|
HttpContentType |
string |
|
CreateTime |
DateTime |
|
Content |
binary |
最大10M |
FilePath |
string |
大于10M存路径 |
RDF.Author |
String |
uri |
RDF.Date |
||
RDF.Creator |
主键种子:LogicSeed
字段名 |
格式 |
|
key |
string |
|
value |
int |
URI数据解析
文件:逻辑文件夹+文件名称
health\Emr\V1000\aaa.dll
health\Emr\V1001\aaa.dll
根据扩展名确定 HttpContextType
Dll/exe: application/x-msdownload
txt/ini: text/plain
资源:逻辑路径+资源version
health\resource\patient\123\_history\246
HttpContextType:text/xml
logicID编码规格:默认规则编码和客户自定义规则
在ResourceModelDefinition中定义其编码规则
<!–defalut:起点从99999999999开始没有结束–>
<!–custom用户自定义(不允许实现纯正整数数字)–>
<!–range标识启动和终点–>
dataModelDefine采用默认分类路径:dmd.health
资源体系采用结合RDF资源表达体系
名称 |
||
LogicID |
必填 |
|
VersionID |
必填 |
|
Type |
类别 |
必填 |
Name |
名称(机读) |
必填 |
Title |
标题(人读) |
|
Creator |
资源创建者 |
必填 |
Author |
作者 |
必填 |
Date |
创建日期 |
必填 |
Format |
资源类别,采用code httpcontexttype |
必填 |
Subject |
一个资源内容的主题,表达对谁的资源数据 |
|
Publisher |
发布者,根据情况进行描述性表达 |
|
Language |
资源内容使用的语言 |
|
Identifier |
身份识别标识 |
|
Description |
描述 |
|
Relation |
关联性资源 |
|
Coverage |
作用域或者氛围表达 |
|
Rights |
权利信息 |
|
Source |
一个对作为目前资源的来源的资源引用。 |
document:type+logicid +versionid
read type+logicid
1\main:为了检索 最新versionid
2\documnte(主键读取)
vread type+logicid+versionid
1\直接从document 读(主键读)
history 从 history type+logicid
hisotry-type type
search 参数(xpath+value+type)
1、main的 fulltext 查找 (xpath+value+type) 返回 ids
2、在main 找到 :type+logicid +versionid
3、document
create: If-None-Exist(Search)
update:etag\search (从main 利用 type+logicid 校验 versionid)
delete:logicid+type(search)