敏捷数据库

遵循敏捷方法论的任何项目通常都会发现自己每年至少释放15 – 20次。 即使这些发行版中只有一半涉及数据库更改,也就是对生产数据库的10个更改,因此您需要一个良好的精益流程来确保获得良好的书面记录,但是与此同时,您也不想过分降低您的工作速度下。 因此,这方面的一些技巧:

提示1:介绍数据库日志表

使用DB Log表捕获运行的每个脚本,运行脚本的人,运行的时间,与脚本关联的票证等。这是PostGres的此类表的示例DDL:

create sequence db_log_id_seq;
create table db_log (id int8 not null DEFAULT nextval('db_log_id_seq'), created timestamp not null,  db_owner varchar(255), db_user varchar(255), project_version varchar(255), script_link varchar(255), jira varchar(255));

WRT表列:

  • id –表的主键。
  • 时间戳–脚本运行的时间。 这很有用。 相信我。
  • db_owner –执行脚本的用户。
  • db_user –编写脚本的用户
  • project_version_number –生成脚本的应用程序/项目的版本。
  • scrip_link – URL链接到脚本的源代码控制版本
  • jira –与脚本关联的票证的URL。

提示2:所有脚本都应具有事务性

对于每个脚本,请确保它在事务中发生,并且在事务内,请确保在db日志表中有适当的条目。 例如,这是一个删除列的脚本

BEGIN;
ALTER TABLE security.platform_session DROP COLUMN IF EXISTS ttl;
INSERT INTO db_log (
       db_owner, db_user, project_version, script_link, jira, created)
VALUES (
       current_user,
       'alexstaveley',
       '1.1.4',
       'http://ldntools/labs/cp/blob/master/platform/scripts/db/updates/1.1.4/CP-643.sql',
       'CP-643',
       current_timestamp
);
COMMIT;

提示3:脚本应该是幂等的

尝试使脚本幂等。 如果您的团队中有10个开发人员,那么不时有人不时地运行脚本两次。 您的db_log会告诉您这一点,但是请尝试确保在发生事故时不会造成严重损害。 这意味着您将获得一个简单的
安全失败,而不是一些新手吓到。 在上面的脚本中,如果运行两次,答案将完全相同。

提示4:对模式进行源代码控制

源代码控制整个项目的主DDL。 架构更改时会随时更新。 意味着您有更新脚本
以及包含整个项目的DDL的完整主脚本。 主脚本在每个CI的开头运行,这意味着:

  • 您的CI始终以干净的数据库开头
  • 如果开发人员忘记升级主脚本,则配置项将失败,您的团队将很快知道需要更新主脚本。
  • 当您拥有主脚本时,它将为您带来两个明显的优势:
    • 新开发人员可以非常快速地启动并运行一个干净的数据库

提示5:对开发人员友好

使开发人员易于生成主脚本。 否则,当加热时,它将无法完成。

提示6:升级和还原

为每个升级脚本编写一个相应的还原脚本。 生产中发生了意外情况,您必须能够将卡车退回!

BEGIN;

ALTER TABLE security.platform_session ADD COLUMN hard_ttl INT4;
UPDATE security.platform_session  SET hard_ttl = -1 WHERE hard_ttl IS NULL;
ALTER TABLE security.platform_session ALTER COLUMN hard_ttl SET NOT NULL;

ALTER TABLE security.platform_session ADD COLUMN ttl INT4;
UPDATE security.platform_session  SET ttl = -1 WHERE ttl IS NULL;
ALTER TABLE security.platform_session ALTER COLUMN ttl SET NOT NULL;


INSERT INTO db_log (
       db_owner, db_user, platform_version, script_link, jira, created)
       values (
       current_user,
       'alexstaveley',
       '1.1.4',
       'http://ldntools/labs/cp/blob/master/platform/scripts/db/reverts/1.1.4/revert-CP-463.sql',
       'CP-463',
       current_timestamp
    );

COMMIT;

直到下一次照顾自己。

翻译自: https://www.javacodegeeks.com/2016/06/agile-databases.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值