数据库的设计和优化?
1、数据库的设计:
一个好的数据库设计方案对于数据库的性能常常会起到事半功倍的效果。数据库的设计包含数据库架构和业务表的设计。
数据库架构:
根据不同的数据量和访问量,来设计不同的架构。适合自己的才是最好的。
单实例:数据读取和写入都是一个数据库实例。(备份实例不算在内)。这个适用于小型的企业内部系统。缺点是只适合数据量少的场景,优点是能达到数据的强一致性

2、垂直拆分,多实例。不同的业务走不同的实例。同样也是适用于单个业务,数据量不大,并且每个业务相对独立,不产生关联。

3、读写分离,主从架构。通过主从结构,主库抗写压力,通过从库来分担读压力。适用于写少读多,数据一致性的实时性要求不高的应用。

4、主从,集群结构。适用于写多,读也多的应用。实现是最为复杂的一种,需要考虑数据如何路由,后期扩容也相对麻烦。需要设计初期在理解业务的基础上,选择好合适的路由策略。例如range,hash等

5、云数据库:阿里云rds等。适合没有专业数据库运维团队的公司,使用非常方便和简单。
6、数据库的优化(mysql)
说起mysql优化,一定要了解一下mysql原理,这样才能深入的理解那些sql规则。下图展示了MySQL的逻辑架构图。

7、MySQL客户端/服务端通信协议是“半双工”的:在任一时刻,要么是服务器向客户端发送数据,要么是客户端向服务器发送数据,这两个动作不能同时发生。一旦一端开始发送消息,另一端要接收完整个消息才能响应它,所以我们无法也无须将一个消息切成小块独立发送,也没有办法进行流量控制。客户端用一个单独的数据包将查询请求发送给服务器,所以当查询语句很长的时候,需要设置max_allowed_packet参数。当服务器响应客户端请求时,客户端必须完整的接收整个返回结果,而不能简单的只取前面几条结果,然后让服务器停止发送。因而在实际开发中,尽量保持查询简单且只返回必需的数据,减小通信间数据包的大小和数量是一个非常好的习惯,这也是查询中尽量避免使用SELECT *以及加上LIMIT限制的原因之一。