By zhangcj, 19 April, 2024
Forums

【金山文档 | WPS云文档】 BreedRupal计划-20240417-1
https://kdocs.cn/l/ci7mnObEVLlg 

正文

开发缘由

  1. 使用Drupal,是因为其广泛的模块,尤其是用户分级管理系统
  2. 决定自己开发BreedRupal,是因为如果要用Tripal
    1. 太拗(感觉野心太多太宏大),且其使用PostgreSQL,实在资料文献有限
    2. 对入门的人来讲,Drupal也要入门,生物Tripal库也要入门,PHP也是大迭代,等等,再增加一个高门槛的PostgreSQL,实在高门槛的东西太多
    3. 曲高和寡,Tripal 3积累的一些用户,现在Drupal7=>8,PHP5=>7/8,又再是PostgreSQL9=>12+,感觉Tripal 4要完美复现之前的工作,难度很大(时间、质量、推广性等等)
  3. 决定自己开发BreedRupal,还有一个原因是:仍然想以这个作为育种应用的一个集成体系根基
  4. BreedRupal,针对植物,不开源,仅针对团队内部使用

BreedRupal的功能框架思路

  1. BreedRupal的系统(功能)框架,大致包含四个维度

基因组浏览器维度(基础维度)

  1. 实现基因组浏览器的一般功能
  2. 更新某一属(预计约10多个)物种的参考基因组(非pan genome):当物种数量过多之后,建议往下一个等级分割(例如亚属、组、亚组等)
  3. 能够进行基本的Blast搜索
  4. 搜集足够多的转录组数据(针对1-2个优先级参考基因组:物种的广泛性、基因组质量、数据量而定)并表格展示(可下载):可作为一个限制点,如果要突破限制,可迫使用户交费
  5. 能够根据水稻、拟南芥、杨树三个模式物种的基因名称,进行关键词搜索
  6. 能够查找直系同源基因:数据库内物种(依赖优先级参考基因组)
  7. 能够在基因组浏览器展示一个基因不同的剪接模式
  8. 能够根据基因,寻找相应的序列(gene, CDS, mRNA等;基因上/下游xxxbp)
  9. 能够实现GO\KEGG等注释信息的汇总
  10. 给出优先级参考基因组的TF/Orthgroup/GeneFamily等信息
  11. 能够找到基因上下游SSR/SNP/INDEL/SV等分子标记(引用品种数据库,外链)
  12. BATCH download:可作为一个限制点,如果要突破限制,可迫使用户交费
  13. 基础维度,在用户提供数据后,应该在1周内建成数据库(时间应不断减少)
  14. 应该单独建一个表,存储用户的查询(不断更新)
  15. 手动更新类型的功能基因研究进展汇总(不断更新)

品种数据库

  1. 基于基础维度,针对品种(种质资源),进行数据收集
  2. 首先应该包含不同品种的各种信息
  3. 品种数据库,应包含重测序数据(分子标记)、Raw data信息
  4. 应包含种质资源的坐标信息(通过编号)
  5. 应包含品种的表型
    1. 学术型:专业表型统计数据
    2. 雅俗共享型(公众分级开放):园艺类植物,应该以此优先:仅在此处

表型数据库

  1. 应以品种名称为主线1,以表型数据类型为主线2,相互可搜索
  2. 表型数据应该以存储图片(如何归档?如何备份?如何标注,用于后续的大数据、大模型解读)、年度化数据(气象、土壤监测)等为主

基因组育种平台(后台)

  1. 当上述三个数据库建成后,应该就可以开始育种指导了
    1. 上述三个数据库的主要作用,是帮助这个平台进行数据分级、数据清洗?
  2. 在这个平台,主要是开发育种模块(不断前进)
    1. GWAS,含各种算法
    2. GS,含各种算法
    3. 各种分子进化计算
      1. 重组热点计算
      2. Fst计算
    4. 各种生物信息分析
    5. 基于重组热点信息、杂合度、亲本基因型、亲本性别(是否雌雄异株)、偏分离信息等,产生父本、母本杂交后代基因型(自动生成),然后再预测该基因型,可能会有怎么样的表型
      1. 再利用产生的真实基因型,来对标预测基因型矩阵?
    6. 等等集成

BreedRupal的技术框架思路

  1. 以Apache、PHP8、MySQL 8(其实也有一个大的迭代)+Drupal 10为技术基础
  2. 在实际开发过程中,应做到功能为主、技术为辅,适度跟紧技术,除较大的安全漏洞外,其余基本忽略

开发围绕Drupal为主,有三个方向

  1. 主题开发
  2. 模块开发
  3. 数据库后台

开发准备工作

  1. 以drupal docker镜像为根基,以10.0.9为基础版本(论坛版本)
  2. 学习晴空《听晴空讲Drupal主题》、云客《低代码开发Drupal使用视频教程》、《云客Drupal源码分析》
  3. 会PHP8(等)
    1. composer
    2. PhpStorm
    3. Symfony 5
    4. PhpUnit
  4. 会MySQL
  5. 会CSS/HTML/JSON/Ajax/jQuery

BreedRupal开发惯例和约定

  • BreedRupal开发,主要对模块开发数据库表格设立及相互关系做约定,且必须经过我(章成君)的评测后方可正式纳入BreedRupal系统。

模块命名

  1. 采用二级命名,如Bdrpl_GenomeDownload,Bdrpl_GeneSearch,第一级用于区分本体系和外部公共模块;用下划线连接第二级命名;第二级主要描述功能,如果需要多个单词,每个单词首字母大写。

变量命名

  1. 采用三级命名,如Bdrpl_VaGeneSearch_Keys, Bdrpl_VaGeneSearch_UpStream等,前二级同模块名(在开头有Va标识),第三级用于简单介绍功能细节。

函数名

  1. 采用三级命名,如Bdrpl_FcGeneSearch_Keys, Bdrpl_FcGeneSearch_UpStream等,前二级同模块名(在开头有Fc标识),第三级用于简单介绍功能细节。

数据库表格命名

  1. 采用三级命名,第一级用于区分本体系和外部表格体系(Bdrpl_);第二级用于指明隶属数据库,包含5个(分别是Bdrpl_GenomeDB_,Bdrpl_CultivarDB_, Bdrpl_PhenoDB_, Bdrpl_PlatformDB_, Bdrpl_RelationDB_)分别对应3个数据库和1个平台,最后一个(RelationDB_),用于储存模块名、变量名、表格名等,并解释其相关含义。
  2. 数据库表格分成三种类型
    1. 数据直接存储类表格,这一类表格,以DA(Data)作为第三级表格名的起始,如Bdrpl_GenomeDB_DAxxxx
    2. 数据地址存储类表格,这一类表格,以PA(Path)作为第三级表格名的起始,如Bdrpl_GenomeDB_PAxxxx
    3. 关系类表格,这一类表格,以RA(Relation)作为第三级表格名的起始,如Bdrpl_GenomeDB_RAxxxx

测试数据的约定

  1. 当模块撰写完成、表格定稿完成,某一项功能撰写完成,需要执行以下操作,才能正式迭代版本号
    1. 使用1000-10000条测试数据,直接从数据库端导入后,仍然能正常执行其功能;
    2. 版本号分三级命名,例如1.2.3.123。
      1. 第一级的1,是大版本号,当且仅当三库一平台,完成一轮功能更新后,本人(章成君)同意后,才允许晋级。
      2. 第二级的2,是中版本号,当且仅当三库一平台中的某一项完成一轮功能更新后,本人(章成君)同意后,才允许晋级。
      3. 第三级的3,是小版本号,当某一个模块、某一个新增表格、某一项新功能通过测试,且在平均每个月的研讨中,本人(章成君)同意后,才允许晋级。
      4. 第四级的123,是测试版本号,当某一个模块、某一个新增表格、某一项新功能通过测试,开发者有权自行晋级。
    3. 当上一级版本号更新后,往下所有级别的版本号,均自动归1。例如1.2.3.123第二级升级到3时,则自动变成1.3.1.1版本。
    4. 第二级版本号,原则上每半年必须更新一次。

撰写高质量开发文档的约定