给列创建索引是提高 SELECT 查询性能的最佳方式。索引类似于表行的指针,在查询时可以根据索引快速定位某些行与 WHERE 子句中的条件匹配,并检索该行的其他列值。MySQL 所有数据类型都可以创建索引。
虽然添加索引对查询带来的性能提效果是显著的,但也不是为每一个列都创建索引为好,索引还会增加 插入、更新和删除的成功,因为必须更新每个索引。
给列创建索引是提高 SELECT 查询性能的最佳方式。索引类似于表行的指针,在查询时可以根据索引快速定位某些行与 WHERE 子句中的条件匹配,并检索该行的其他列值。MySQL 所有数据类型都可以创建索引。
虽然添加索引对查询带来的性能提效果是显著的,但也不是为每一个列都创建索引为好,索引还会增加 插入、更新和删除的成功,因为必须更新每个索引。
Spring Cloud(四):客户端负载均衡 Ribbon
Ribbon 是 Netflix 开源的内置了软件负载均衡器的进程间通信(远程调用)库。支持负载均衡、容错处理、异步和响应式模型中的多协议(HTTP、TCP、UDP)支持、缓存和批处理。
目前行业常见的负载均衡方案分两种:一种是集中式负载均衡,在消费者与服务提供方中间使用独立的代理方式进行负载,有根据 IP 的硬件负载(如 F5,Array), 有软件的负载(如 Nginx,LVS等);另一种是客户端自己做负载均衡,根据自己对目标的请求做负载,Ribbon 就是属于客户端侧的负载均衡。
后续要讲到的 Rest 客户端 Feign 也是基于 Ribbon 实现的。
Spring Cloiud - Client Side Load Balancer: Ribbon 文档,Netflix Ribbon 官方文档,Ribbon 负载均衡文档,
所有 MySQL列类型都可以被索引,对相关列使用索引是提高select
操作性能的最佳途径。
MySQL中最常用的存储引擎有InnoDB
和MyISAM
,这两种存储引擎的表默认创建的都是B-Tree
索引;MEMORY
存储引擎使用HASH
索引,也支持B-Tree
索引。
MySQL系列(13): 索引 之 Hash索引 与 B-Tree索引
了解 B-tree 和 Hash 数据结构,有助于预测不同的查询在不同的存储引擎上使用这些数据结构的执行情况。特别是对于允许选择 B-tree 和 Hash 索引的内存存储引擎(MEMORY)。
InnoDB 存储引擎默认使用的是 B-tree 数据结构的索引。官方文档:B-tree 索引 与 Hash 索引比较
MyISAM存储引擎只支持表级锁。该锁类型是也使用非常广泛的锁类型。
Spring Cloud(三):服务发现之Eureka注册中心(2)-集群、配置、监控
分布式微服务在生产环境必须搭建集群来保证高可用,集群至少需要搭建两台服务器。
Eureka 的集群搭建配置非常简单,每一台 Eureka 只需在配置中指定另外多个 Eureka 的地址就可实现集群的搭建。官方文档:12. Service Discovery: Eureka Server。
加锁操作是为了保证多事务操作同一数据时可能保持一致性。有 悲观锁 和 乐观锁 两种方式。
悲观锁 是由数据库引擎提供支持;乐观锁 是常规 SQL 语句版本检测的一种主观理解。
Spring Boot 2系列(三十九):Spring Boot 2.x + Mybatis + Druid + Common Mapper 配置多数据源
项目需要连接多个数据库时,在不使用数据库中间件的情况下,就需要配置多个数据源,如主从数据库、新旧数据库(结构不一致)。
手头项目新需求需要连接两个数据库,需要配置两个数据源。项目的基本结构是基于 Spring Boot 2.x + Mybatis + Druid + Common Mapper + PageHelper,所以本篇也是在此基础实现多数据源的配置,留个记录。
Spring Cloud(二):服务发现之Eureka注册中心(1)-服务、客户端、安全认证
在学习 Eureka 之前,先了解下 Spring Cloud Netflix。
Spring Cloud Netflix 通过自动配置和绑定 Spring 环境以及 Spring 编程模型习惯为 Spring Boot 应用程序提供 Netflix OSS 集成。通过一些简单的注释,即可快速启用和配置常见的组件,并使用经过实战考验的 Netflix 组件构建大型分布式系统,提供的组件包含服务发布(Eureka)、断路器(Hystrix)、智能路由(Zuul)、客户端负载均衡。
Spring Cloud Eureka 是 Spring Cloud Netflix 套件之一;是 Netflix 服务发现服务器和客户端,主要负责服务发现;是一个基于 REST 的服务,能够方便地将服务注册到 Eureka 中进行统一管理,配置和部署高可用服务器,每个服务器将注册服务的状态复制到其他服务器(管理所有服务的信息和状态)。
Spring Boot 在默认情况下,提供了 /error
映射来处理所有错误,在 Servlet 容器里注册了全局的错误页面(Whitelabel Error Page)并返回客户端。
也可以自定义替换默认的异常处理, 通过实现 ErrorController 接口并注册为 Bean;或者添加 ErrorAttributes 类型的 Bean 来替换内容。
通常情况下,都会自定义全局异常统一处理,返回统一的消息结构体,便于了解和快速定位问题,Spring 提供了 @ControllerAdvice 注解,非常好实现。
Spring Boot 官方文档,错误处理:28.1.11 Error Handling