【问题标题】:H2 performance recommendationsH2 性能建议
【发布时间】:2015-06-05 07:39:39
【问题描述】:

我目前正在使用一个更大的数据库,虽然我没有具体问题,但如果有人有任何建议,我希望得到一些建议。

数据库为 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 VM 中运行,该 VM 具有 4GB 最大堆。

我想知道的一些事情:

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

【问题讨论】:

    标签: java database h2


    【解决方案1】:

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

    回答您关于 H2 的问题:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-06
      • 2020-06-12
      • 2012-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-19
      相关资源
      最近更新 更多