DB4O 断断续续试用了也有一年,从最初的java版本 到现在的.net版本。。当初被吸引的是: real-time performance。。网站的case study 甚至包括 中国电信之类的案例(1秒钟可以支撑100万条查询) 西班牙的地铁公司的系统 一秒钟可以处理20万个复杂对象。
但是我的试用结果觉得并不是一回事。 在我的开发pc上,按照insert来说 最快也不过 1秒1万条左右。而且随着文件size增大而逐渐变慢。
查询的话如果没有索引 就是遍历,速度很是一般。如果有索引 会快很多。最令人奇怪的是当做完操作 进行 close 操作,close的调用会很慢。 我试过 如果光是查询 大约 46 ms可以返回结果。但是close本身要占用50 ms 或者更久。加起来
等于一条查询 要超过100 ms.。。这是个很奇怪的事情。翻了google一遍都没有找到有效的答案。看来要做只能看源码了。
和 sqlite比较起来 并没有太大的优势。特别是对于大数据量的处理。 如果数据量能维持在1万-3万左右,那么db4o的性能还是不错的。。超过的话就要看硬件如何了。。
看中国电信的case study..他们中间有超过100多台刀片运行db4o...
db4o资料甚少。论坛上的帮助也不大。仅有的几个帖子都是在问 db4o为什么性能这么低下,查个东西要十几秒。。和官方的评测,db4o要甩开对手好几条街 完全是两回事。 说实话我现在也很疑惑,不知道他们是怎么tuning的。
几个经验:
1: 最高效的查询是直接使用 query操作。 使用原始的操作树的方式去查询。。其他的 native query, linq都不行,至少会慢 20%。
2: java的版本 比 .net 在性能上要稍微好些
3: 增加索引对查询有显著的提升。