java - 使用内存数据库存储数百万个临时值的效率如何?

标签 java performance in-memory-database

我的应用程序当前存储了数百万个 Double用于计算的元素。这些值在用于计算结束时运行的特定算法之前只是临时值。一旦计算完成,数百万个值就可以被丢弃。

完整的故事是here ,如果您需要更多详细信息。

提出的解决方案之一是使用内存数据库。

因此,如果我采用此解决方案,我将使用此数据库将我的值存储在表中以替换我当前的 Map<String, List<Double>> ,例如:

create table CALCULATION_RESULTS_XXX (
  deal_id varchar2,
  values number
);

(每个计算一个表,XXX是计算ID)

所以在计算过程中,我会做以下事情:

  1. 开始计算时,我创建 CALCULATION_RESULTS_XXX表。
  2. 每次需要添加值时,我都会在此表中插入一条记录。
  3. 在计算结束时,我将表格内容用于我的算法。
  4. 最后,我放弃了这张 table 。

如其他 subject 中所述,目前,我的计算可能会在内存中存储数百Mb的数据,作为Double的30 * 1,000,000个列表将需要大约 240Mb。

现在的问题:

  1. 如果我使用内存数据库,我的内存消耗会减少吗?
  2. 在数据库使用(或表创建)、数据插入等方面,我需要注意哪些具体点?
  3. 我想我会选择H2 database 。您认为这是满足我需求的最佳选择吗?

最佳答案

一个简单的 HashMap,由 Terracotta 备份会做得更好,并且允许存储比 JVM 虚拟内存更大的集合。

嵌入式数据库,尤其是基于 SQL 的数据库,会增加代码的复杂性和开销,因此不值得。如果您确实需要具有随机访问功能的持久存储,请尝试 nosql DB 之一,例如 CouchDB , Cassandra , neo4j

关于java - 使用内存数据库存储数百万个临时值的效率如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3936044/

相关文章:

performance - 一个数不小于另一个数的约数的个数

Android Share Preferences 与 Intent extra 以共享数据

mysql - 使用多个 JOIN 查询 1k 条条目最多需要 10 秒

php - Redis CLI 未通过 Laravel 显示最近存储的 key

ignite - 在 apache Ignite 中触发

java - 如何在android中格式化和打印文本文件?

java - 使用 java.sql.Connection 在运行时抛出 AbstractMethodError

dictionary - 在 Hazelcast 中创建另一个 map 函数?

java - 底部导航 fragment 应用程序不断崩溃

java - 两个内容相同的字符串会存储在同一个内存位置吗?