当记录的平均长度为3k时,使用TokuDB引擎是否合适



该表有两个字段:id、content和只有一个主键(id)。

字段id类型为bigint。字段内容类型是TEXT,因为这个字段是可变长度的,可能有些记录是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条记录,每天大约100M条记录),很少更新/删除。

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或其他键值存储?欢迎任何一位客人。

================

感谢大家,最后测试TokuDB和InnoDB的性能对于我们的用例来说都不够好。

现在我们使用像比特桶这样的解决方案作为我们的存储。Bitask仅追加样式的写入性能比我们预期的要好得多。我们只需要处理关于哈希索引的内存问题。

如果您一次插入一行,我建议尽可能更改为多行插入语句,如"insert into events(eventId,content)values(1,'value1'),(2,'value2'),…",因为可能会有相当多的开销事务。此外,TokuDB在每个版本中都提高了性能,我建议在当前版本上运行。

TokuDB的主要功能是:

  • 热架构更改:
    • Hotindex创建:TokuDB表支持插入、删除和查询,并且在向该表添加索引时没有停机时间。它使用分形树进行索引,而innodb使用b-树
    • 热列添加和删除:当alter表添加或删除列时,TokuDB表支持插入、删除和查询,停机时间最短

更多关于什么是TokuDB的详细信息?如何在mysql 5.1上安装TokuDB?

最新更新