Getting Started with MyRocks
Download Facebook MySQL 5.6, then build from source
安装步骤,这都不会就不用往下做了,直接给连接https://github.com/facebook/mysql-5.6/wiki/Build-Steps
Set up my.cnf
想要把RocksDB引擎给启动起来,你至需要把至少下面这一些参数给写到my.cnf文件里面去
[mysqld]
rocksdb
default-storage-engine=rocksdb
skip-innodb
default-tmp-storage-engine=MyISAM
collation-server=latin1_bin (or utf8_bin, binary)
log-bin
binlog-format=ROW
如果你想在同一个实例里面同时使用Innodb和RocksDB的话,需要把skip-innodb改成allow-multiple-engines,但这种使用方法不推荐在生产环境中使用,因为多种存储引擎在一起并不能实现真正的事务【TODO1】,但如果只是用来做实验,那就随意了
Statement模式只能是在Slave上这么设置,而主库不行,因为MyRocks并不支持next-key锁(译者注:主备参数的一致性一定要保证,否则就是给自己挖了一个屎坑)
Initialize database with mysql_install_db
mysql_install_db --defaults-file=/path/to/my.cnf
Start mysqld
mysqld_safe --defaults-file=/path/to/my.cnf
Create RocksDB table
举一个栗子
CREATE TABLE `linktable` (
`id1` bigint(20) unsigned NOT NULL DEFAULT ‘0‘,
`id1_type` int(10) unsigned NOT NULL DEFAULT ‘0‘,
`id2` bigint(20) unsigned NOT NULL DEFAULT ‘0‘,
`id2_type` int(10) unsigned NOT NULL DEFAULT ‘0‘,
`link_type` bigint(20) unsigned NOT NULL DEFAULT ‘0‘,
`visibility` tinyint(3) NOT NULL DEFAULT ‘0‘,
`data` varchar(255) NOT NULL DEFAULT ‘‘,
`time` bigint(20) unsigned NOT NULL DEFAULT ‘0‘,
`version` int(11) unsigned NOT NULL DEFAULT ‘0‘,
PRIMARY KEY (link_type, `id1`,`id2`) COMMENT ‘cf_link_pk‘,
KEY `id1_type` (`id1`,`link_type`,`visibility`,`time`,`version`,`data`) COMMENT ‘rev:cf_link_id1_type‘
) ENGINE=RocksDB DEFAULT COLLATE=latin1_bin;
这个栗子里面演示了MyRocks里面的一些重要的特性以及一些限制,关于限制请看:MyRocks Limitations
- MyRocks的数据存储在RocksDB存储引擎内,每一个索引都有单独的数据文件。RocksDB内部是通过"Column Family"来去存储索引的,在默认情况下,所有的数据都会被存到一个默认的的Column Family里面去,你可以通过设置这个索引的Comment来去改变它。在上面这个栗子里面,主键被存储到了一个叫做cf_link_pk的Column Family里面,而id1_type 存储到了rev:cf_link_id1_type里面
- MyRocks还有一个特性被称为"Reverse Column Family",Reverse Column Family常常被用在会使用order by xxx desc这样的SQL语法里面,只需要在Column Family前面加上一个"rev:"便可以创建一个"Reverse Column Family",例如上面这个栗子
(译者注:Column Family就是列簇,考虑两种场景,第一,当我们想访问某一行的部分数据时,通常需要把整行读取出来,然后读取部分列的数据,这种效率固然不高,第二,我们也不能把每一列的数据全部拆开,这样当我们想读取多列的数据的时候,又一样歇菜了。因此Column Family的设计其实就是把会访问到的数据列单独给聚合到一起,其实就是索引里面的覆盖索引的设计思想)
时间: 2024-10-10 07:57:09