我认为这个问题被问了很多次,但是在这个问题上我找到了一些答案。
我知道文件通常由OS +文件系统处理,但有(或应该)方法来改变这一点。其他大型数据库系统至少使用文件预分配,并通过添加大块来增长。据我所知,MySQL缺乏这种类型的功能(或者我的知识过时?),它只能提供OPTIMIZE TABLE
,其中碎片整理文件内的记录,但文件本身可能非常分散。如何防止MySQL数据文件碎片?
作为具体的问题,我有应作为一个堆起作用的表:很多INSERT
S和DELETE
s时,数据具有短的寿命(从几秒到几小时),的最大尺寸堆栈是已知的。该表经常会被修改 - 每天有数千次,并且还有其他活动的表,因此这种情况会随着时间的推移导致磁盘布局非常分散。我目前的想法是预先分配整个堆栈表,然后使用顶部索引和只是UPDATE
s。
无论如何,除了我的具体问题(最好还有解决方案),什么是使用的方法来减少甚至消除MyISAM和InnoDB的MySQL数据文件的碎片化(如果可能的话)最好在* nix系统上?并且是原始设备解决方案至少适用于InnoDB?
对于您的特定问题,您是否考虑过NoSQL数据库? Redis看起来像是您需要的不错选择。 – Sam
@Sam:Redis是否缺乏这种特殊类型的问题,比如DB软件本身产生的碎片? – ArtM
Redis是内存数据库,因此文件碎片不是问题。可能确实存在内存碎片,您必须检查这是否是针对您的特定问题的问题。对不起,我不能给你一个更具体的答案。 – Sam