我目前正在使用一个更大的数据库,尽管我没有特定的问题,但是如果有人的话,我希望提出一些建议。
数据库为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中。
我想知道的一些事情:
您的答案取决于Blob数据的增长率。例如,如果您的数据集将以每周10%的速度增长-那么几乎没有必要尝试扩展H2来存储Blob数据(因为它将很快超过可用的堆内存)。如果相反,blob数据将是有史以来最大的,那么尝试使用H2可能有意义。
要回答有关H2的问题:
1)在单独的进程中运行H2将允许H2占用大部分堆空间-使得控制H2的可用堆空间更加易于管理。但是,您还将增加维护和监视工作需要单独的过程的维护开销。因此,答案是“这取决于您的操作环境和目标”。如果您有足够的人手和时间,那么在单独的流程中运行H2可能很有意义。但是,如果这是真的,那么您应该考虑只运行适当的Blob存储平台。
2)是的,您是正确的,将blob存储在单独的表中将有助于进行缓存-在您通常不需要blob的情况下。它也应该有助于缩短检索时间,因为H2不必读取Blob即可找到元数据。
3)请注意,“互联网”代表着成千上万的人,几乎具有许多不同的特定用例。您需要将用例过滤到需求中,然后应用从其他人那里收集的逻辑。
4)我的个人建议是,如果您要构建可扩展且可维护的平台,请使用正确的工具。H2或任何其他关系数据库通常不是存储许多大Blob的正确工具。我建议您调查使用键/值存储。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句