通用力场数据库及其更新方法和检索方法
技术领域
本发明属于分子力场技术领域,具体为通用力场数据库及其更新方法和检索方法。
背景技术
力场技术是分子和晶体模拟中用来精确计算结构和能量的计算技术。在力场的开发、优化和具体使用中需要大量的数据,包括分子数据、分子片段数据、力场参数和原子类型相关数据、力场计算数据、量化计算的数据、实验数据、分子动力学模拟数据等。目前还没有集上述数据于一体的统一数据库,只有独立的分子数据库和实验数据库可供用户选择。最大的公开分子数据库是PubChem。
在科学模拟计算中通常会用量化计算数据和实验数据作为训练、拟合、验证的标准数据。由于没有集上述数据于一体的统一数据库,所以为物理、化学和生物中的模拟计算相关的科学研究和生产研发带来了很多困扰。当前大家的普遍做法是从独立的分子数据库采集合适的分子,然后用这些分子去匹配另外的实验数据库,接着自己做量化计算采集量化数据,最后将这些数据汇总到一起使用。在这个环节中弊端如下:
需要从不同的地方采集数据,容易出错,而且数据量大,时间长,效率低;
各个地方采集来的数据格式都不同,如果要一起使用,需要做大量的数据清洗和整理工作,时间和人工成本非常高;
力场计算数据、量化计算数据、分子动力学模拟数据市场上都没有数据库,用户自己计算成本非常高;
单独的数据库没有办法对数据做交叉验证,所以很难保障数据的准确性,从人工数据录入到系统数据持久化都可能出现错误,导致数据不准。
发明内容
针对上述技术问题,本发明提供一种效率高、成本低的通用力场数据库,及其更新方法和检索方法,具体技术方案为:
通用力场数据库,包括模型层、视图层、控制层的3层MVC架构;
所述的模型层,数据存储采用SQL+文件数据库的混合架构,核心数据包括SQL中的8张表,分别是分子表,分子片段表、力场参数表、原子类型表、力场计算数据表、量化计算数据表、实验数据表、分子动力学模拟数据表;力场计算、量化计算、分子动力学模拟的计算日志都是以文件的形式存储在文件数据库中的;
控制层包括4个核心模块,分别为数据采集模块、数据清洗模块、数据校验模块和数据检索模块;所述的数据采集模块对模型层有读写的权限;数据校验模块、数据检索模块对模型层只有读的权限;数据清洗模块只被数据采集模块调用,对模型层没有读写权限;
所述的视图层用Python封装的SDK实现;
控制层和视图之间通信连接。
进一步的,该通用力场数据库的更新方法,所述的数据库的更新包括两种方式:定期从公开的数据源获取最新的元数据,根据数据仓库的数据更新从公开的数据源获取目标数据;
所述的定期从公开的数据源获取最新的元数据,包括以下过程:
(1)用户通过SDK向数据采集模块发送需要获取数据的数据源地址,更新频率,以及数据源中的数据与标准数据的对应关系;
(2)数据采集模块内部持续运行的定时器,根据用户设定的更新频率,定时器触发更新,数据采集模块主动向数据源发送请求获取数据;
(3)数据源返回数据后,数据采集模块将数据存储在临时文件系统中;
(4)数据采集模块调用数据清洗模块按标准数据格式清洗数据,并将输出的标准化的数据存储在临时文件系统中;
(5)数据采集模块调用数据校验模块,按照预设的规则逐一校验标准化后的数据,并将通过校验的数据传给模型层添加到数据库中;
(6)未通过校验的数据会记录到疑似错误数据表中,用户可以通过SDK手动编辑数据,并重新校验。
所述的根据数据仓库的数据更新从公开的数据源获取目标数据,包括以下过程:
(1)用户主动导入数据,用户通过SDK向数据采集模块主动导入了一批数据;
其中,所述的用户主动导入数据的方法为,用户通过SDK向数据采集模块发送需要导入的数据和数据类型,导入的数据格式支持JSON、XML、TXT、CVS、数据类型可以指定分子、分子片段、力场参数、原子类型、力场计算数据、量化计算数据、实验数据;将用户上传的数据存储在临时文件系统中。
(2)数据采集模块会根据用户导入的数据自动判断哪些已有的数据源与这些数据有关联,并向这些数据源发送获取数据请求;
(3)以下步骤同所述的定期从公开的数据源获取最新的元数据的步骤(3)~步骤(6)。
进一步的,该通用力场数据库更新方法,还包括数据清洗,数据清洗由数据采集模块触发,包括以下过程:
(1)数据采集模块调用数据清洗模块,并将需要清洗的数据从临时文件系统传给数据清洗模块;
(2)数据清洗模块首先会根据数据内容和类型标记判断需要清洗的数据的类型;并根据类型调用相应的解释器;
(3)解释器安装标准格式据逐一匹配内容,如果匹配成功,就将数据填入内存里对应的数据结构中;
(4)直到全部数据匹配完成,内存中的数据就是清洗好的数据,模,将这些数据持久化到临时文件系统中。
该通用力场数据库更新方法,还包括数据校验,数据校验由数据采集模块触发,包括以下过程:
(1)数据采集模块调用数据校验模块,并将需要校验的数据从临时文件系统传给数据校验模块;
(2)数据校验模块逐条校验数据,首先识别数据的类型,根据数据的类型,从模型层读取相应的校验规则列表;
(3)按校验规则列表逐条匹配需要校验的单条数据,对每一条校验规则,先请求模型层,获取校验规则中需要用到的数据,然后通过校验规则运算后看看与被校验数据是否一直,如果一致则校验成功,如果不一致则校验失败;
(4)上述步骤循环完成后全部通过校验的数据会被模块持久化到临时文件系统中。
本发明还提供该通用力场数据库检索方法,包括简单数据检索和复杂数据检索;
所述的简单数据检索,包括以下过程:
(1)用户通过SDK向数据检索模块发送检索请求,请求包括要查询的数据表、字段和查询条件;
(2)数据检索模块将检索请求发送到模型层,模型层将请求转换成SQL语句,访问数据库得到查询结果;
(3)模型层将结果返回数据检索模块,再返回用户SDK,完成检索;
所述的复杂数据检索,包括以下过程:
(1)用户通过SDK向数据检索模块发送检索请求,请求包括模糊查询条件和查询结果对应的数据表及字段;
(2)数据检索模块根据模糊查询条件调用模型层的方法转换成精确查询条件,即涉及的数据表及字段,然后将精确查询条件发送给模型层,模型层将请求转换成SQL语句,访问数据库得到查询结果;
(3)模型层将结果返回数据检索模块,再返回用户SDK,完成检索。
其中,所述的复杂数据检索中步骤(2)模糊查询条件转换成精确查询条件的方法为,利用自然语言识别算法识别出模糊查询条件涉及的数据表、字段、字段条件以及其之间的逻辑关系,将识别出来的内容转换成数据库第三范式下的查询条件,得到精确的查询条件。
本发明是一个集分子数据、分子片段数据、力场参数和原子类型相关数据、力场计算数据、量化计算的数据、实验数据、分子动力学模拟数据于一体的数据仓库。
具有的核心功能:
(1)数据采集:本发明提供系统主动采集和用户主动导入两种模式输入数据。主动采集部分是由我们自主研发的Python分布式爬虫实现的。支持定期从公开的数据源获取最新的元数据。支持根据数据仓库的数据更新从公开的数据源获取目标数据。用户主动导入部分允许用户将本地的数据资料上传到数据仓库。
(2)数据清洗:主动采集和用户导入的数据都是外部数据,数据格式各不相同,无法直接使用。本发明从化学基本原理出发,设计了一套标准的数据格式,数据清洗模块会将外部数据转换成标准的数据格式,保证数据仓库的数据格式正确。
(3)数据校验:分子数据、分子片段数据、力场参数和原子类型数据、力场计算数据、量化计算数据、实验数据、分子动力学模拟数据之间是有非常紧密的关系的。例如对同一个分子或分子片段,用力场参数计算出来的能量与量化计算数据中的能量表达的是同一个物理量,如果两者误差超过容差范围,则其中一个数据有误。
(4)数据检索:本发明从使用场景出发实现了常规的简单检索功能和复杂的高级检索功能。简单检索功能包括按基础表的字段全文检索、模糊匹配检索、按逻辑表达式检索等。高级检索包括查询包含某个分子基团的实验蒸发焓数据,查询量化计算键角偏离标准2%的全部分子等。
本发明提供的通用力场数据库及其更新方法和检索方法,具有的技术效果:
(1)本发明的系统架构支持1000亿条数据、1000TB级别规模的数据,远超现有单一数据库的数据规模。而且利用关系型数据存储+文件型数据存储的模式,很好的支持了多类型数据的存储,平衡了数据更新和数据检索之间的性能平衡。本发明的技术方案在实验阶段已经采集500多万个分子,拥有分子片段5000多万个,30多版不同的力场参数,20多版不同的原子类型,1多亿条力场计算数据,2000多万条量化计算数据、1000多万条分子动力学模拟数据、10多万条实验数据。全面丰富的数据,海量的数据存储架构,填补了业界的空白。
(2)本发明的数据全部经过其他数据的组合验证,较现有单一的数据库准确度高很多。
(3)因为集多种数据于一体,所以可以通过这一个数据库获取到研究生产所需的全部数据,而且检索速度快,检索方式简洁,大幅提升了效率。
具体实施方式
结合实施例说明本发明的具体技术方案。
通用力场数据库,包括模型层、视图层、控制层的3层MVC架构。
模型层的数据存储采用SQL+文件数据库的混合架构,核心数据设计成SQL中的8张表,分别是分子表,分子片段表、力场参数表、原子类型表、力场计算数据表、量化计算数据表、实验数据表、分子动力学模拟数据表。力场计算、量化计算、分子动力学模拟的计算日志都是以文件的形式存储在文件数据库中的。控制层包括4个核心模块,数据采集模块、数据清洗模块、数据校验模块和数据检索模块。数据采集模块对模型层有读写的权限;数据校验模块、数据检索模块对模型层只有读的权限;数据清洗模块只被数据采集模块调用,对模型层没有读写权限。由于本系统的数据使用场景都是批量操作,所以视图层用Python封装的SDK实现。控制层和视图之间的通信协议是https协议,所以用户也可以直接用https请求操作控制层。
运行环境:
本发明可以部署在公有云上、本地集群上,也可以部署在用户的个人电脑上。
系统运行硬件环境:Intel i7及以上处理器、16G以上内存、500G以上硬盘存储空间。
系统运行软件环境:Linux 4以上内核版本,Python2.7运行环境。
该数据库工作方式,包括数据更新、检索方法。
其中数据更新有:
1、定期从公开的数据源获取最新的元数据:
(1)用户通过SDK向数据采集模块发送需要获取数据的数据源地址,更新频率,比如每小时、每天、每周等,以及数据源中的数据与标准数据的对应关系;
(2)数据采集模块内部有一个持续运行的定时器,根据用户设定的更新频率,定时器会触发更新,这时数据采集模块会主动向数据源发送请求获取数据,通常获取的是从上一次更新到现在新变更的数据;
(3)数据源返回数据后,数据采集模块会将数据存储在临时文件系统中;
(4)然后数据采集模块调用数据清洗模块按标准数据格式清洗数据,并将输出的标准化的数据存储在临时文件系统中;
(5)数据采集模块接下来会调用数据校验模块,按照以下规则逐一校验标准化后的数据,并将通过校验的数据传给模型层添加到数据库中;
数据校验规则(部分)
1.同一个分子力场计算数据能量与量化计算数据能量一致;
2.同一个分子力场计算数据力与量化计算数据力一致;
3.同一个分子力场计算数据海森矩阵与量化计算数据海森矩阵一致;
4.同一个分子力场计算数据键长与量化计算数据键长一致;
5.同一个分子力场计算数据键角与量化计算数据键角一致;
6.同一个分子力场计算数据二面角与量化计算数据二面角一致;
7.同一个分子力场计算数据频率与量化计算数据频率一致;
8.同一个分子力场计算的密度与实验数据密度一致;
9.同一个分子力场计算的蒸发焓与实验数据蒸发焓一致;
10.同一个分子力场计算的热熔与实验数据热熔一致;
11.同一个分子力场计算的表面张力与实验数据表面张力一致;
12.同一个分子动力学模拟数据的密度与实验数据密度一致;
13.同一个分子动力学模拟数据的蒸发焓与实验数据蒸发焓一致;
14.同一个分子动力学模拟数据的热熔与实验数据热熔一致;
15.同一个分子动力学模拟数据的表面张力与实验数据表面张力一致。
(6)未通过校验的数据会记录到疑似错误数据表中,用户可以通过SDK手动编辑数据,并重新校验。
2、根据数据仓库的数据更新从公开的数据源获取目标数据:
(1)用户通过SDK向数据采集模块主动导入了一批数据,用户通过SDK向数据采集模块发送需要导入的数据和数据类型,导入的数据格式支持JSON、XML、TXT、CVS、数据类型可以指定分子、分子片段、力场参数、原子类型、力场计算数据、量化计算数据、实验数据。并将用户上传的数据存储在临时文件系统中;
(2)数据采集模块会根据用户导入的数据自动判断哪些已有的数据源与这些数据有关联,并向这些数据源发送获取数据请求;
(3)接下来的流程同1、定期从公开的数据源获取最新的元数据的步骤(3)~步骤(6);
该数据库还包括数据清洗,数据清洗由数据采集模块触发,用户不会直接启动该流程,具体过程:
(1)数据采集模块调用数据清洗模块,并将需要清洗的数据从临时文件系统传给数据清洗模块;
(2)数据清洗模块首先会根据数据内容和类型标记判断需要清洗的数据的类型。并根据类型调用相应的解释器。例如是分子数据,就调用分子数据的解释器;实验数据,就调用实验数据的解释器;
(3)解释器安装标准格式据逐一匹配内容,如果匹配成功,就将数据填入内存里对应的数据结构中。所有内容初始都是按字符串的格式进入系统的,填入内存的时候会按数据标准格式转换成数字、日期、百分比、化学式等格式;
数据标准格式
(4)直到全部数据匹配完成。内存中的数据就是清洗好的数据,模块会将这些数据持久化到临时文件系统中。
该数据库还包括数据校验,数据校验由数据采集模块触发,用户不会直接启动该流程,具体过程:
(1)数据采集模块调用数据校验模块,并将需要校验的数据从临时文件系统传给数据校验模块;
(2)数据校验模块逐条校验数据,首先识别数据的类型,是分子数据、力场计算数据、还是实验数据等等;根据数据的类型,从模型层读取相应的校验规则列表;
(3)按校验规则列表逐条匹配需要校验的单条数据,对每一条校验规则,先请求模型层,获取校验规则中需要用到的数据,然后通过校验规则运算后看看与被校验数据是否一直,如果一致则校验成功,如果不一致则校验失败。
(4)上述流程循环完成后全部通过校验的数据会被模块持久化到临时文件系统中。
通用力场数据库检索方法,包括简单数据检索和复杂数据检索;
所述的简单数据检索,包括以下过程:
(1)用户通过SDK向数据检索模块发送检索请求,请求包括要查询的数据表、字段和查询条件;
(2)数据检索模块将检索请求发送到模型层,模型层将请求转换成SQL语句,访问数据库得到查询结果;
(3)模型层将结果返回数据检索模块,再返回用户SDK,完成检索;
所述的复杂数据检索,包括以下过程:
(1)用户通过SDK向数据检索模块发送检索请求,请求包括模糊查询条件和查询结果对应的数据表及字段;
(2)数据检索模块根据模糊查询条件调用模型层的方法转换成精确查询条件,即涉及的数据表及字段,然后将精确查询条件发送给模型层,模型层将请求转换成SQL语句,访问数据库得到查询结果;
所述的复杂数据检索中步骤(2)模糊查询条件转换成精确查询条件的方法为,利用自然语言识别算法识别出模糊查询条件涉及的数据表、字段、字段条件以及其之间的逻辑关系,将识别出来的内容转换成数据库第三范式下的查询条件,得到精确的查询条件。
检索方式(部分)
1.检索包含给定原子或原子基团的实验数据;
2.检索包含给定原子或原子基团的力场计算数据;
3.检索包含给定原子或原子基团的量化计算数据;
4.检索包含给定原子或原子基团的分子动力学模拟数据;
5.检索密度在给定范围内的全部分子;
6.检索蒸发焓在给定范围内,能量在给定范围、包含给定原子基团的全部分子;
7.检索原子类型匹配度在给定范围的全部分子;
8.检索力场计算能量在给定范围,包含给定原子、体积在给定范围的全部分子及其热熔。
(3)模型层将结果返回数据检索模块,再返回用户SDK,完成检索。