我正在使用具有 3 个节点的 Galera 集群。我目前遇到以下问题。我想将超过 5 亿条记录写入数据库,例如表数据。以下是步骤:
- 创建表 NewData,将模式作为数据但没有索引。
- 将 5 亿条记录写入此表。 (使用多线程写入,每个线程会写入一堆记录)。
- 完成后,为该表分配索引。
- 将 Data 重命名为 OldData,并将 NewData 重命名为 Data。
我目前遇到的问题是索引短语,其他服务无法写入/读取数据。在我增加innodb_buffer_pool_size
后其他节点可以读取数据但仍然不能写入。
我已经配置好写入作业在与其他 api 不同的节点上写入,但问题仍然相同。我认为如果一个节点的工作负载非常高,其他节点应该仍能正常运行。请告诉我为什么以及如何解决这个问题。
谢谢
最佳答案
我想你错过了一步。
- (一次性)创建表
NewData
,其架构为Data
但没有索引。 - 插入
NewData
。 - 创建表“空”(同样类似于数据但没有任何索引)
RENAME TABLE NewData TO ToIndex,Empty TO NewData;
-- 现在可以继续摄取了。ALTER TABLE ToIndex ADD INDEX ...
RENAME TABLE Data TO Old, ToIndex TO Data;
关键是要进行两件事:
- 不断写入未索引的
NewData
。 - 交换表以便定期为该表(以新名称)编制索引,然后用于替换事件表(始终被视为
数据
)。
这不是完全相同的情况,但有一些相似之处:http://mysql.rjweb.org/doc.php/staging_table
关于mysql - Galera:索引大数据时无法写入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54002735/