使用内存数据库(例如SQLite)比将所有内容保存在HashMap或其他数据结构中更好吗?

时间:2009-12-24 05:38:21

标签: java database performance sqlite memory

我需要非常快速地访问大型地图 - 数百万条目。是否值得使用SQLite内存数据库来保留该映射而不是仅仅将HashMap放在内存中?

4 个答案:

答案 0 :(得分:6)

它取决于您的数据结构所需的服务。你只需要从地图中检索值吗?或者您需要进行复杂的查询或排序?。

数据库内部结构没有任何神奇之处,使其比简单的数据结构更快。在数据库中,有更多的工具可以处理大量数据,这些数据可能会在听到CPU和内存时被盗。如果您只需要一个类似功能的字典,请使用地图,考虑更复杂的数据库

答案 1 :(得分:2)

这取决于,但如果您的数据模型足够简单以适应Map,并且您不需要在程序运行之间保存数据,那么内存数据库很可能是过度杀伤。数据库专为更复杂的数据模型,使用事务安全并行访问和更新,复杂查询,约束等而设计。

如果您认为地图是合适的,那么您应该仔细选择您需要的地图类型。看看java.util.collections中提供的所有地图,还要仔细研究Google Collections,它以一些非常好的方式扩展了Java。另请参阅java.util.concurrent,它具有良好的ConcurrentHashMap,允许多个线程同时使用您的数据结构。

请务必考虑如何构建地图。如果使用HashMap,则在构造时设置初始容量和负载因子可能会对性能产生一些影响。

这里要做的另一件事是将您的实现隐藏在您编写的Facade类后面。这样,如果您决定切换方法,则不会影响您的客户端代码。

答案 2 :(得分:0)

我认为如果你只按键查询,那么没有什么比内存中的hashmap更快。

答案 3 :(得分:0)

除了Alon和Jim的优秀评论之外,我建议尝试两种方法并对性能进行基准测试。除了有趣(以一种令人讨厌的方式),这个测试将迫使您以正确的方式封装您的数据结构,以便只暴露基本功能。