gpt4 book ai didi

java - H2 性能建议

转载 作者:搜寻专家 更新时间:2023-10-31 20:27:22 26 4
gpt4 key购买 nike

我目前正在处理一个更大的数据库,虽然我没有具体问题,但我想要一些建议,如果有人有的话。

数据库为 2.2 GB(重建/压缩后)。它包含大约 50 个表。其中一个表包含一个 blob 和一些元数据。它目前有大约 22000 行。如果我从表中删除 blob (UPDATE table SET blob = null),数据库大小将减少到大约 200 兆字节(在重建/压缩之后)。元数据被大量访问,但是并不经常需要 blob。

我目前使用的数据库网址是:

jdbc:h2:D:/data;AUTO_SERVER=true;MVCC=true;CACHE_SIZE=524288

它在我们的 Java 虚拟机中运行,该虚拟机的最大堆内存为 4GB。

我想知道的一些事情:

  • 在单独的进程中运行 H2 会对性能产生任何影响(是好是坏)?
  • 将 blob 放在与元数据具有 1-1 关系的单独表中是否有帮助?我可以想象它会有助于缓存,而不是让 blob 挡路?
  • 对于是将 blob 包含在数据库中还是将它们写入文件系统上的文件并在数据库中建立链接,互联网似乎存在分歧。这里有任何针对 H2 的建议吗?

最佳答案

您的答案取决于 blob 数据的增长率。例如,如果您的数据集将以每周 10% 的速度增长——那么尝试扩展 H2 的使用来存储 blob 数据就没有什么意义了(因为它会很快超过可用堆内存的速度)。相反,如果 blob 数据是最大的,那么尝试使用 H2 可能 是有意义的。

回答你关于 H2 的问题:

1) 在单独的进程中运行 H2 将允许 H2 占用大部分堆空间 - 使得控制 H2 的可用堆空间更易于管理。但是,您还将增加维护和监控单独流程的维护开销。所以答案是“这取决于你的操作环境和目标”。如果你有时间和人力,在单独的进程中运行 H2 可能是有意义的。但如果这是真的 - 那么您可能应该考虑只运行一个合适的 blob 存储平台。

2) 是的,您是正确的,将 blob 存储在单独的表中有助于缓存 - 在您不经常需要 blob 的情况下。它还应该有助于缩短检索时间,因为 H2 不必读取 blob 来查找元数据。

3) 请注意,“互联网”代表着成千上万的人,他们拥有几乎同样多的不同特定用例。您需要将您的用例过滤为需求,然后应用您从其他人那里收集的逻辑。

4) 我个人的建议是,如果您正在尝试构建可扩展且可维护的平台,请使用正确的工具。 H2 或任何其他关系数据库通常不是存储许多大型 blob 的正确工具。我建议您调查使用键/值存储。

关于java - H2 性能建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30660993/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com