该表有两个字段:id、内容和只有一个主键(id)。
字段 id 类型为 bigint。字段内容类型为TEXT,该字段为var-lenth,可能有的记录为20k,记录的平均长度为3k。
表架构:
CREATE TABLE `events` (
`eventId` bigint(20) NOT NULL DEFAULT '0',
`content` text,
PRIMARY KEY (`eventId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
它只是用作键值存储。
我的测试结果是:
InnoDB: 2200 records/second
TokuDB: 1300 records/second
BDB-JE: 12000 records/second
LevelDB-JNI: 22000 records/second(not stable, need test again)
结果非常非常糟糕。
3K 对 tokuDB 来说太大了吗?
在我的应用程序中,插入很多(>2000 条记录/秒,约 1 亿条记录/天),很少有更新/删除。
TokuDB version: mysql-5.1.52-tokudb-5.0.6-36394-linux-x86_64-glibc23.tar.gz
InnoDB version: mysql 5.1.34
OS: CentOS 5.4 x86_64
我们选择 InnoDB/TokuDB 的一个原因是我们需要分区支持和易于维护。也许我会尝试 LevelDB 或其他 Key-Value 存储?欢迎任何建议。
===========
谢谢大家,最后测试 TokuDB 和 InnoDB 的性能都不足以满足我们的用例。
现在我们使用像 bitcask 这样的解决方案作为我们的存储。Bitcask append-only 风格的写入性能比我们预期的要好得多。我们只需要处理关于哈希索引的内存问题。