Java 内存问题:在地图中存储大量数据
我有以下情况:Java 内存问题:在地图中存储大量数据,java,list,dictionary,Java,List,Dictionary,我有以下情况: 来自外部系统的大量消息列表(消息包含id和有效负载) 我根据id过滤这些消息,并将有效负载存储在列表中,最后将id和列表存储在地图中 稍后,我将根据id从map检索有效负载列表,并将整个有效负载列表提交给执行器服务进行进一步处理 我不喜欢这种方法,因为在运行时我有一个包含所有数据的映射(第2点)。我可能最终会遇到与记忆有关的问题。上述方法有什么好的替代方法吗 编辑 我正在使用Java。我从一些外部系统获取消息(我不知道可能会收到多少消息),最后根据它们的ID对它们进行处理。处理后
final double cacheSizeInGB = 1.0;
// Create cache backed by off-heap store
// In this case store will use ByteBuffers backed by byte[].
HTreeMap cache = DBMaker
.memoryDirectDB()
.transactionDisable()
.make()
.hashMapCreate("test")
.expireStoreSize(cacheSizeInGB) //TODO not sure this actually works
.make();
//generates random key and values
Random r = new Random();
//used to print store statistics
Store store = Store.forEngine(cache.getEngine());
// insert some stuff in cycle
for(long counter=1; counter<1e8; counter++){
long key = r.nextLong();
byte[] value = new byte[1000];
r.nextBytes(value);
cache.put(key,value);
if(counter%1e5==0){
System.out.printf("Map size: %,d, counter %,d, store size: %,d, store free size: %,d\n",
cache.sizeLong(), counter, store.getCurrSize(), store.getFreeSize());
}
}
// and release memory. Only necessary with `DBMaker.memoryDirect()`
cache.close();
final-double-cacheSizeInGB=1.0;
//创建由堆外存储支持的缓存
//在这种情况下,存储将使用字节[]支持的ByteBuffers。
HTreeMap cache=DBMaker
.memoryDirectDB()文件
.transactionDisable()
.make()
.hashMapCreate(“测试”)
.expireStoreSize(cacheSizeInGB)//t不确定这是否真的有效
.make();
//生成随机键和值
随机r=新随机();
//用于打印存储统计信息
Store Store=Store.forEngine(cache.getEngine());
//在循环中插入一些东西
(长计数器=1;将消息存储在数据库中)(选择毒药:关系式或NoSQL)…或购买昂贵的产品(例如赤陶土大内存)和大量RAM(1TB现在便宜):数据有多大?您是否考虑使用HaselCask或CasdRRA等缓存工具?