TokuDB 文件目录

本文详细介绍了TokuDB的文件目录结构,包括基础文件、表文件和索引文件的命名规则。通过分析tokudb.directory,揭示了TokuDB如何识别表和其相关文件。此外,还探讨了分区表的文件组织方式,强调了在大量分区情况下管理open-files-limit的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TokuDB的数据库文件默认是都放在datadir下的,你也可以指定tokudb_data_dir让其放在其他目录(tokudb将其所有schema的文件放在了一个目录下,不像innodb还会根据schema放不同子目录里,这个不太好)。

一个“新生”的TokuDB数据库,基础文件是这样的:
tokudb.directory --表/索引文件信息
tokudb.environment --TokuDB版本号信息
tokudb.rollback --undo记录
log000000000001.tokulog27 --redo记录
__tokudb_lock_dont_delete_me_* --文件锁,保证同一个datadir只能被一个TokuDB进程使用

在test数据库下面新建个表t1,并写几条数据:

CREATE TABLE `t1` (
`a` int(11) NOT NULL,
`b` int(11) DEFAULT NULL,
`c` int(11) DEFAULT NULL,
PRIMARY KEY (`a`),
KEY `bc` (`b`,`c`)
) ENGINE=TokuDB

就会发现目录下多出3个文件,表t1:

file1: _test_t1_key_bc_90_3_1b.tokudb --索引(bc)文件
file2: _test_t1_main_90_2_1b.tokudb --主文件
file3: _test_t1_status_90_1_1b.tokudb --表元数据文件

可以发现每个表最少2个文件,命名规则为:
_database_table_main*.tokudb
_database_table_status*.tokudb

索引是一个单独的.tokudb文件。

问题1: TokuDB如何知道哪些文件属于表t1
现在来dump下tokudb.directory:
{key={len=17 data="./test/t1-key-bc\000"} xid=0000000000000003 val={len=33 data="./_test_t1_key_bc_90_3_1b.tokudb\000"}}
{key={len=15 data="./test/t1-main\000"} xid=0000000000000002 val={len=31 data="./_test_t1_main_90_2_1b.tokudb\000"}}
{key={len=17 data="./test/t1-status\000"} xid=0000000000000001 val={len=33 data="./_test_t1_status_90_1_1b.tokudb\000"}}
TokuDB在启动的时候,会读取tokudb.directory,根据key信息组织出表t1的相关文件,并写到information_schema.tokudb_file_map表。

问题2: TokuDB如何知道表t1有哪些索引以及列信息

这些信息全部存在_test_t1_status_90_1_1b.tokudb文件里。

问题3: TokuDB的分区表文件是怎样的
实验走起来,首先创建一个按时间的分区表t2:
CREATE TABLE `t2` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `c1` int(11) DEFAULT NULL,
  `date` datetime NOT NULL,
  KEY `id` (`id`),
  KEY `c1` (`c1`)
) ENGINE=TokuDB DEFAULT CHARSET=latin1
/*!50100 PARTITION BY RANGE ( TO_DAYS(date))
(PARTITION p201508 VALUES LESS THAN (736176) ENGINE = TokuDB,
 PARTITION p201509 VALUES LESS THAN (736207) ENGINE = TokuDB,
 PARTITION rxMORES VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */
 
 现在分区表的文件是什么样的呢?
 
 data/_test_t2_P_p201508_key_c1_ba_4_1b.tokudb
data/_test_t2_P_p201508_key_id_ba_3_1b.tokudb
data/_test_t2_P_p201508_main_ba_2_1b.tokudb
data/_test_t2_P_p201508_status_ba_1_1b.tokudb
data/_test_t2_P_p201509_key_c1_bb_4_1b.tokudb
data/_test_t2_P_p201509_key_id_bb_3_1b.tokudb
data/_test_t2_P_p201509_main_bb_2_1b.tokudb
data/_test_t2_P_p201509_status_bb_1_1b.tokudb
data/_test_t2_P_rxMORES_key_c1_bc_4_1b.tokudb
data/_test_t2_P_rxMORES_key_id_bc_3_1b.tokudb
data/_test_t2_P_rxMORES_main_bc_2_1b.tokudb
data/_test_t2_P_rxMORES_status_bc_1_1b.tokudb
可以看到每个分区表有4个文件:1个main文件,1个status文件,还有2个key索引文件。
对于分区表来说,总的文件数目基本是:分区数目 * (1 + 1 + 索引数目)。

所以如果您的分区非常多,open-files-limit 配置可要小心了,要尽可能的大点,否则可能会出现”Too many open files”,从而导致实例crash!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值