- 浏览: 60546 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (117)
- RPC相关 (4)
- mvc_controller (3)
- mvc_model (3)
- maven (4)
- mvc_view (5)
- IO (2)
- 业务相关 (2)
- MQ (7)
- 搜索引擎 (3)
- zookeeper (2)
- 工具相关 (4)
- 编辑错误 (1)
- tomcat (1)
- 单元测试 (1)
- 负载均衡 (1)
- ubuntu (1)
- nginx (1)
- dubbo (2)
- 网络站点分发 (1)
- 电商-支付相关 (10)
- 电商订单业务相关 (3)
- Core java1 (3)
- Core Java (12)
- 多线程高并发(并发包/线程/锁) (10)
- 数据库+缓存 (17)
- springcloud (2)
- jvm (5)
- 日志相关 (1)
- 算法 (3)
- spring (2)
- 分布式一致性算法 (1)
最新评论
http://www.cnblogs.com/gossip/p/9237686.html
一.语句上外部配置优化:
1.1 系统日志有很多语句
慢查询语句
show_query_log = TRUE
show_query_file = /usr/local/mysql/slow_query_log.txt
show_query_time = 3
执行计划器:
EXPLAIN SELECT*FROM t;
explain select*from t;
使用执行计划器,看时间状态,进行判断sql性能好坏:
查询出数据,有字段type,最佳到最差按照排序有如下值(type):
system 最佳的值
const 主键也是索引
eq_ref 链接查询 查询条件是索引
ref
ref_or_null 链接有空值
https://blog.csdn.net/dennis211/article/details/78170079
all 最差的值
最差是all全表查询
索引根据我们数据结构抽取的另外一个隐性数据类型的数据结构,实现了B-Tree
或B+查询算法。
1.2 mysql 5.1以下版本联合索引失效:
如果用联合索引 只用或用到第一个字段(最左边字段)参与查询,联合索引会生效:
如果用联合索引 没有用到第一个字段参与查询,联合索引会失效:
此截图是mysql5.5 虽然慢,但还是使用到了索引,高版本优化了索引。
1.3 mysql 5.1以下版本联合索引失效:or,and
or的情况下两边都是单个索引字段,索引不生效--可以用联合索引。
但是5.6以上版本是生效的-两边都加索引字段提高效率。
--EXPLAIN select *from m_member_table where name='zhangsan' or age= 24
在or的两边(或or的其中一边)都是索引的情况下,失效--可以用联合索引。
5.6以上版本,两边都加索引字段提高效率。
and的情况下(或and的其中一边)单个索引是生效,记住这个坑,and两边有一个或都是索引字段就是生效。
1.4 mysql 5.1以下版本联合索引失效:like
like,正则查询,sphinx斯芬克斯搜索加速中文分词高能显示
使用like查询的时候,如果%符号在第一个位置,索引可能用不上
select * from t1 where name like "admin%" 索引用的上
select * from t1 where name like "%admin" 用不上
多表查询的时候不要使用子查询。因为子查询创建临时表,不仅创建还要销毁
二.简化sql:
1.不是用子查询
子查询就是将内层查询结果当外层条件,执行子查询时创建了临时表在磁盘中,创建和删除临时表耗费资源。
尽量采用join,或减少select嵌套
2.加陈余字段
尽量不使用join。比如订单行表加商品信息,订单表加总金额。
三.优化服务器硬件:
1.配置大内存
2.高速磁盘,合理分配磁盘,多核处理器。
四.mysql参数优化:
参数要结合数据引擎
不是越大越好,取决于内存大小。
比如:
key_buffer_size:表示索引缓冲区的大小。索引缓冲区所有线程共享。增加索引缓冲区可以得到更好的处理的索引(对所有读和多重写),它的大小取决于内存的大小,如果值太大,导致操作系统频繁换页,也会降低性能。
sort_buffer_size:表示每个需要排序的线程分配的缓冲区大小,增加这个参数值可以提高Order by与 Group by操作速度,默认值是2M。
table_cache:表示同时打开表的个数,这个值越大能够打开表个数越多,过大同时打开表太多会影响操作系统性能。
query_cache_size与query_cache_type
http://blog.csdn.net/jshuanghua/article/details/53858490
执行计划器:--深入学习
还包括内部参数优化,服务器版本,硬件,业务场景。唯一索引,注入索引。
redis 3.0以下不能做集群,可以使用主从,用哨兵监控。
redis 3.0以上做claub集群。
以上参考:http://blog.csdn.net/zhuxineli/article/details/14455029
postgre参考:http://blog.csdn.net/chuan_day/article/details/45841345
explain ANALYZE,set enable_seqscan to false;
object relation mapping(隐藏了数据访问细节,把sql写在java拼接,反射牺牲性能,多表力不从心)
分库分表
尽可能做到 同一个操作在一个库里。
分表产生id问题
1专门一张表,存储自增ID
2利用一致算法,根据时间不同,或者其他业务数据值,计算唯一的ID
分表
每个表结构一样,表明不同。
把表明计算规则抽取出来,每次查询之前,根据业务值,计算查询结果所在表。
查询之前,必须明确查询的范围比如时间点
分库
1.当使用切换数据源后,aop配置,事后处理,
自动切换到默认的数据源。
2.根据时间2015,2016,起不同key名,传入年份参数进行动态切库。
分库分表规则:
1.范围:数据分成n个区间范围,根据业务数据计算出记录所在范围区间。
2.哈希(hash):根据业务值,计算出hashcode,再对应具体数据库。
3.预定一个列表值,比如按照时间分库
产生问题:
1.两个库,进行分页如何解决。
2.查询两个表,分别在不同库,只能查询两次。这个问题不能避免,所以尽可能统一业务放一个库。
3.跨库服务操作,用到分布式事物。
总结
自己实现分库分表代码
聚簇索引与非聚簇索引
http://blog.csdn.net/lijiaz5033/article/details/50129723
https://www.cnblogs.com/T8881/p/5940338.html
发表评论
-
msql主从同步机制
2019-04-12 17:08 335DB主从分离:主服务 更新有线程记录mysq 的blog记录文 ... -
mysql原理分析(可用于培训)
2019-03-29 19:59 3181 ... -
redis主从同步/复制
2019-03-08 14:17 339redis主从是如何同步的 先说已经执行过首次同步(salvo ... -
数据库索引
2019-03-04 11:41 350参考:https://www.cnblogs.com/yelo ... -
数据库死锁&数据库锁知识点
2019-02-28 17:28 459参考:https://www.cnblogs.co ... -
redis 在业务代码应用
2018-08-02 16:30 5631.查库存 public class IndexDatas ... -
redis被动缓存
2018-04-04 18:45 515package com.pingan.haofang.ag ... -
本地缓存类
2018-04-04 18:44 352package com.pingan.haofang.ag ... -
缓存集中形式
2018-03-31 17:11 3511.被动缓存 被动缓存: 当取service服务数据redis ... -
分布式事务
2018-01-25 20:37 953事务 原子性,事务要么全执行,要么全不执行。 一致性,事务开 ... -
数据库死锁
2017-12-26 11:35 332死锁(Deadlock) 所谓死 ... -
redis sentinel & cluster 原理分析
2017-03-20 17:03 401[img][/img]http://lib.csdn.net/ ... -
redis sentinel:使用Spring-data-redis操作Redis的Sentinel
2017-03-20 10:22 653redis整合spring(redisTemplate工具类) ... -
mysql服务端安装(centos)
2017-03-02 18:10 416http://jingyan.baidu.com/articl ... -
redis cluster:缓存数据库Redis集群搭建
2016-12-19 22:39 520http://www.redis.cn/topics/clus ... -
mysql服务端与客户端安装(windows)
2016-12-02 11:23 830一.服务端安装5.7版本(zip的方式) 1.下载zip文件 ...
相关推荐
综上所述,"Python+MySQL分表分库实战"的学习内容涵盖了数据库设计原则、Python数据库操作技巧、分库分表策略以及性能优化等多个方面。通过学习和实践,开发者可以有效地解决大数据场景下的存储和查询问题,提高系统...
10. **使用ORM框架**:像SQLAlchemy这样的ORM(对象关系映射)框架,可以帮助简化数据库操作,但需要注意其在分库分表场景下的适应性。 通过以上内容,我们可以看出Python与MySQL的结合在应对大数据和高并发场景时...
5. **分布式事务支持**: 虽然MySQL等数据库本身支持分布式事务,但在分库分表场景下,Sharding-JDBC提供分布式事务解决方案,如基于X/Open XA的分布式事务和柔性事务。 在实际使用Sharding-JDBC进行多数据源切换时...
分库分表与读写分离是两种常见的数据库扩展策略,旨在解决单机数据库在高并发、大数据量下的性能瓶颈问题。本案例“分库分表案例.rar”提供了一个基于MySQL数据库实现的分库分表和读写分离的示例,采用IDEA开发环境...
### Shardingsphere 分库分表知识点详解 #### 1. 概览 ##### 1.1 简介 Shardingsphere 是一个分布式数据库中间件项目,它由 Apache 软件基金会维护,旨在为应用程序提供透明的数据分片、读写分离、数据加密等能力...
总的来说,ShardingSphere 为企业提供了强大的分布式数据库解决方案,通过分库分表等技术解决了大数据量和高并发场景下的数据库性能问题。然而,实施分库分表也带来了一些挑战,如事务一致性、规则设计和系统复杂性...
它不依赖任何特定的ORM框架,可以与JDBC、MyBatis、Hibernate等无缝集成,支持水平扩展,实现分库分表、读写分离等高级功能。 二、环境配置 在本示例中,我们采用SpringBoot作为基础开发框架,Mybatis-Plus作为...
标题"sharding-jdbc之——分库分表实例完整源码.zip"提到了"sharding-jdbc",这是一个用于Java的分布式数据库中间件,它提供了分库分表的功能,帮助解决大数据量下的性能瓶颈问题。"分库分表"是将一个大表的数据分散...
**MySQL分库分表**: 随着数据量的增长,单个数据库可能无法有效处理查询和写入请求,这时需要采用分库分表策略。分库是将数据分散到多个独立的数据库中,以减少单个数据库的压力;分表则是将一个大表划分为多个小表...
在IT行业中,数据库管理是关键任务之一,尤其是在大型系统中,如何有效地进行读写分离和分库分表显得尤为重要...不过要注意,实际应用中,你需要根据业务需求调整分片策略和数据源配置,确保性能优化与业务需求相匹配。
其路线规划涵盖了更多的数据库适配、优化性能、增强生态等方面,以满足日益复杂的分布式数据库需求。 在部署形态方面,ShardingSphere 提供了独立部署和混合部署两种方式。ShardingSphere-JDBC 可以直接嵌入到应用...
《Dapper与Mycat在MySQL分库分表操作中的应用》 在现代高并发、大数据量的Web应用中,数据库的性能优化是至关重要的环节。分库分表是一种常见的解决大数据存储和处理问题的策略,它能有效地提高数据读写效率,降低...
"EfDemo" 文件夹中的代码示例可能包括了如何配置和使用EF 6与EF Core实现分库分表的类库、上下文(DbContext)、实体模型以及相关的仓储接口和实现。示例可能会展示如何定义分片规则、如何处理跨数据库的查询和事务...
- **高扩展性实现**:采用分库分表、水平分割等方式应对数据量增长。 - **高性能优化策略**:结合缓存层、负载均衡等手段提升整体性能表现。 - **案例分享**:分享实际项目中遇到的问题及解决方案,加深理解。 以上...
9. **分库分表**:当单表数据量过大时,可以采用分库分表策略,如垂直分区(按列划分)、水平分区(按行划分)或混合方式,以分散负载,提高查询效率。 10. **读写分离**:主库负责写操作,从库处理读请求,能有效...
对于开发人员,MyCat 相当于一个与 MySQL 类似的数据库服务,可以使用与连接 MySQL 相同的方式与之交互,大多数情况下,ORM 框架也可用于连接 MyCat,但对于分片表,推荐使用标准 SQL 语句以优化性能。 MyCat 在...
综上所述,ShardingSphere 是一个强大的分布式数据库解决方案,其核心功能包括分库分表、读写分离等,旨在帮助开发者构建高可扩展、高性能的数据库架构。通过理解 ShardingSphere 的各个组件和概念,开发者可以更好...
分库后的路由规则制定、扩展性和数据迁移是Sharding面临的主要挑战。设计合理的路由规则既要考虑到当前的数据分布,也要预见到未来可能的扩展。数据迁移应尽量减少对业务的影响,并确保数据的一致性。 7. **总结**...
如果数据量非常大,还可以考虑分库分表策略。 在实际应用中,还应关注数据库的性能监控,定期分析慢查询日志,调整SQL语句,优化数据库性能。同时,确保代码具有良好的异常处理机制,以便在遇到问题时能够及时捕获...
数据访问层则有针对MySQL和MongoDB的分库分表框架和ORM框架。在数据计算层,Hadoop MapReduce处理离线计算,Kafka和Storm用于流式计算。接口交互层支持Thrift、WebServices和HTTP/JSON。基础服务层提供了认证、授权...