手抄报 安全手抄报 手抄报内容 手抄报图片 英语手抄报 清明节手抄报 节约用水手抄报

MySQL数据库开发经验技巧

时间:2024-10-15 10:17:28

1、总结1:MySQL数据库属于服务内部实现,不要跨服务共享每个服务有自己独立的库(非数据库实例),不要把数据库表,访问账号等信息直接暴露给其他服务访问。服务的实现者可以选择适合自身业务的数据类型。典型反例:服务A和服务B公用一个MySQL数据库

2、总结2:禁止在MySQL数据库中存储图片、文件等大数据内容。

3、总结3:任何表的设计都要考虑到数据的删除策略,表中的数据不能无止境的增长而不删除。典型反例:某服务历史数据没有转储功能,日积月累,出现千万级别的大表。

4、总结4:要考虑MySQL墙绅褡孛数据库一致性问题。从以下几点考虑一致性问题:1)表之间一致性:业务拆分为大漉胜衲仰表和小表,创建、删除操作需要保证事务。2)并发写一致性:合法性检测到修改都要保证原子操作,比如限制数量。3)数据冗余一致性:表字段冗余,要保证类型一致,修改同步。4)数据迁移一致性:数据迁移前后要进行一致性,保证表数量、记录数、checksum不变。5)主从库一致性:因为主从库为异步复制,不是强一致性。6)数据库和缓存一致性:设定缓存过期时间,让非热点数据自动老化,保证最终一致性;缓存双淘汰机制;7)微服务之间一致性:微服务之间可能有些共享依赖数据,可选的方案有对流程优化、基于租约的定期校验等。

MySQL数据库开发经验技巧
MySQL数据库开发经验技巧

5、总结5:合理控制MySQL数据库的规模和数量建议单表数据量不超过100W;建议单库不超过100个表;建议单表字段数量上限控制在20~50个;

6、总结6:服务组提供数据表之间完整性检查工具;因为数据库是异步复制,可能存在微损倒换。如在异地容灾发生故障时需要手工切换前,服务需要提供数据完整性检查工具,作为倒换决策参考,避免倒换后服务启动失败等严重问题。

7、总结7:大规模存储要考虑数据库容量估算。1)表数据容量估算)单实例存储空间:总共多少张表,每张表最大存多少万条记录,每条记录占用多少K空间。三者相乘可以的得到大概多少G的数据空间。2)预留binlog日志的空间;3)备份预留存储空间:备份保留天数乘以存储空间;

8、总结8:大规模存储要考虑墙绅褡孛数据库性能估算。主要是根据服务的SLA指标(吞吐能力,请求时延)来推算,以下是一些参考指标:1)myslq单实例批插吞吐能力最低 1k/s.2)mysql单实例并发读吞吐能力最低 10k/s.3)Redis单实例并发读写吞吐能力 5~10w/s.4)RedisCluster并发读写吞吐能力 5w/s * N实例数量。5)为异地容灾的数据复制,估算网络带宽: 可选估算公式:每秒同时变化记录数 * 每条记录数字节数 * 8如:告警每秒1000条持续上报: 1K * 1K* 8 = 8 Mbps/s

9、总结9:提前进行资源估算,估算出对服务器要求。1)服务器:MySQL单实例1个节点,主从库2个节点,RedisCluster/Zookeeper一般要求3或5个节点2)内存:MySQL 5.6单实例内存缺省起步 800M。3)CPU:MySQL是多线程,单Redis单实例是单线程,最多占满1个核。4)磁盘:估算数据实际大小+索引空间+复制日志+备份空间5)网络带宽:平均包大小 * 最大并发数,还要考虑主从复制带宽核异地容灾预留单独带宽。

10、总结10:数据库实例和库拆分建议:1)分布式场景,考虑节约资源费用和维护成本,资源,缺省一个产品内服务可以共用数据节点,缺省一个服务组内的服务共用一个MySQL实例。2)服务组内部,根据数据重要程度,表数量,单表记录数,可进一步拆分成不同实例和不同库。当复制速度成为瓶颈,单机部署多实例可以间接提供复制能力。单IO成为瓶颈,考虑SSD。单实例一般10G存储,单库100张表,单表100万记录,单表60个字段,单表5个索引,单记录2k3) 禁止多个微服务共用一个库。

MySQL数据库开发经验技巧

11、总结11:大规模存储要重点考虑书库存储设计。以下需要重点考虑的因素:1)业务模型定义:OLTP还是OLAP,CAP选蚯岈烧缎哪两个,ER关系:一对多还是多对多,最终一致性还是强一致性。2)垂直分区,解决表数量太多,把业务关系密切的表放到同一个库,间接提供性能和可靠性,实时成本低。3)水平分区:解决单表记录数大,单个库存储不下或有性能压力,把单表拆分成多张表,保存到不同库/实例实现可扩展性,选择拆分维度很重要,实施成本高。4)历史数据要定期转储成文件或者大数据(HBase)中,避免耗尽整个磁盘空间。5)每张表数据量控制在100W以内6)读写分离,可以考虑将高热点,高吞吐能力要求的数据缓存到Redis中

© 手抄报圈