1
的问题开始我试图解决:在内存单表数据库算法或文库
- 给定一个单一的平台状结构与短小长度的数据(行和列) (少超过50,000行)
- 我需要使用精确的相等匹配来快速找到匹配的行,给定列索引数组 。 (典型地2-3列将是 涉及与给定查询)
- 最多对数据1000次的查询都必须内 1秒
- 数据完成可以附加到或分批异步更新该
将揭开序幕查询再次 - 查询可以(和理想应该)并行
- 数据运行,而查询是基于正在运行
- Java是不可改变
我看了一些像H2和VoltDB这样的内存数据库,但SQL开销占据了搜索的主导地位,即使使用PreparedStatements。不可变对象[] []的完整表扫描工作到一个点,但离开表的许多优化(如索引)。如果我开始构建索引和marge-sets,那感觉就像我正在重新创建数据库。
对现有的开源库或数据结构有哪些建议可以处理?或者我最好继续我的“在这里发明”的方法,并开始滚动我自己的索引?对于我的“在这里发明”的方法,我使用的对象[] []的数据和编码它像(最多并行使用阿卡1000X):
public int[] findMatchingRows(int[] columnIndex, Object[] columnValues){
List<Integer> matchingRows = new ArrayList<Integer>();
for(int row=0;i<data.length; row++){
boolean found = true;
for(int colIdx=0;j<columnIndex;colIdx++){
if(!matches(data[row][columnIndex[colIdx], columnValues[colIdx]){
found = false;
break;
}
}
if(found){
matchingRows.add(row);
}
}
return matchingRows;
}
听起来像H2,德比或其他内存数据库是最好的选择。只要确保你正确地创建索引。另一种方法是在每一列都有一个“TreeMap”或者“HashMap”,这样你就可以搜索给定的值,但是复杂性可能过大,维护和理解代码的代价可能太高,获得。 –