【发布时间】:2019-11-29 06:20:35
【问题描述】:
我们使用 mysql(AWS aurora) 来存储我们在线支付交易的数据。我们的一张表,其中每一行存储特定事务的信息,有超过 10 亿行。
如何为交易添加新属性?由于需要大量时间,因此无法更改此表。
似乎唯一可能的解决方案是创建一个存储每个事务的键值对的新表。假设无法更改表结构,还有其他更有效的方法吗?
【问题讨论】:
-
@juergend "假设改变表结构是不可能的"
-
如果您无法更改表并需要另一列,那么除了使用附加数据创建一个新表之外别无他法。
-
MySQL 支持在线就地 ddl 操作,因此虽然可能需要一些时间(并且在此期间可能会降低服务器速度),但您可以继续使用该表,我不会完全忽略该选项。如果您已经在 MySQL 8 上,它甚至支持立即添加一列(在某些前提条件下)。
-
@Solarflare,您是否进行了就地 ALTER 以将列添加到具有 > 10 亿行的表中?还需要很长很长的时间。您在此期间所做的任何更改都会在一个固定大小的缓冲区(默认为 128MB)中排队。如果缓冲区填满,则 ALTER 失败。然后缓冲区需要合并到表中,无论 ALTER 失败还是成功。该表在此合并期间被锁定。
标签: mysql database database-design