一个真正基本的表,包含利用TokuDB存储引擎的多个交换机上的工具的引号:
CREATE TABLE `quotes` (
`ticker` char(4) NOT NULL,
`timestamp` time(3) NOT NULL,
`price` decimal(7,2) unsigned NOT NULL,
`size` smallint(5) unsigned NOT NULL,
`exchange` char(3) NOT NULL,
KEY `best_price` (`ticker`,`timestamp`,`exchange`,`price`),
KEY `best_size` (`exchange`,`ticker`,`price`,`timestamp`)
) ENGINE=TokuDB
Run Code Online (Sandbox Code Playgroud)
每当我在所有交易所查询最优价格时,它总是使用临时表.索引的存在exchange和price索引只会产生索引扫描,等同(ticker, timestamp)于TokuDB中的聚簇键.
EXPLAIN SELECT max(price),exchange
FROM quotes
WHERE
ticker="A" AND
timestamp BETWEEN "15:15:22.328961" AND "15:17:22.328961"
GROUP BY exchange
ORDER BY NULL \G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: quotes
type: range
possible_keys: best_price
key: best_price
key_len: …Run Code Online (Sandbox Code Playgroud) 我一直在考虑在开源项目中实现Bε树索引.据我所知,PerconaFT键值存储使用它们作为分形指数的基础,他们声称他们使用了几项美国专利 - 第8,185,551号和第8,489,638号.我不是律师,所以我有一个问题是否意味着没有其他人可以在他们的软件产品中实际实现基于Bε树的索引?
经过多次尝试,我终于使用 Homebrew 在我的 Macbook 上安装了 Percona 并通过 MySQL Workbench 成功连接到它,但是当我想创建 XtraDB 表时:
Operation failed: There was an error while applying the SQL script to the database.
Executing:
CREATE TABLE `TestSchema`.`TestTable` (
`ID` BIGINT(0) UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`ID`))
ENGINE = XtraDB;
ERROR 1286: Unknown storage engine 'XtraDB'
SQL Statement:
CREATE TABLE `TestSchema`.`TestTable` (
`ID` BIGINT(0) UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`ID`))
ENGINE = XtraDB
Run Code Online (Sandbox Code Playgroud)
TokuDB 也有同样的错误。
我读过 Percona 支持 XtraDB 和 TokuDB 以及 InnoDB。我应该在某处激活主题吗?!
虽然硬盘驱动器上还有一些空间,但是使用tokuDB存储引擎的表上的任何插入都会失败并显示错误:
错误代码:1021.磁盘已满(); 等待某人释放一些空间...(错误:189"磁盘已满")
其他存储引擎(例如innodb)上的插入仍然有效.
我准备了以下SQL语句来比较MyISAM、InnoDB和TokuDB的性能行为(INSERT执行100000次):
MyISAM:
CREATE TABLE `testtable_myisam` (`id` bigint(20) NOT NULL AUTO_INCREMENT, `value1` INT DEFAULT NULL, `value2` INT DEFAULT NULL, PRIMARY KEY (`id`), KEY `index1` (`value1`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `testtable_myisam` (`value1`, `value2`) VALUES (FLOOR(RAND() * 1000), FLOOR(RAND() * 1000));
Run Code Online (Sandbox Code Playgroud)
索引数据库:
CREATE TABLE `testtable_innodb` (`id` bigint(20) NOT NULL AUTO_INCREMENT, `value1` INT DEFAULT NULL, `value2` INT DEFAULT NULL, PRIMARY KEY (`id`), KEY `index1` (`value1`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `testtable_innodb` (`value1`, `value2`) VALUES (FLOOR(RAND() * 1000), FLOOR(RAND() * 1000));
Run Code Online (Sandbox Code Playgroud)
德库数据库:
CREATE TABLE …Run Code Online (Sandbox Code Playgroud)