国内最专业的IT技术学习网

UI设计

当前位置:主页 > UI设计 >

几千万记录,数据库表结构如何平滑变更?

发布时间:2019/09/23标签:   触发器    点击量:

原标题:几千万记录,数据库表结构如何平滑变更?

持续答复常识星球水友发问。成绩域:数据量大、并发量高场景,怎样在流量低峰期,腻滑实行表构造变革?画外音,个别来讲,是指增添表的属性,由于: 假如是减column,进级顺序不应用便可; 假如是修正column,顺序兼容性轻易出成绩;起首,一同看下有哪些罕见计划。(1) 计划一:在线修正表构造。画外音:alter table add column数据量大的情形下,锁表时光会较长,形成谢绝效劳,个别弗成行。(2) 计划二:经过增添表的方法扩大属性,经过外键join来查问。举个例子,对:t_user(uid,c1,c2,c3)想要扩大属性,能够经过增添一个表完成:t_user_ex(uid,c4,c5,c6)数据量大的情形下,join机能较差,个别弗成行。(3)计划三,经过增添表的方法扩大,经过视图来屏障底层庞杂性。同上,视图效力较低,个别不应用视图。画外音:最少58抵家制止应用视图。(4) 计划四,揍产物司理,禁止她修正需要。...(5) 计划五,提早预留一些reserved字段,加列可复用这些字段。这个计划可行,但假如预留过量,会形成空间白费。(6) 计划六,pt-online-schema-change关于MySQL而言,这是现在比拟成熟的计划,被广阔公司所应用。画外音:我呆过的互联网公司,数据库均应用MySQL。上面仍以用户表扩大为例,说下这个东西外部的道理与步调。假定:user(uid,name,passwd)要扩大到:user(uid,name,passwd,age,sex)第一步,先创立一个裁减字段后的新表:user_new(uid,name,passwd,age,sex)画外音:就是被扩大后的表。第二步,在原表user上创立三个触发器,对原表user停止的全部insert/delete/update操纵,都市对新表user_new停止雷同的操纵;第三步,分批将原表user中的数据insert到新表user_new,直至数据迁徙实现;第四步,删掉触发器,把原表移走(默许是drop掉);第五步,把新表user_new重定名(rename)成原表user;裁减字段实现,全部进程不须要锁表,能够连续对外供给效劳。操纵进程中须要留神: 变革进程中,最主要的是抵触的处置,一条准则,以触发器的新数据为准,这就请求被迁徙的表必需有主键(这个请求基础都满意); 变革进程中,写操纵须要树立触发器,以是假如原表曾经有许多触发器,计划就不可(互联网大数据高并发的在线营业,个别都制止应用触发器); 触发器的树立,会影响原表的机能,以是这个操纵必需在流量低峰期停止;pt-online-schema-change是DBA必备的利器,比拟成熟,在互联网公司应用普遍,要懂得更具体的细节,亦能够Google一下。任何离开营业的架构计划都是耍地痞。【本文为51CTO专栏作者“58沈剑”原创稿件,转载请接洽原作者】

版权信息Copyright © 银河官网 版权所有    ICP备案编号:鲁ICP备09013610号