我正在学习JBoss Drools,我正在玩hapmap项目的遗传学数据:(http://hapmap.ncbi.nlm.nih.gov/genotypes/latest/forward/non-redundant/)。此目录中的每个文件都是一个表格,其顶部是个人,左侧是基因组上的位置,以及观察到的突变每个人/位置。
在这里,我想使用Drools在文件中找到一些潜在的错误(例如,孩子没有父母的任何变异)。
1)我想在Drools中加载这些数据。这可能是大量数据(例如,genotypes_chr2_YRI_r27_nr.b36_fwd.txt.gz是20Mo gzip)这些数据是否会存储在内存中?还是Drools将它存放在某个地方?或者我应该使用持久性系统?
2)关于模型:
我在考虑将以下类放在 StatefulKnowledgeSession 中:
class Individual
{
private String name;
//constructor, getters, setters etc...
}
class Position
{
private String name;
private String chromosome;
private int position;
//constructor, getters, setters etc...
}
class ObservedMutation
{
private String individualName;
private String positionName;
private String observed;
//constructor, getters, setters etc...
}
或ObservedMutation应该是:
class ObservedMutation
{
private Individual individual;
private Position position;
private String observed;
//constructor, getters, setters etc...
}
谢谢你的建议
皮尔
更新:我的第一次测试:http://plindenbaum.blogspot.com/2010/07/rules-engine-for-bioinformatics-playing.html
答案 0 :(得分:2)
是的,当您插入大量数据时,Drools会将它们存储在内存中。 20 Mb可能不是问题 - 只需尝试一下。
为您建议的模型类编写规则应该很简单 - 第一次测试中的hapmap.drl示例中的规则看起来合理。您的两个ObservedMutation类之间的选择与其他任何东西一样都是一种品味问题,因为它们会产生不同的DRL规则语法。我将从第二个版本开始,看看你是如何进行的:如果你有对象属性(如在ObservedMutation的第二个版本中),可能是非显而易见的事情,你可能需要使用this
来引用绑定对象,例如$p
in:
when
ObservedMutation($p : position)
Position(this == $p)
答案 1 :(得分:1)
我认为它应该是第二个。我更喜欢像String这样的原语对象。