我必须使用一个开源项目(biojava),但我对某些性能不满意,我想花一些时间来改进它。
例如,我有一个以这种方式编码的文本数据库:
chrX Cufflinks exon 65175856 65175971 . . . gene_id "XLOC_002576"; transcript_id "TCONS_00004217"; exon_number "1"; gene_name "RP6-159A1.2"; oId "CUFF.3698.1"; nearest_ref "ENST00000456392"; class_code "p"; tss_id "TSS3873";
chrX Cufflinks exon 128986006 128986088 . . . gene_id "XLOC_002577"; transcript_id "TCONS_00004218"; exon_number "1"; oId "CUFF.3750.1"; class_code "u"; tss_id "TSS3874";
并非每个字段都是必需的,每个字段都gene_id
可能与多个transcript_id
(1..n) 相关联,并且每个字段transcript_id
都有 1 个或多个exon
。
库的行为是将整个文本文件加载到 中ArrayList
,并且对于每次搜索,必须迭代列表。这适用于小列表,但在我的情况下,我有 10^10 个查询和一个非常大的列表,并且在一台好的计算机上需要几天时间。
Neo4j 会是一个不错的选择吗?什么是实施它的好方法?例如,创建一个纯字符串实体并在它们之间建立关系是不是很糟糕?还是将 Hsqldb 与单个表一起使用更好?
请注意我不需要持久性,但速度和同步是强制性的。
编辑:如果你愿意,你可以看看这里的项目。