做了5年开发,期间用过Oracle(9、10、11)、Sql Server(2005、2008、2012)、DB2、Mysql、PostgreSQL、Access、Sqllite、Redis等。 今天有空归纳一下数据库方面的设计、使用规范。

  • 开发、测试、线上环境隔离

  • 必须使用UTF8字符集

新数据库默认使用utf8mb4字符集。

utf8mb4是utf8的超集,支持emoji表情以及部分不常见的汉字,在utf8下会表现为乱码。
默认使用这个字符集的原因是:标准、万国码、无须转码、无乱码风险
  • 数据库、数据字段必须加入中文注释

  • 禁止使用存储过程、视图、触发器、Event

背景:并发量大、数据量大的互联网业务
重点:吞吐量,性能优先、对数据库性能影响较大的数据库特性尽量较少使用
  • 禁止使用外键,如果需要外键完整性约束,需要应用程序控制
  • 禁止大表使用JOIN查询,禁止大表使用子查询
  • 只允许使用内网域名,而不是ip连接数据库
缓存(memcache、redis)的连接,服务(service)的连接都必须使用内网域名,机器迁移/平滑升级/运维管理
提高工作效率
  • 禁止使用小数存储国币
  • 禁止使用负向查询NOT、!=、<>、!<、!>、NOT IN、NOT LIKE等,会导致全表扫描
  • 禁止使用应用程序配置文件内的帐号手工访问线上数据库
  • 禁止非DBA对线上数据库进行写操作,修改线上数据需要提交工单,由DBA执行,提交的SQL语句必须经过测试
  • 分配非DBA以只读帐号,必须通过VPN+跳板机访问授权的从库
⤧  Next post 消息队列设计概要 ⤧  Previous post Hadoop集群搭建(Centos)