数据加载¶
默认情况下,MyRocks配置是针对短事务进行优化的,而不是针对数据加载。MyRocks有几个特殊的会话变量来显著加快数据加载。
分拣散装装载¶
如果保证数据以主键顺序加载,则推荐使用此方法。这种方法的工作原理是先删除任何辅助键,按主键顺序将数据加载到表中,然后通过快速辅助索引创建恢复辅助键。
创建二级索引¶
在将数据加载到空表中时,强烈建议先删除所有辅助索引,然后加载数据,在加载数据完成后添加所有辅助索引。MyRocks有一个功能叫做快速创建二级索引.快速二级索引创建在执行时自动使用创建索引或修改表…添加索引.使用快速二级索引创建,二级索引条目直接写入最底部的RocksDB级别并绕过压缩。这大大减少了在更高级别上解压和压缩数据的总写量和CPU时间。
加载数据¶
如上所述,强烈建议对只有主键(没有辅助键)的表加载数据,并在加载数据之后添加所有辅助索引。
当加载数据到MyRocks表时,有两个推荐的会话变量:
集会话sql_log_bin=0;集会话rocksdb_bulk_load=1;
当从大的MyISAM/InnoDB表转换时,可以使用改变或插入到选择语句,建议你创建如下MyRocks表(如果表足够大,它会导致服务器消耗所有的内存,然后被OOM杀手终止):
集会话sql_log_bin=0;集会话rocksdb_bulk_load=1;改变表格large_myisam_table引擎=RocksDB;集会话rocksdb_bulk_load=0;
使用sql_log_bin = 0避免写入二进制日志。
与rocksdb_bulk_load设置为1, MyRocks进入特殊模式,将所有插入写入最底部的RocksDB级别,并跳过写入MemTable和以下密实数据。这是一种非常有效的加载数据的方法。
的rocksdb_bulk_loadMode的操作有以下几个条件:
被批量加载的数据不能与表中的现有数据重叠。确保这一点的最简单方法是始终批量加载到一个空表中,但是该模式将允许将一些数据加载到表中,执行其他操作,然后返回并批量加载正在加载的数据和已经存在的数据之间没有重叠。
数据可能不可见,直到批量加载模式结束(即rocksdb_bulk_load再次设置为零)。所使用的方法是构建SST文件,这些文件稍后将原样添加到数据库中。在添加特定的SST之前,数据对系统的其余部分是不可见的,从而发出
选择在当前正在批量加载的表上,将只显示较旧的数据,可能不会显示最近添加的行。结束批量加载模式将导致添加最新的SST文件。当批量加载多个表时,启动一个新表将触发代码将最新的SST文件添加到系统中——因此,不建议交叉加载插入语句在批量加载模式下传输到两个或多个表。
默认情况下,rocksdb_bulk_load模式要求所有数据按主键顺序(或相反顺序)插入。如果数据的顺序相反(即数据在正常顺序的主键上降序,或在反向顺序的主键上升序),则行被缓存为块,以切换顺序以匹配预期的顺序。
无序地插入一行或多行将导致错误,并可能导致一些数据被插入到表中,而另一些则没有。要解决这个问题,可以修改插入的数据顺序、截断表并重新启动。
散货装载¶
如果您的数据不是按主键顺序排序的,那么建议使用此方法。使用这种方法,不需要删除和恢复辅助密钥。但是,写入主键不再直接写入SST文件,而是先写入临时文件进行排序,因此这种方法有额外的开销。
允许加载未排序的数据:
集会话sql_log_bin=0;集会话rocksdb_bulk_load_allow_unsorted=1;集会话rocksdb_bulk_load=1;…集会话rocksdb_bulk_load=0;集会话rocksdb_bulk_load_allow_unsorted=0;
请注意,rocksdb_bulk_load_allow_unsorted只能改什么时候rocksdb_bulk_load已禁用(设置为0).在这种情况下,所有输入数据都将经过一个中间步骤,即将行写入临时SST文件,按主键顺序对这些行进行排序,然后按正确的顺序写入最终SST文件。
其他方法¶
如果rocksdb_commit_in_the_middle启用时,MyRocks隐式提交每rocksdb_bulk_load_size记录(默认为1000年)在你的交易中。如果数据加载在语句中间失败(加载数据或散装插入),行不会完全回滚,但一些行存储在表中。要重新启动数据加载,需要截断表并重新加载数据。
警告
如果您在未启用的情况下加载大数据rocksdb_bulk_load或rocksdb_commit_in_the_middle,请确保交易金额足够小。正在进行的事务的所有修改都保存在内存中。
其他阅读¶
数据加载-本文档已被用作编写本文档的来源