【发布时间】:2019-01-21 04:06:05
【问题描述】:
我正在从事一个需要生成数十亿个唯一代码的项目。目前我使用 MariaDB 和 InnoDB 引擎和 python 来生成随机唯一代码,每个生成周期插入 5000 个唯一代码。
我的表结构:
row_id int --primary key + autoincrement
unique_code varchar(10) --unique
问题: 当我达到 500.000.000 个唯一代码时,插入变得非常慢,我仍然需要生成多达 30 亿个代码。在达到这么多记录之前,我可以在几个小时内插入 300-4 亿个唯一代码。
任何帮助将不胜感激,谢谢!
更新(2019 年 1 月 22 日) 回答Rick James'的解决方案。 以下是一些生成代码的示例:
RLXT$CPS1Y
Y4P$9K70WO
PKSTY9M$FR
T$0VEFL2B1
RX4$MEKVQL
我的服务器有 32GB 的 RAM 和相对较快的 SAS 硬盘,我认为这足以满足我的需求(或者不是?)。
根据我的经验,TokuDB 的插入速度较慢,并且在达到 1 亿条记录之前很困难,所以我当时去了 InnoDB。
关于我之前提到的事务:是的,一次插入 5000 条记录。直到150m的代码都非常快,之后我注意到随着记录的增加速度逐渐下降。现在我要编写 800m 的代码,插入周期(5000 个记录)需要 10 到 15 秒。
我使用自动增量 ID 对记录进行排序和标记,因为这些代码将被转移到另一个数据库进行打印(生产)。所以我需要知道哪些代码已经转移,哪些没有。
我会等待进一步的答复,同时我会尝试Rick's suggestions。谢谢!
【问题讨论】:
-
你在使用事务吗?
-
我是。我也尝试过不同的存储引擎(MyISAM、TokuDB、XtraDB),但仍然没有找到解决方案
标签: python mysql mariadb innodb