【发布时间】:2012-05-22 10:39:32
【问题描述】:
我必须与一个开源项目 (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更好?
请注意,我不需要持久性,但速度和同步是强制性的。
编辑:如果您愿意,可以查看项目here。
【问题讨论】:
-
(你应该用“neo4j”和“hsqldb”标记你的问题,你的问题会有更好的可见性)