2012-05-14 17 views
2

我认为这个问题被问了很多次,但是在这个问题上我找到了一些答案。
我知道文件通常由OS +文件系统处理,但有(或应该)方法来改变这一点。其他大型数据库系统至少使用文件预分配,并通过添加大块来增长。据我所知,MySQL缺乏这种类型的功能(或者我的知识过时?),它只能提供OPTIMIZE TABLE,其中碎片整理文件内的记录,但文件本身可能非常分散。如何防止MySQL数据文件碎片?

作为具体的问题,我有应作为一个起作用的表:很多INSERT S和DELETE s时,数据具有短的寿命(从几秒到几小时),的最大尺寸堆栈是已知的。该表经常会被修改 - 每天有数千次,并且还有其他活动的表,因此这种情况会随着时间的推移导致磁盘布局非常分散。我目前的想法是预先分配整个堆栈表,然后使用顶部索引和只是UPDATE s。

无论如何,除了我的具体问题(最好还有解决方案),什么是使用的方法来减少甚至消除MyISAM和InnoDB的MySQL数据文件的碎片化(如果可能的话)最好在* nix系统上?并且是原始设备解决方案至少适用于InnoDB?

+0

对于您的特定问题,您是否考虑过NoSQL数据库? Redis看起来像是您需要的不错选择。 – Sam

+0

@Sam:Redis是否缺乏这种特殊类型的问题,比如DB软件本身产生的碎片? – ArtM

+0

Redis是内存数据库,因此文件碎片不是问题。可能确实存在内存碎片,您必须检查这是否是针对您的特定问题的问题。对不起,我不能给你一个更具体的答案。 – Sam

回答

0

如果您不需要堆栈来存活服务器/ mysql重新引导,并且它适合内存,请将该表创建为MEMORY表。

--HHS