本计算平台的研发目的是提供一个在线的标本分析环境,在不需要大量下载标本数据的情况下, 可以根据用户的分析需求,运行用户代码的软件框架,可以将分析的结果按照用户的代码进行 输出,形成分析报告。
用户代码,目前支持 Javascript 代码,主要是为了满足在网页上运行要求。
每个标本馆都有一些重要的采集人,如果我们想整理他们的采集历史,该如何做呢?
以下以整理“张振万”先生的采集历史为例,简要说明步骤:
1. 在我们的分析工作台当中,在分析程序列表中,选择 “标本采集历史分析” ;
2. 在标本数据集筛选步骤当中,在采集人输入框键入“张振万”
3. 看到 Step2、Step3 当中已有用户代码,如果需要可以自己修改(需要有权限)
4. 点击开始分析按钮
5. 可以看到数据分析的结果已经整理成文档,按年份排列整齐
以下以 银杉(Cathaya argyrophylla) 的采集历史为例,简要说明步骤:
1. 在我们的分析工作台当中,在分析程序列表中,选择 “标本采集历史分析” ;
2. 在标本数据集筛选步骤当中,在中文名输入框键入“银杉”
3. 看到 Step2、Step3 当中已有用户代码,如果需要可以自己修改(需要有权限)
4. 点击开始分析按钮
5. 可以看到数据分析的结果已经整理成文档,按年份排列整齐
NSII标本在线计算平台,有两个限制条件:
(1) 在线运行分析代码
(2) 海量的数据不下载到用户本地,直接在线运行。
因此我们采用的解决方案分别是:
(1) 用户脚本采用 Javascript 语言,可以实现在线运行的目标;
(2) 数据不下载,直接在线分析,主要解决方案是统一后台的API,实现在线调用。
为了实现这两个设计目标,首先要分析工作的目标,就是统计的结果是什么?
要为结果创建一个模型,在Javascript来说,就是创建一个数据对象。
这个模型要能够装载标本记录的分析数据,实现累计统计效果。
NSII 的标本数据是海量的,因此首先需要对标本进行过滤。
通常我们的统计对象都不是全部的标本数据,而只是需要其中的一部分。
过滤条件的设置与 NSII 的标本搜索框时基本一致的,因此如果你已经熟悉了 NSII 的标本搜索,则非常容易理解。
为了显示海量标本的计算分析,我们化繁为简,只需要写出来一份标本记录面对统计模型应该如何处理。 这样的处理代码就是Step2所需要的核心代码。
只要撰写了一条记录的处理流程,系统分析框架会自动通过API调用符合条件的已经过滤好的数据集, 逐条进行累积分析。最终实现海量记录的统计。
在每条记录统计后,统计模型都会发生改变,这时候,用户的Step3的代码就会被调用,实时改变输出结果。
用户的个性化脚本可以自行开发。只需要遵守这个计算框架的约定即可。
但是只有注册用户才能提交自己的脚本。
提交的脚本必须通过管理员的审核后才能正式上线共享。
1. numFound 机制 -- 要求首先在第一次的筛选中,结果数据集numFound不能超过阈值 2. 用户代码机制 -- 用户代码不能获取隐秘数据 3. 用户审核机制 -- 只有特定用户才能运行自己写的代码,发布的共享代码必须经过审核 4. 沙盒机制 -- API以及应用环境是沙盒机制,不会威胁到真正的前台或后台安全 5. 结构校验 -- Model通过界面引导生成,不能随意写; Result可以写,但是Result字段与成员必须与Model对应 data字段是固定的,不能出现未定义的字段 6. 简易编译 -- 将程序解析为变量与操作符,可以使用数学函数、自定义变量于自定义函数 但是不能出现向后台提交、网络请求等操作;防止安全事故