我的应用程序当前存储了数百万个 Double
用于计算的元素。这些值在用于计算结束时运行的特定算法之前只是临时值。一旦计算完成,数百万个值就可以被丢弃。
完整的故事是here ,如果您需要更多详细信息。
提出的解决方案之一是使用内存数据库。
因此,如果我采用此解决方案,我将使用此数据库将我的值存储在表中以替换我当前的 Map<String, List<Double>>
,例如:
create table CALCULATION_RESULTS_XXX (
deal_id varchar2,
values number
);
(每个计算一个表,XXX
是计算ID)
所以在计算过程中,我会做以下事情:
- 开始计算时,我创建
CALCULATION_RESULTS_XXX
表。 - 每次需要添加值时,我都会在此表中插入一条记录。
- 在计算结束时,我将表格内容用于我的算法。
- 最后,我放弃了这张 table 。
如其他 subject 中所述,目前,我的计算可能会在内存中存储数百Mb的数据,作为Double
的30 * 1,000,000个列表将需要大约 240Mb。
现在的问题:
- 如果我使用内存数据库,我的内存消耗会减少吗?
- 在数据库使用(或表创建)、数据插入等方面,我需要注意哪些具体点?
- 我想我会选择H2 database 。您认为这是满足我需求的最佳选择吗?
最佳答案
一个简单的 HashMap,由 Terracotta 备份会做得更好,并且允许存储比 JVM 虚拟内存更大的集合。
嵌入式数据库,尤其是基于 SQL 的数据库,会增加代码的复杂性和开销,因此不值得。如果您确实需要具有随机访问功能的持久存储,请尝试 nosql DB 之一,例如 CouchDB , Cassandra , neo4j
关于java - 使用内存数据库存储数百万个临时值的效率如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3936044/