如何减少访问文件的增长大小?

Posted

技术标签:

【中文标题】如何减少访问文件的增长大小?【英文标题】:How to reduce growing size of an access file? 【发布时间】:2009-10-06 16:45:26 【问题描述】:

因此,在我的工作场所,他们有一个巨大的访问文件(与 MS Access 2003 和 2007 一起使用)。文件大小约为1.2GB,因此打开文件需要一段时间。我们无法删除任何记录,并且我们有大约 100 多个表(每个月我们会再创建 4 个表,不要问!)。我该如何改善这一点,即缩小文件?

【问题讨论】:

我收回它,我们每个月创建约 20 个表。别问我不是我设计的! 你应该重新设计它吗? 事情一团糟,更别提代码了。至少有几千行代码,绝对没有评论。整件事对我来说太疯狂了,甚至连重新设计的想法都没有…… 如果不想重新设计,那就转包吧! 【参考方案1】:

你可以做两件事:

使用链接表 每隔一段时间“压缩”数据库

链接表本身不会限制数据库的整体大小,但会将其“打包”在更小、更易于管理的文件中。要查看此内容:

“文件”菜单+“获取外部数据”+“链接表”

链接表也有许多优点,例如允许保存多个版本的数据子集,以及通过链接表管理器选择特定的集合。

压缩数据库会回收空间,否则会因为各种 CRUD 操作(插入、删除、更新...)对存储造成碎片化而丢失。它还重新组合表和索引,使搜索更有效。这是用

完成的 “工具”菜单+“数据库实用程序”+“压缩和修复数据库...”

【讨论】:

@aZn137 压缩数据库后没有减小大小可能是表过度碎片化的结果(我已经看到了),或者如果在数据库的生命周期内进行 CRUD 操作,这是正常的事情已经这样,它没有产生大量的碎片。将数据重新加载到全新的数据库(可能是单独的数据库,cf 链接表)可能是“修复”其他“不可压缩”数据库的唯一方法。一定要复制原件,即使只是为了防止出现拼写错误和其他人为事故,更不用说 MS-Access “炸毁”了。【参考方案2】:

你真的在挑战 MS Access 的限制——你知道文件不能超过 2GB 吗?

我想您已经检查了数据,以通过额外的规范化来节省空间?您可以将前几个月的一些表“归档”到单独的 MDB 文件中,然后将它们(永久或根据需要)链接到您的“当前”数据库(在这种情况下,您实际上会从可能是一个错误的决定中受益为每个月创建新表)。

但是,有了这么多的数据,可能是时候开始计划迁移到更大容量的平台了。

【讨论】:

+1 提供了很好的建议,但从描述中可以清楚地看出,模式设计完全不正确——每个月添加 20 个新表是一个死的赠品!虽然升级可以避免 Jet/ACE 的 2GB 硬限制,但它并不能解决根本问题,即设计完全是错误的。【参考方案3】:

您应该真正考虑一下您的数据库架构。如果表之间没有任何链接,您可以尝试将其中一些表移动到另一个数据库(每年一个 db :) 作为短期解决方案。

【讨论】:

【参考方案4】:

几个“抓住稻草”的想法

查看每列的数据类型,您也许可以将一些数字存储为字节,从而为每条记录节省少量

查看索引并删除您不使用的索引。在大表上,不必要的索引会增加大量开销。

我会 + 2^64 关于数据库设计的建议有点奇怪,但没有什么还没有说过,所以我不会强调这一点

【讨论】:

【参考方案5】:

好吧 .. 听听@Larry,并记住,从长远来看,您必须找到另一个数据库来保存您的数据!

但在短期内,我对“每月 4 个新表”的事情感到非常不安。每月 4 个表是每年 50 个......这对于这里的每个“数据库管理员”来说肯定听起来很奇怪。所以请告诉我们:有多少行,它们是如何构建的,它们是做什么用的,为什么你必须每个月构建表?

根据您对数据的处理方式,您还可以考虑将某些表归档为 XML 文件(甚至是 XLS?)。这对于不必通过关系、视图等访问的“历史”数据是有意义的。一个很好的例子是从 PABX 收集的电话列表。数据可以通过 ADODB 记录集或 transferDatabase 方法保存为 XML/XLS 文件/从 XML/XLS 文件中加载

【讨论】:

我查了一下,不是 4 个,而是每月 20 多张桌子。再说一遍,不要问。 我们每个月都会从大量文件中导入新数据。然后该文件将被处理成不同的组,每个组都会获得自己的当月表。有的组有几个,有的有几十、几百条记录。每条记录包含 10-20 个字段。 你所描述的结构是如此错误以至于值得每日 WTF (dailywtf.com)。如果不修复明显错误的应用程序设计,您可能无法解决臃肿问题。 @aZn137,根据您告诉我的内容,一种临时解决方案可能是在 Access 文件中使用 xml 文件而不是表。这些 xml 文件可以根据每组用户需要查看的视图/数据生成。顺便说一句,我同意 @David 所说的你正面临一个明显的应用程序设计问题!【参考方案6】:

每月添加更多表格:这已经是一个值得怀疑的态度,而且对于数据规范化似乎也很可疑。 如果你这样做,我怀疑你的数据库结构在字段大小、数据类型和索引方面也不是最优的。我真的会从仔细检查这些开始。

如果您真的有理由使用每月表(我再次无法想象),为什么不每月有 1 个后端? 您还可以在主后端拥有 3 个月的在线数据,然后是存档数据库,您可以在其中传输旧记录。 我将它用于事务,主表有大约 650.000 条记录,并且 Access 响应速度非常快。

【讨论】:

如果 db 是您在引用完整性问题中所指的那个,我对您遇到问题并不感到惊讶。它的设计一团糟。 我尝试拆分数据库,这件事花了将近 2 个小时,然后给了我一个错误,“超出最大计数锁定”或一些垃圾...... 您收到的错误消息还应该为您提供一个帮助链接,该链接将引导您了解如何更改注册表项以使您能够完成最大数量的锁定。 对于拆分,试试这个:将数据库复制到本地驱动器(并让用户知道它不可用),然后在本地驱动器上以独占模式执行您的操作。之后,将其复制回服务器。 我已经尝试修改注册表(有 20,000 个)。这一次,它只是冻结了。没有错误消息,但也没有进展。

以上是关于如何减少访问文件的增长大小?的主要内容,如果未能解决你的问题,请参考以下文章

C# / .Net Framework 中的堆大小 - 它可以增长吗?如何增长? [复制]

如何在 SQL Server 上获取“受限文件增长”参数?

vector的增长模式

连续模型训练后,Tensorboard 事件文件大小正在增长

不断增长的 MS Access 文件大小问题

VMware快照的工作原理(转)