Galera:索引大数据时无法写入数据库

时间:2019-01-02 07:32:04

标签: mysql database-indexes galera

我正在使用具有3个节点的Galera Cluster。我目前遇到以下问题。我想将超过5亿条记录写入数据库,例如表Data。以下是步骤:

  • 使用表作为数据但不包含索引的方式创建表NewData。
  • 将5亿条记录写入此表。 (使用多个线程写,每个线程将写一堆记录)。
  • 完成后,为此表分配索引。
  • 将数据重命名为OldData,然后将NewData重命名为Data。

我目前遇到的问题是在索引短语中,其他服务无法写入/读取数据。增加innodb_buffer_pool_size之后,其他节点可以读取数据,但仍然无法写入。

我已进行配置,以便书面作业在与其他api不同的节点上进行写入,但是问题仍然相同。我认为,如果一个节点的工作量非常大,则另一节点仍应正常运行。请告诉我原因以及解决方法。

谢谢

1 个答案:

答案 0 :(得分:2)

我想你错过了一步。

  1. (一次性)创建表NewData,其架构为Data,但没有索引。
  2. 插入NewData
  3. 创建表`Empty(再次类似于Data,但没有任何索引)
  4. RENAME TABLE NewData TO ToIndex, Empty TO NewData;-现在可以继续摄取。
  5. ALTER TABLE ToIndex ADD INDEX ...
  6. RENAME TABLE Data TO Old, ToIndex TO Data;

关键是要进行两件事:

  • 继续写入未索引的NewData
  • 交换表,以便定期对该表(使用新名称)建立索引,然后用于替换活动表(始终显示为Data)。

这不是完全相同的情况,但是有一些相似之处:http://mysql.rjweb.org/doc.php/staging_table