H2性能建议

布雷希特·伊珀曼

我目前正在使用一个更大的数据库,尽管我没有特定的问题,但是如果有人的话,我希望提出一些建议。

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

我当前使用的数据库URL是:

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

它运行在最大堆空间为4GB的Java VM中。

我想知道的一些事情:

  • 在单独的流程中运行H2是否会对性能产生任何影响(好坏)?
  • 将blob放在与元数据具有1-1关系的单独表中是否有帮助?我可以想象它会帮助缓存,而不会有斑点吗?
  • 对于在数据库中包含Blob还是将其写入具有DB中链接的文件系统上的文件,互联网似乎存在分歧。这里有H2的具体建议吗?
特拉维斯·柯林斯(Travis Collins)

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

要回答有关H2的问题:

1)在单独的进程中运行H2将允许H2占用大部分堆空间-使得控制H2的可用堆空间更加易于管理。但是,您还将增加维护和监视工作需要单独的过程的维护开销。因此,答案是“这取决于您的操作环境和目标”。如果您有足够的人手和时间,那么在单独的流程中运行H2可能很有意义。但是,如果这是真的,那么您应该考虑只运行适当的Blob存储平台。

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章