我将数百万个 XML 文件(每个 1-100MB)归档到一个表中,其结构为
CREATE TABLE Data
(
ID int(11) unsigned NOT NULL,
XML longtext COMPRESSED,
PRIMARY KEY(ID)
) ENGINE=Aria DEFAULT CHARSET=utf8 COLLATE utf8_general_ci ROW_FORMAT=DYNAMIC;
INSERT INTO Data (ID,XML) VALUES ($id,LOAD_FILE('file.xml'));
该过程很慢,大约每秒 2-5 次插入。整个数据库对于 SDD 驱动器来说太大了,我在单独的 HDD 上创建数据库,但我将文件批量移动到 SDD 驱动器以使读取速度更快。请注意,磁盘速度不是决定速率的步骤,因为 XML 数据会因压缩而大幅缩小。
我尝试InnoDB
获得并发插入,但是InnoDB ibd的大小是ARIA/MyISAM的三倍,并且InnoDB在HDD上慢得多。
我尝试过ROCKSDB
,但无法在单独的磁盘上创建它,因为所有表都有一个目录。另外,ROCKSDB 的内存管理对于这种情况来说非常糟糕(或者我找不到正确的配置)。
我没有尝试ARCHIVE
引擎性能,因为它需要ID
井然有序。
我当前的解决方案是同时 INSERT 到 SSD 上的临时 InnoDB 表,然后INSERT INTO SELECT
从 InnoDB 表到 HDD 上的 ARIA 表。问题在于清空 InnoDB 和启动并发 INSERT 进程的完整性和延迟。
我很感激任何可能的解决方案。