首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MicroStream + AWS S3 Blob示例

MicroStream + AWS S3 Blob示例
EN

Stack Overflow用户
提问于 2022-11-22 01:29:06
回答 1查看 23关注 0票数 0

我试图使用MicroStream和AWS S3作为Blob存储来开发一个简单的应用程序,使用官方页面中的示例和其他示例,我无法存储和查询一些元素

S3连接正在工作。

我的密码

代码语言:javascript
复制
S3Client cli = S3Client.builder()
      .region(Region.US_EAST_1)
      .credentialsProvider(StaticCredentialsProvider.create(

            AwsSessionCredentials.create(accessKey, secret, token)))
      .build()
      ;

BlobStoreFileSystem fileSystem = BlobStoreFileSystem.New(
      S3Connector.Caching(cli)
);

final EmbeddedStorageManager storageManager =EmbeddedStorage.start(fileSystem.ensureDirectoryPath("s3-folder"));

HashMap<Integer, Object> database = new HashMap<>();

if (storageManager.root() == null) {
   storageManager.setRoot(database);
   storageManager.storeRoot();
} else {
   database = (HashMap<Integer, Object>) storageManager.root();
}

Storer storage = storageManager.createLazyStorer();

for(int i=0; i < 1_000_000; i++) {
   database.put(i, UUID.randomUUID().toString());

   if (i == 500_000) {
      System.out.println("Value: " + database.get(500_000));
   }
}

storage.storeAll(database);
storage.commit();

System.out.println("*************************");
System.out.println(((Map<String, Object>)storageManager.root()).get(500_000));

storageManager.shutdown();

输出java.lang.OutOfMemoryError: Java heap space Exception in thread "Daemon Thread 6" java.lang.OutOfMemoryError: Java heap space

我试图在S3中持久化并从集合中读取对象

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-23 12:01:54

最简单的解决方案是增加可用的java堆空间,请参阅此处的详细信息

下面是一个简短的解释,说明为什么您的示例的内存需求出乎意料地高:

  • 每个持久化的java对象还需要内存中的一些附加管理数据。一个包含100万个条目的HashMap将导致2M (键和值)+1(映射)对象被持久化。
  • 当存储数据微流在写入存储目标之前内部收集所有必需的数据时,如果同时存储多个对象,则在存储操作期间这可能需要大量的内存。在您的示例中,您总是存储整个哈希映射及其内容。
  • 微流还缓存数据。

如果无法选择增加java堆大小,您还可以查看Microstream的怠速加载特性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74526559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档