【问题标题】:Strategies to preserve disk space in high input frequency application在高输入频率应用中保留磁盘空间的策略
【发布时间】:2015-08-25 23:33:48
【问题描述】:

我需要支持收缩数据输入率为每秒 1 个条目(约 300KB)的数据库。数据库文件可以达到3GB。当前数据库没有自动清理功能。数据库文件空间超过某个限制(比如 3GB)是最坏的情况。

我目前的策略是删除最旧的数据(通过集群主键),然后到 CHECKPOINT DEFRAG。这似乎不可靠,VACUUM 或 DEFRAG 可能需要很长时间。我不想命名数据库名称,但我愿意接受建议。

我想知道还有哪些其他策略可以可靠地(几乎没有停机时间,O(1) 运行速度)保留磁盘空间。

编辑:需要关系数据库作为报告和 SQL 数据提取。

固定大小的循环缓冲区——确切地说——我需要在关系世界中复制它,使用占用空间小的数据库和快速的“循环”行为(即快速插入)

【问题讨论】:

  • 请列出一些要求。你真的需要关系数据库吗?等
  • 很明显,您想要一些类似于固定大小的循环缓冲区的东西。一旦数据库文件达到您的大小限制 (3GB),您为什么不简单地开始用新数据条目覆盖最旧的条目。如果您提供正在使用的数据库框架的更多详细信息,有人将能够建议正确的实现。
  • 数据(300Kb)是否需要在数据库中? - 如果数据可以单独存储(例如 3Gb 循环文件),那么数据库可能会表现得很好

标签: database embedded-linux diskspace shrink vacuum


【解决方案1】:

1) 根据您的要求确定可以存储多少行数据。

2) 使用与#1 相关的整数主键。

3) 创建一种跟踪主键使用情况的方法,例如,将主键和使用时间戳存储在单独的表中。

4) 插入时始终抓取最旧的主键,并使用新数据更新该行。

如果实施得当,这会将行数限制为您在 #1 中指定的行数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-06
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 2015-06-30
    • 1970-01-01
    • 2018-03-22
    • 2015-05-07
    相关资源
    最近更新 更多