我目前正在使用一个更大的数据库,虽然我没有具体问题,但我想要一些建议,如果有人有的话.
该数据库为2.2千兆字节(重建/压缩后).它包含大约50个表.其中一个表包含blob和一些元数据.它目前有大约22000行.如果我从表中删除blob(UPDATE表SET blob = null),数据库大小将减少到大约200兆字节(重新创建/压缩后).元数据被大量访问,然而blob并不经常需要.
我目前使用的数据库URL是:
jdbc:h2:D:/data;AUTO_SERVER=true;MVCC=true;CACHE_SIZE=524288
Run Code Online (Sandbox Code Playgroud)
它运行在我们的Java VM中,最大堆容量为4GB.
我想知道一些事情:
小智 2
答案取决于 Blob 数据的增长率。例如,如果您的数据集每周增长 10%,那么尝试扩展 H2 的使用来存储 blob 数据就没有什么意义了(因为它将很快超过可用堆内存的速度)。相反,如果 blob 数据是最大的,那么尝试使用 H2可能是有意义的。
回答您有关 H2 的问题:
1) 在单独的进程中运行 H2 将允许 H2 占用大部分堆空间 - 使得控制 H2 的可用堆空间更加易于管理。但是,您还会增加维护和监视单独流程的维护开销。所以答案是“这取决于你的运营环境和目标”。如果您有人力和时间,在单独的进程中运行 H2 可能是有意义的。但如果这是真的 - 那么您可能应该考虑只运行适当的 blob 存储平台。
2)是的,您是正确的,将 blob 存储在单独的表中将有助于缓存 - 在您不经常需要 blob 的情况下。它还应该有助于缩短检索时间,因为 H2 不必读取 blob 来查找元数据。
3) 请注意,“互联网”代表了成千上万的人,他们拥有几乎同样多的不同特定用例。您需要将用例过滤为需求,然后应用从其他人那里收集到的逻辑。
4)我个人的建议是,如果您想创建一个可扩展且可维护的平台 - 使用正确的工具。H2 或任何其他关系数据库通常不是存储许多大型 blob 的正确工具。我建议您使用键/值存储进行调查。
| 归档时间: |
|
| 查看次数: |
824 次 |
| 最近记录: |