Mycat
一MyCat 简介
1.1 mycat历史
2013年阿里的Cobar在社区使用过程中发现存在一些比较严重的问题,及其使用限制,经过Mycat发起人第一次改良,第一代改良版——Mycat诞生。 Mycat开源以后,一些Cobar的用户参与了Mycat的开发,最终Mycat发展成为一个由众多软件公司的实力派架构师和资深开发人员维护的社区型开源软件。
2014年Mycat首次在上海的《中华架构师》大会上对外宣讲,更多的人参与进来,随后越来越多的项目采用了Mycat。
2015年5月,由核心参与者们一起编写的第一本官方权威指南《Mycat权威指南》电子版发布,累计超过500本,成为开源项目中的首创。
2015年10月为止,Mycat项目总共有16个Committer。
截至2015年11月,超过300个项目采用Mycat,涵盖银行、电信、电子商务、物流、移动应用、O2O的众多领域和公司。
截至2015年12月,超过4000名用户加群或研究讨论或测试或使用Mycat。
Mycat是基于开源cobar演变而来,我们对cobar的代码进行了彻底的重构,使用NIO重构了网络模块,并且优化了Buffer内核,增强了聚合,Join等基本特性,同时兼容绝大多数数据库成为通用的数据库中间件。1.4 版本以后 完全的脱离基本cobar内核,结合Mycat集群管理、自动扩容、智能优化,成为高性能的中间件。我们致力于开发高性能数据库中间而努力。永不收费,永不闭源,持续推动开源社区的发展。
Mycat吸引和聚集了一大批业内大数据和云计算方面的资深工程师,Mycat的发展壮大基于开源社区志愿者的持续努力,感谢社区志愿者的努力让Mycat更加强大,同时我们也欢迎社区更多的志愿者,特别是公司能够参与进来,参与Mycat的开发,一起推动社区的发展,为社区提供更好的开源中间件。
Mycat还不够强大,Mycat还有很多不足,欢迎社区志愿者的持续优化改进。
1.2 MyCat的作用
遵守Mysql原生协议,跨语言,跨平台,跨数据库的通用中间件代理。
基于心跳的自动故障切换,支持读写分离,支持MySQL主从,以及galera cluster集群。
支持Galera for MySQL集群,Percona Cluster或者MariaDB cluster
基于Nio实现,有效管理线程,高并发问题。
支持数据的多片自动路由与聚合,支持sum,count,max等常用的聚合函数。
支持单库内部任意join,支持跨库2表join,甚至基于caltlet的多表join。
支持通过全局表,ER关系的分片策略,实现了高效的多表join查询。
支持多租户方案。
支持分布式事务(弱xa)。
支持全局序列号,解决分布式下的主键生成问题。
分片规则丰富,插件化开发,易于扩展。
强大的web,命令行监控。
支持前端作为mysq通用代理,后端JDBC方式支持Oracle、DB2、SQL Server 、 mongodb 、巨杉。
支持密码加密
支持服务降级
支持IP白名单
支持SQL黑名单、sql注入攻击拦截
支持分表(1.6)
集群基于ZooKeeper管理,在线升级,扩容,智能优化,大数据处理(2.0开发版)。
二Mycat 术语与原理
2.1 垂直分片
2.2 水平分片
如上所示是我们所说的数据库分片。单表可以进行水平分片或者垂直分片。具体的一般来说字段比较多,经常查询的字段集中在某几个字段的大表。我们可能需要进行垂直分片,用来提高查询的性能。但是如果是数据量比较大的话,我们尽量采用水平分片,解决单表数据量过大造成的查询基数过大,或者并发访问比较大,造成数据库连接销售比较大的场景。
关于垂直分表,一般按照常用的字段分一张表,即可。至于水平分表,这个就可以自定义分表规则来进行分表了。按照具体的业务来进行具体的分表。水平分表有两种方式,一般是分库分表,和库内分表两种。
2.2.1 分库分表
如上图所示是分库分表的示意图,如图所示我们把一张很大的表拆分到不同的数据库中,相对于应用程序来说,应用程序能够看到的就是前面的逻辑库,然而真实的却是后面的三个物理库与表。分库分表又涉及到一个问题。是一台主机一个库,还是一台主机N个库的问题。这里就涉及到一个问题了,如果我们把一个库叫做一个节点的话,实际上一台物理机上是可以有多个节点的。也就是说我们既可以一台物理机N个节点,也可以一台物理机一个节点。
如上图所示的配置,在mycat中的配置展示如下所示,可以看到dataNode代表的就是数据库,然而dataHost表示的是数据库所在的主机,这也充分的说明了分库分表节点与主机的关系。
“ writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
select user()
“ password="123456">
“ password="123456" />
如图是mycat的工作流程,指定mycat的分片字段,再指定mycat的分片规则,按照指定的分片规则把对应的数据放到不同的节点中去。
如上分别是schema.xml配置文件中配置的表分片到两个节点上,调用了rule.xml中具体的分片规则进行分片。
2.2.2 数据库表
(1)非分片表
非分片表是指普通的业务表,在我们的整个业务系统中,实际上毕竟也不是每一个表的数据量都很大的。这就行成了我们普通的业务表,也就是我们的非分片表。非分片表可以指定放在一个主库中,作为我们读写数据的主库用。数据量不会随着系统使用年限的暴增而暴增的那种。
分片表
也就是我们所说的大表,也就是说单表数据量超过1000万的表,在系统开发阶段,如果逾期单表数据量会超过1000万的表,将来一定会成为系统的鸡肋,这种情况下要对这种容易形成大表的表做分表处理,避免单表数据量过大,影响系统的查询性能。
E-R表
普通E-R
级联E-R层级关系配置
对于单层的E-R关系表的分表,字表可以通过父表的主键来进行分表。
对于多层的E-R关系表的分表,可以在第三层,或者更深层次的子表中增加祖先表的id,作为冗余字段,这样的话分表的时候
就可以通过祖先表的id来作为分表的条件。这就是级联分表的方案。
多对多关系处理
有一类业务场景是”主表A + 关系表 + 主表B”,举例来说就是商户会员 + 订单 + 商户,对应这类业务,如果切分: 从会员的角度,如果需要查询会员购买的订单,那按照会员进行切分即可,但是如果查询商户当天售出的订单,那又需要按照商户做切分,可以是如果按照会员又要按照商户切分,几乎是无法实现,这类业务如何选择切分规则非常难。目前还暂时无法很好支持这种模式下的3个表之间的关联。目前总的原则是需要从业务角度来看,关系表更偏向哪个表,即”A的关系”还是”B的关系”,来决定关系表跟从那个方向来存储,未来MyCat版本中将考虑将中间表进行双向复制,以实现从A-关系表以及B-关系表的双向关联查询如下图所示:
存在父子表的数据插入的过程中,mycat会把与主表存在关联关系的子表数据路由到父表所在的节点。从而父子表关系的查询可以下推到各个节点去完成。这就是高效的跨节点join技术。
(4)全局表
每个节点同时并发插入数据,更新数据,每个节点都可以同时读取数据,提升读性能的同时,解决跨节点join的效率。
select user()
如上所示配置分别有全局表,分片级联表,多对多关系表的处理配置的实例。
(5)全局主键
由于采用了,分片的方式进行了数据的存储,所以无法保证主键的唯一性,要保证主键的唯一性,我们就要借助一张表来单独生成主键的序列。
在数据库中建立一张表,存放sequence名称(name),sequence当前值(current_value),步长(increment) int类型每次读取多少个sequence,假设为K)等信息
2.2.3 库内分表
如上图所示我们把一张表在同一个库中拆成N分这样子。
三 主从复制
如上图所示mycat可以帮助实现主从的架构, 影响MySQL-A数据库的操作,在数据库执行后,都会写入本地的日志系统A中。
假设,实时的将变化了的日志系统中的数据库事件操作,在MYSQL-A的3306端口,通过网络发给MYSQL-B。 MYSQL-B收到后,写入本地日志系统B,然后一条条的将数据库事件在数据库中完成。那么,MYSQL-A的变化,MYSQL-B也会变化,这样就是所谓的MYSQL的复制,即MYSQL replication。
在上面的模型中,MYSQL-A就是主服务器,即master,MYSQL-B就是从服务器,即slave。
日志系统A,其实它是MYSQL的日志类型中的二进制日志,也就是专门用来保存修改数据库表的所有动作,即bin log。【注意MYSQL会在执行语句之后,释放锁之前,写入二进制日志,确保事务安全】
日志系统B,并不是二进制日志,由于它是从MYSQL-A的二进制日志复制过来的,并不是自己的数据库变化产生的,有点接力的感觉,称为中继日志,即relay log。 可以发现,通过上面的机制,可以保证MYSQL-A和MYSQL-B的数据库数据一致,但是时间上肯定有延迟,即MYSQL-B的数据是滞后的。【即便不考虑什么网络的因素,MYSQL-A的数据库操作是可以并发的执行的,但是MYSQL-B只能从relay log中读一条,执行下。因此MYSQL-A的写操作很频繁,MYSQL-B很可能跟不上。】
四 读写分离
如上图所示是mycat 支持读写分离的架构的示意图,如图所示我们通过binlog实现了主从复制以后,使得主库与从库有了相同的数据副本。我们可以配置mycat从一个数据库中写数据,并且从另一个数据库中对数据进行读取。
如上图所示我们应用程序直接对接,我们的数据库中间件mycat,后台的mycat采用了一主多从,读写分离的存储部署架构。可以提高数据库的读写性能与系统的并发。
事务内的SQL,默认走写节点,以注释/*balance*/开头,则会根据balance=“1”或“2”去获取
非事务内的SQL,开启读写分离默认根据balance=“1”或“2”去获取,以注释/*balance*/开头则会走写解决部分已经开启读写分离,但是需要强一致性数据实时获取的场景走写
负载均衡类型,目前的取值有3种:
1. balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的writeHost上。
2. balance="1" ,全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式 (M1->S1 , M2->S2 ,并且 M1 与 M2 互为主备 ) ,正常情况下, M2,S1,S2 都参与 select 语句的负载均衡。
3. balance="2",所有读操作都随机的在writeHost、readhost上分发。
4. balance="3" ,所有读请求随机的分发到 wiriterHost 对应的 readhost 执行, writerHost 不负担读压力
五 数据连接池
如上图所示以前一个应用,或者多个应用连接同一个库,分享一个库的2000个最大连接,引入mycat的以后,我们可以设置每个应用最大连接2000个。mycat后台有一个数据库连接的连接池可以用。
Mycat 基于MySQL实例而非database的连接池复用机制,可以让每个应用最大程度共享一个MySQL实例的所有连接池,让数据库的并发访问能力大大提升。
六 分片规则
数据库分片的规则分两个大类,一种是连续的分片也就是我们说的范围分片,一种是离散的分片也就是我们说的取模分片。
6.1连续分片
扩容无需迁移数据,范围查询消耗资源少。
存在数据热点的可能性,并发访问能力受限于单一或少量的dataNode。
6.2离散分片
并发访问能力强,范围条件查询性能提升。
数据扩容比较困难,涉及数据迁移问题。
数据库连接消耗比较多。
6.3 二次分片
如上图所示,先进行范围分片,再进行离散分片,既解决了热点数据,资源受限的问题。又解决了,并发访问能力的问题,也比较进行数据扩容,避免了数据迁移。
6.4 常用mycat分片
6.4.1 自定义范围分片
自定义数字范围分片,提前规划好分片字段某个范围属于哪个分片
autopartition-long.txt
0
defaultNode 超过范围后的默认节点。
此配置非常简单,即预先制定可能的id范围到某个分片
0-500M=0
500M1-1000M=1
1000M1-1500M=2
或
0-10000000=0
10000001-20000000=1
注意: 所有的节点配置都是从0开始,及0代表节点1
6.4.2 按日期分片
从开始日期算起,按照天数来分片
例如,从2014-01-01,每10天一个分片
注意事项:需要提前将分片规划好,建好,否则有可能日期超出实际配置分片数
yyyy-MM-dd
2014-01-01
10
6.4.3 按自然月分片
每个自然月一个分片。需要提前将分片数规划好,建好,否则有可能日期超出实际配置分片数。
yyyy-MM-dd
2014-01-01
dateFormat : 日期字符串格式
sBeginDate : 开始日期
6.4.4 十进制求模分片
规则为对分片字段十进制取模运算,数据分布最均匀。
3
6.4.5 一致性hash分片
此规则优点在于扩容时迁移数据量比较少,前提分片节点比较多,虚拟节点分配多些。
虚拟节点少的缺点是会造成数据分布不够均匀。
一致性hash算法大致的意思是,创建一条2的32次幂的时间轴,跟正式的物理机一样创建N个正式的物理机节点,环上形成CN个虚拟节点,在换上实现一个虚拟的映射。在命中的时候,根据距离环最近的虚拟节点,落到真实的节点上即可。按照分片规则应该描述为寻找最近的虚拟分片,插入到真实的物理分片中。
此规则优点在于扩容时迁移数据量比较少,前提分片节点比较多,虚拟节点分配多些。虚拟节点少的缺点是会造成数据分布不够均匀,如果实际分片数量比较少,迁移量会比较多。
class="org.opencloudb.route.function.PartitionByMurmurHash">
0
2
160
6.4.6 范围求模分片
先进行范围分片计算出分片组,组内再求模优点可以避免扩容时的数据迁移,又可以一定程度上避免范围分片的热点问题分片组内使用求模可以保证组内数据比较均匀,分片组之间是范围分片可以兼顾范围查询。
最好事先规划好分片的数量,数据扩容时按分片组扩容,则原有分片组的数据不需要迁移。由于分片组内数据比较均匀,所以分片组内可以避免热点数据问题。
partition-range-mod.txt
21
partition-range-mod.txt
以下配置一个范围代表一个分片组,=号后面的数字代表该分片组所拥有的分片的数量。
0-200M=5 //代表有5个分片节点
200M1-400M=1
400M1-600M=4
600M1-800M=4
800M1-1000M=6
6.4.7 日期范围hash分片
日期范围hash分片:
思想与范围求模一致,当由于日期在取模会有数据集中问题,所以改成hash方法。
要求日期格式尽量精确些,不然达不到局部均匀的目的
sPartionDay代表多少天分一个分片
groupPartionSize代表分片组的大小
6.4.8 分片场景策略与总结
根据表数据量判断是否需要切分,确保切分后单分片表数据量为1000W左右
根据业务的情况选择合适的分片字段:最频繁的或者最重要的查询条件,需要考虑扩容数据迁移问题(范围类,范围取模类不需要迁移,哈希类需要迁移)
有关联关系的表配置相同分片规则(ER思想,为了应用join等复杂sql),一对多对应关系一般按多的那一方切分
如果配置类数据,更新频率比较少,考虑全局表
七 查询
7.1 跨分片查询
在跨分片进行查询的时候,mycat是基于内存进行分片的分页与排序的,所以呢如果数据量比较大的情况下,会比较消耗mycat的整体性能。
如上图是mycat对后台的查询分页的操作,如图所示mycat把查询下发到具体的mysql节点,这个过程sql的执行是并发的执行的,也就是mycat执行一次,下发到下面的n台mysql的物理机上对应的去查询。
7.2 跨分片排序
Mycat排序采用的是堆排序,具体堆排序怎么玩的,自行看算法的书籍。
7.3 跨分片连接
在每一个分片库里,参与join的,多个表数据符合join的分片规则。简单的说就是E-R表分片在不同的数据库中的时候。就是单独查询那个数据库的信息了。
八 高可用
如上图所示可以用keepalived,映射一个VIP的IP地址来实现高可用的架构。
九 mycat使用经验分享
不支持语法 select 跨分片的交叉查询,两个表中的分片字段不同 跨结点的联合查询 insert 插入的字段不包含分片字段 插入的分片找不到对应的分片 复制插入,insert into ... select ... update 更新列包含分片列 delete 删除语句不能起别名,delete user_info a where a.main_user_id=1
全表扫描 1、复杂的sql会分发到所有库上执行,并且在mycat中进行比较、合并,要尽量避免。 2、insert/replace 必须要包含分库字段 3、select/update/delete语句如果where没有包含分库字段,会进行全表扫描。 4、支持in(...)语法,mycat 内部将其视为多个条件值的OR。
聚合函数 1、如果目标表分库,mycat可以支持任何聚合函数,实际上DRDS 是直接把原sql 传递到后端mysql 执行 2、sql语句经过mycat路由后,直接发送到后端单个mysql 库上执行。如分库字段在where条件中都是= 关系,同样可以支持任何聚合函数。 3、全表扫描:目前支持聚合函数有:count,max,min,sum 另外在全表扫描时同样支持like,order by,limit ,不支持group by。
1、order by 1)order by 中出现的列名,保证在select 后出现, 如:select c1 from tb order by c2 写成:select c1,c2 from db order by c2 2)当语句中同时有order by 和 limit 分页时,mycat 执行order by 的内部逻辑是将所有的limit offset 之前的数据从mysql 加载到mycat 服务器内存中进行排序。所以不要对大量数据进行order by + limit 翻页。 3、对于非count,max,min,sum的聚合函数,在全表扫描的场景下执行不一定会返回错误,但是执行的结果很可能是错误的。 4、mycat 支持like 查询,会进行全表扫描
mycat 的HINT支持 mycat 对自身不支持的sql 语句提供了一种解决方案,即在要执行的sql 语句前添加额外的一段注解sql,这样sql 就能正确执行,这段sql 称为“注解sql”。其作用就是通过“注解sql”找到最终执行的sql数据节点,把要执行的sql发送到节点执行。 使用方式:/*!mycat:sql=注解sql*/要执行的sql
示例: 前提:表tb_user 分片字段为user_id。 操作:通过mysql 命令连接到 mycat(连接命令mysql -h192.168.192.133 -utest -ptest -P8066 -DTESTDB) 执行sql mysql>select * from tb_user; ERROR 1105 (HY000): backend connect: java.net.NoRouteToHostException: No route to host 可以看到错误信息为找不到目标host 使用注解,查询某一个结点的所有tb_user 数据,查询user_id=227 上分片的所有user_id,使用注解如下: mysql>/*!mycat:sql=select * from `bill_log` where member_id=10*/SELECT * FROM `bill_log`; 注解查询出来的数据在那个结点,就把sql 发送到那一个结点执行并返回。
事物支持 没有跨分片的事物强一致性支持,单库内部可以保证事务的完事性。如果跨库事物,在执行的时候任何分片出错所有分片都会加滚,但是只要应用发起commit,不能保证所有的分片都能commit。
你可能感兴趣的:(分库,分表)
《评量问句是寻找例外的工具》卓丽,坚持第1788天原创分享(2019.10.31星期四):
半夏五月天
《评量问句是寻找例外的工具》卓丽,坚持第1788天原创分享(2019.10.31星期四):寻找例外的方法很多,评量问句也是其中的一个重要的工具。例如,在1分到10分的量尺上,10分的位置表示奇迹已经发生的状态,1分表示相对的位置,请当事人去评量现状,1分与现状间分数的差异,将引发对例外经验的觉察。也可以借助重要他人的观点,确认当事人例外的存在、成功要素及影响。例如:“1分到10分,10分表示你觉得
python拆分excel表格-还在手动拆分Excel?用Python几行代码就搞定了!
weixin_37988176
最近遇到一个需求,就是要把一个Excel表格按照不同的维度进行拆分。相信很多人都碰到过这种问题,如果你是人事,你每个月都要把考勤情况发送给不同的部门;如果你是财务,你每个月可能要把报销情况发给不同的负责人;如果你是老师,可能要把不同班级的成绩发送给不同的班主任。但是,如果要手动来拆分表格的话,将会耗费大量的时间。那么我们就想到把这部分工作使用Python自动化。首先我们要导入需要使用的包:impo
SpringBoot整合ShardingSphere
陌殇殇
中间件 spring boot 后端 java
SpringBoot整合ShardingSphere文章目录SpringBoot整合ShardingSphere1.概述1.Sharding-JDBC2.Sharding-Proxy3.比较2.ShardingJdbc读写分离1.pom依赖2.yml配置3.测试4.props其他配置3.ShardingJdbc分库分表1.分库分表方式2.逻辑表3.分库分表数据节点-actual-data-node
何其有幸遇见你
月岛小雯子
母亲大人:近来还好吗?知道你素来喜静,为人清冷,只有在熟悉的人面前才多几分表情,比我这个理工男还要僵硬。所以,采取这样的方式向你表达我的想念,你应该更能够接受吧。刚提起笔,竟然有些不知道自己该说什么。也许是情近更怯,不知道该说些什么。小时候总以为日子慢的不像话,可是转眼间二十多年已过,时间的刻度一笔笔记在我们的面容上。你脸上的肌肤不再光泽润滑,笑的时候有了明显的褶皱,发际线也慢慢变高。而你看着我慢
TDSQL MySQL版基本原理-水平分表 读写分离 弹性扩展 强同步
腾讯云数据库
腾讯云 数据库
TDSQLMySQL版(TDSQLforMySQL)是部署在腾讯云上的一种支持自动水平拆分、SharedNothing架构的分布式数据库。TDSQLMySQL版即业务获取的是完整的逻辑库表,而后端会将库表均匀的拆分到多个物理分片节点。水平分表概述水平拆分方案是TDSQLMySQL版的基础原理,它的每个节点都参与计算和数据存储,且每个节点都仅计算和存储一部分数据。因此,无论业务的规模如何增长,我们仅
为什么需要分布式数据库
KunlunBase 昆仑数据库
KunlunBase postgresql 数据库 mysql 分布式存储 数据库开发
这些年,由于数据规模和业务访问负载越来越大,越来越多的公司无法依赖单台数据库服务器支撑其业务,越来越多的公司不得不做数据分区存储,也就是所谓的分库分表,但大量的烦恼与困惑也随之而来。令人“头都大了”的分库分表中间件10多年前阿里因此原因不得不把淘宝后台系统从OracleRAC切换到数百个MySQL集群构成的分库分表集群,不过那时的淘宝仅仅使用一个分库分表中间件,名为tddl(又名:头都大了,江湖上
数据库分库分表-ShardingSphere学习
学Java的skyyyyyyyy
数据库 java
ShardingSphere是一个开源的分布式数据库中间件解决方案,旨在提供数据库分片、分布式事务、读写分离、数据治理等多种数据服务,它以模块化的方式设计,使用户可以根据不同的应用场景选择适合的模块来部署。ShardingSphere架构概述ShardingSphere的架构主要围绕四个核心组件展开,分别是Sharding-JDBC、Sharding-Proxy、Sharding-Sidecar(
SpringBoot多数据源配置
代码蒋
spring boot java
目录1SpringBoot分库配置1.1准备数据1.2springboot+mybatis使用分包方式整合1.2.1pom.xml1.2.2application.yml配置文件1.2.3连接数据源配置文件1.2.3.1连接源配置一1.2.3.2连接源配置二1.2.4项目结构1.3springboot+druid+mybatisplus使用注解整合1.3.1pom.xml1.3.2applicat
再做leetcode42hard题接雨水——双指针法
Cider瞳
力扣刷题 动态规划 算法 c++ leetcode 面试 双指针
再做leetcode42hard题接雨水——双指针法给定n个非负整数表示每个宽度为1的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例1:输入:height=[0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组[0,1,0,2,1,0,1,3,2,1,2,1]表示的高度图,在这种情况下,可以接6个单位的雨水(蓝色部分表示雨水)。示例2:输入:height=[4,
mysql水平分表和垂直分表和数据库分区
程宇寒
数据库 mysql 水平分表 垂直分表 数据库分区
坚信数据库的物理设计在对高级数据库的性能影响上远比其他因素重要。给大家说一下经过专家对Oracle的研究,他们解释了为什么拙劣的物理设计是数据库停机(无论是有计划的还是没计划的)背后的主要原因。但在这点上俺还是坚持DBA如果想要高性能的数据库就必须在数据库的物理设计上多思考的观点,这样才能减少响应时间使终端用户满意而不是引来骂声一片。今天的文章是MySQL5.1的发布带来了设计超强动力数据库的强有
读《非暴力沟通》第十章——充分表达愤怒2021-11-28
雅风66
一、人为什么会生气生气是为满足的需要的悲观表达,实际上是对他人的指责和评判,认为对方需要认错或受到惩罚。生气受外部刺激而起,但本质在于我们内在的思维方式对外在刺激的看法。二、如何正确应对生气?1、倾听他人,体会他人的感受和需要,2、倾听自己,体会自己的感受和需要。把愤怒的情绪聚焦在自己为满足的需要,因而设法满足它。几天前,我就和皮蛋先生约好,本周六我带孩子出去玩一天,周日他带孩子玩,让我放假一天。
Bootstrap - 表单
廖马儿
Bootstrap给HTML大部分表单都设置了默认样式,我们可以给表单添加相应类名,以实现表单的水平排列,个性化定制等。代码:这是一个输入框:这是一个输入框:北京北京北京这是一个输入框:效果:图片.pngclass:对标签添加:class="form-inline"可以让它水平排列:图片.png对Input设置大小可以添加class:input-sminput-lg应该使用form-group设置
李蕊中原焦点团队网络中级第27期,坚持分享第117天,2021年8月14日第六期挑战约练第6周第4、5次总第35次
淡淡的感觉
第4场角色:观察员全心的陪伴与倾听,给来访者以安全的环境,让其充分表达,讲述的过程即可促使来访者疏理与思考。适时并精准的总结与回馈,给来访者被理解与尊重的感受,正向促进。不论来访者的话题如何繁杂,一句"今天更想聊的是什么?"琐定目标。对于个人成长,需持续学习。第5场角色:咨询师来访者为准大学生,线下进行。因为关系建立较好,在愉快地情绪中开始,以B0X练习问句做骨干。结束后反馈:思考了很多以前从未思
数据库水平分表方案
angen2018
mysql 分布式 数据库
数据库分表有很多策略,如下:数据库分表是处理大型数据库中数据量过大的一种常见策略,它可以提高查询性能、减少锁竞争、降低维护成本等。以下是一些常见的数据库分表方案:1.**垂直分表(VerticalPartitioning)**:-将表中的一部分列拆分到新的表中,通常是根据列的使用频率或者数据类型。-适用于查询中只涉及部分列的情况。2.**水平分表(HorizontalPartitioning)**
电商系统-核心架构思路
allin8116
#高并发下单主要包括以下几个方面:分库分表多应用实例全局唯一订单号数据库连接买家查询订单卖家查询订单扩容问题业务拆分一、分库分表随着订单量的增长,数据库的发展主要经历以下几个步骤:1主-1从架构双主-多从架构,读写分离表分区,提高并发分表,提高并发Master更换SSD分库,分表,提高并发###分库分表实现过程订单分成16个库,每个库64个表进行存储,总共1024个表,mysql单表性能超过千万级
公务员考试笔记(三十三)
琐珥
258.鸠占鹊巢:比喻强占别人的住屋或占据别人的位置,侧重于强占别人的资源。259.左顾右盼:形容骄傲得意的神情。260.干预:参与别人的事。261.书不言尽:指信中难以充分表达其意,后多作书信结尾习惯用语。262.邯郸学步:比喻模仿不成,反而失去自己原有的长处。263.呈现:指具体的事物在眼前显现出来。264.体现:指某种性质或现象通过某一事物具体表现出来。265.脍炙人口:比喻好的诗文或事物人
分库分表学习笔记(一)
Murphy.Wang
关系型数据库 数据库
图源(鹅厂技术架构师公众号)MySQL执行顺序:FROM:确定数据来源。JOIN:执行表之间的连接操作。WHERE:过滤记录。GROUPBY:对记录进行分组。HAVING:对分组结果进行过滤。SELECT:选择要返回的列。DISTINCT:去除重复记录(如果有)。ORDERBY:对结果排序。LIMIT:限制返回的记录数量。分表分库的演进系统随着用户量的提升,整个分库分表有以下阶段,随着数据库QPS
2018-02-27
32598db751bb
尚俊平,焦点网络中级,坚持分享682天,2018年2月27日,周二读书打卡第4天《非暴力沟通第10章充分表达愤怒》,134--151页充分表达愤怒的第一步是,我们不再归咎于他人。如果我们认为他让我很生气,那么我们难免就会指责他人,然而实际情况是我们的心情并不取决于他人的行为。如果在一个社会中内疚被运用来控制人,那么指责他人就容易成为一种习惯。同时为了使这种手段奏效,我们可能就会认为一个人可以主导另
关闭mysql权限管理_MySQL系列:用户及权限管理
布酱
关闭mysql权限管理
一、权限介绍1.权限类别:对象界别划分库级别、表级别、字段级别、管理类权限、程序类权限(1)库和表级别的权限:对于具体的库或者表进行授权操作ALTER、CREATE、CREATEVIEW、DROP、INDEX、SHOWVIEWGRANTOPTION:能够把自己获得的权限赠经其他用户一个副本;回收权限困难(2)数据操作:增删查改SELECT、INSERT、DELETE、UPDATE(3)字段级别:授
打造扛得住的MySQL数据库架构视频教程-数据库结构优化 高可用架构设计
cd137a460a79
打造扛得住的MySQL数据库架构视频教程-数据库结构优化高可用架构设计30套数据库系列Mysql/SQLServer/Redis/Mongodb/Nosql精讲训练营项目实战,数据库设计,架构设计,性能管理,集群搭建,查询优化,索引优化,分库分表,高性能可扩展,DML应用,数据迁移,数据库备份,电商项目入门到高级精讲视频教程数据库系列技术包含:Mysql,SQLServer,Redis,Mongo
20180815读书笔记第80/90天
wendy_1560
20180815读书笔记第80/90天脊柱告诉你的健康秘密—肖然身心柔软与平衡的智慧✅肩颈部厚重隆起,常有愤怒情绪,容易患甲亢、高血压。肩颈两边坚硬、强直、板结,要求完美,渴望成就。这样的人易怒,喜欢用指责的方式应对问题。✅甲状腺功能亢进的人,你会发现:他们虽然很容易被激惹,遇到一点点事情都会生气,但始终有一些话不能充分表达出来。有话不讲,甲状腺就容易增生肿大。✅每个愤怒的背后实际都有一个期待:“
橙心橙意社群空间晨读营6/15天,非暴力沟通第10至12章
胡杨青青
橙心橙意社群空间:助力女性活出最成熟的美,孕育滋养宽容涵蓄扶助挚爱价值:陪伴互助能量真我创造内容:晨间阅读育儿分享心灵成长探寻自我让心回家今天是晨读第6天,阅读第10至12章第10章充分表达愤怒分享非暴力沟通第10章充分表达愤怒读书分享不主张忽视或压抑愤怒,深入了解愤怒,助于我们充分表达内心渴望,生气的原因关注点在对方过错上,以及自己提出请求,对方无回应,专注他人感受,需要,愤怒不在愤怒是思维方式
MySQL表分区与分表:概念、规则及应用案例
J老熊
MySQL 实战秘籍 mysql 数据库 性能优化 系统架构 面试
MySQL表分区与分表:概念、规则及应用案例在大型业务系统中,随着数据量的急剧增加,优化数据库性能成为关键任务。MySQL提供了两种有效的数据管理技术来应对这些挑战:表分区(Partitioning)和分表(Sharding)。本文将深入探讨表分区和分表的概念、优缺点、具体规则以及适用场景,并通过电商交易系统的具体示例来说明它们的应用。一、表分区(Partitioning)1.概念表分区是将一个大
【速览】数据库-MySQL(更新中)
GIS程序媛—椰子
数据库 MySQL
目录一、背景二、优缺点三、适用场景四、核心组成基本语法数据库引擎事务索引锁连接池分库分表主从读写分离备份五、底层原理六、对比参考一、背景这个技术出现的背景、初衷和要达到什么样的目标或是要解决什么样的问题。这个问题非常关键,也就是说,你在学习一个技术的时候,需要知道这个技术的成因和目标,也就是这个技术的灵魂。如果不知道这些的话,那么你会看不懂这个技术的一些设计理念。二、优缺点这个技术的优势和劣势分别
数据库表优化实践指南
DebugDiver代码深处潜水员
数据库 数据库 java mysql
数据库表优化实践指南1.基础优化1.1选择合适的数据类型1.2建立合适的索引1.3规范化设计2.中级优化2.1分区表2.2垂直分割2.3水平分割3.高级优化3.1反规范化3.2预计算3.3读写分离3.4分库分表1.基础优化1.1选择合适的数据类型原理:适当的数据类型可以优化存储空间,提高查询和处理效率。不同数据类型占用不同的存储空间,影响索引效率和内存使用。例子:假设有一个用户表(users):C
读《非暴力沟通》之表达感激
格格妮
也许每一次都是有点阴谋论的感觉,在学习这本书的过程中,与人的沟通都是怀有赤诚,怀有坦白之意,在一系列的爱自己、充分表达愤怒、运用强制力避免伤害、重获生活的热情的引导下到今天的表达感激,也许赞扬他人是最纠结的吧,在赞扬他人时,我们很少揭示内心活动,而把自己放在了裁判的位置。所以,我认为,赞扬并不总是有助于深化彼此的联系。用非暴力沟通的方式表达感激时,我们只是为了庆祝他人的行为提升了我们的生活品质,而
Java面试题-分布式
迷茫的21世纪的新轻年
面试题 spring 分布式 java
分布式1.谈谈业务中使用分布式的场景为什么需要使用分布式:单体项目的性能瓶颈问题,需要分布式提升性能。场景1:服务拆分。单体项目将不同服务进行拆分,拆分后的服务可以支持横向扩容,避免因为单台服务器问题影响整体项目。场景2:数据库拆分。数据库读写分离,分库分表等提升性能。2.Session分布式方案项目场景:传统项目:服务器的session保存在本地,每次请求都会在同一个地方,只要session没有
输入2个正整数a和n,求a+aa+aaa+aa...a(n个a)之和。
drt_0506
c语言学习中 算法 数据结构
【问题描述】输入2个正整数a和n,求a+aa+aaa+aa...a(n个a)之和。例如,输入2和3,输出246(2+22+222)。【输入形式】从键盘输入正整数a和正整数n。【输入输出样例1】(下划线部分表示输入)Inputa,n:85s=98760【样例说明】输入提示符后要加一个空格。其中":"后要加一个且只能一个空格。输出语句的"="两边无空格。英文字母区分大小写。必须严格按样例输入输出。#i
深度分析 | 2024年四川大学信息资源管理考研初试成绩数据分析
是希望
川大667信息管理导论 川大972信息检索 信息资源管理 复试 数据分析 667 972 四川大学考研复试 考研成绩
摘要本文深入分析了2024年四川大学信息资源管理考研复试成绩,提供了关于考生成绩分布、各科目成绩表现以及科目成绩与总分之间的相关性的详细见解。分析显示,复试考生的平均总分为380.63分,标准差为12分,反映出成绩分布相对集中且波动适中。特别地,专业课972与总分的相关性最高,达到了0.82,明显影响了考生的总分表现。此外,通过比较高分组和低分组的表现,我们发现专业课成绩是区分高低分考生的关键因素
Sharding sphere分库分表
Kudo新一
java 数据库 开发语言
需要物理自己实现分表分库,然后通过配置文件配置。配置文件:需要配置多个数据源,主从表的关系【默认主表修改,从表读取】,定义分库的策略【比如Userid】和分表【表Id】的策略分库和分表策略:分库策略定义了如何将数据分配到不同的数据库中,例如,可以根据用户ID的范围来进行分库。分表策略定义了如何将数据在表级别进行分片,例如,可以根据表ID来进行分表。过程:从解析sql到路由sql再到改写sql最后到
ASM系列四 利用Method 组件动态注入方法逻辑
lijingyao8206
字节码技术 jvm AOP 动态代理 ASM
这篇继续结合例子来深入了解下Method组件动态变更方法字节码的实现。通过前面一篇,知道ClassVisitor 的visitMethod()方法可以返回一个MethodVisitor的实例。那么我们也基本可以知道,同ClassVisitor改变类成员一样,MethodVIsistor如果需要改变方法成员,注入逻辑,也可以
java编程思想 --内部类
百合不是茶
java 内部类 匿名内部类
内部类;了解外部类 并能与之通信 内部类写出来的代码更加整洁与优雅
1,内部类的创建 内部类是创建在类中的
package com.wj.InsideClass;
/*
* 内部类的创建
*/
public class CreateInsideClass {
public CreateInsideClass(
web.xml报错
crabdave
web.xml
web.xml报错
The content of element type "web-app" must match "(icon?,display-
name?,description?,distributable?,context-param*,filter*,filter-mapping*,listener*,servlet*,s
泛型类的自定义
麦田的设计者
java android 泛型
为什么要定义泛型类,当类中要操作的引用数据类型不确定的时候。
采用泛型类,完成扩展。
例如有一个学生类
Student{
Student(){
System.out.println("I'm a student.....");
}
}
有一个老师类
CSS清除浮动的4中方法
IT独行者
JavaScript UI css
清除浮动这个问题,做前端的应该再熟悉不过了,咱是个新人,所以还是记个笔记,做个积累,努力学习向大神靠近。CSS清除浮动的方法网上一搜,大概有N多种,用过几种,说下个人感受。
1、结尾处加空div标签 clear:both 1 2 3 4
.div
1
{
background
:
#000080
;
border
:
1px
s
Cygwin使用windows的jdk 配置方法
_wy_
jdk windows cygwin
1.[vim /etc/profile]
JAVA_HOME="/cgydrive/d/Java/jdk1.6.0_43" (windows下jdk路径为D:\Java\jdk1.6.0_43)
PATH="$JAVA_HOME/bin:${PATH}"
CLAS
linux下安装maven
无量
maven linux 安装
Linux下安装maven(转) 1.首先到Maven官网
下载安装文件,目前最新版本为3.0.3,下载文件为
apache-maven-3.0.3-bin.tar.gz,下载可以使用wget命令;
2.进入下载文件夹,找到下载的文件,运行如下命令解压
tar -xvf apache-maven-2.2.1-bin.tar.gz
解压后的文件夹
tomcat的https 配置,syslog-ng配置
aichenglong
tomcat http跳转到https syslong-ng配置 syslog配置
1) tomcat配置https,以及http自动跳转到https的配置
1)TOMCAT_HOME目录下生成密钥(keytool是jdk中的命令)
keytool -genkey -alias tomcat -keyalg RSA -keypass changeit -storepass changeit
关于领号活动总结
alafqq
活动
关于某彩票活动的总结
具体需求,每个用户进活动页面,领取一个号码,1000中的一个;
活动要求
1,随机性,一定要有随机性;
2,最少中奖概率,如果注数为3200注,则最多中4注
3,效率问题,(不能每个人来都产生一个随机数,这样效率不高);
4,支持断电(仍然从下一个开始),重启服务;(存数据库有点大材小用,因此不能存放在数据库)
解决方案
1,事先产生随机数1000个,并打
java数据结构 冒泡排序的遍历与排序
百合不是茶
java
java的冒泡排序是一种简单的排序规则
冒泡排序的原理:
比较两个相邻的数,首先将最大的排在第一个,第二次比较第二个 ,此后一样;
针对所有的元素重复以上的步骤,除了最后一个
例题;将int array[]
JS检查输入框输入的是否是数字的一种校验方法
bijian1013
js
如下是JS检查输入框输入的是否是数字的一种校验方法:
<form method=post target="_blank">
数字:<input type="text" name=num onkeypress="checkNum(this.form)"><br>
</form>
Test注解的两个属性:expected和timeout
bijian1013
java JUnit expected timeout
JUnit4:Test文档中的解释:
The Test annotation supports two optional parameters.
The first, expected, declares that a test method should throw an exception.
If it doesn't throw an exception or if it
[Gson二]继承关系的POJO的反序列化
bit1129
POJO
父类
package inheritance.test2;
import java.util.Map;
public class Model {
private String field1;
private String field2;
private Map<String, String> infoMap
【Spark八十四】Spark零碎知识点记录
bit1129
spark
1. ShuffleMapTask的shuffle数据在什么地方记录到MapOutputTracker中的
ShuffleMapTask的runTask方法负责写数据到shuffle map文件中。当任务执行完成成功,DAGScheduler会收到通知,在DAGScheduler的handleTaskCompletion方法中完成记录到MapOutputTracker中
WAS各种脚本作用大全
ronin47
WAS 脚本
http://www.ibm.com/developerworks/cn/websphere/library/samples/SampleScripts.html
无意中,在WAS官网上发现的各种脚本作用,感觉很有作用,先与各位分享一下
获取下载
这些示例 jacl 和 Jython 脚本可用于在 WebSphere Application Server 的不同版本中自
java-12.求 1+2+3+..n不能使用乘除法、 for 、 while 、 if 、 else 、 switch 、 case 等关键字以及条件判断语句
bylijinnan
switch
借鉴网上的思路,用java实现:
public class NoIfWhile {
/**
* @param args
*
* find x=1+2+3+....n
*/
public static void main(String[] args) {
int n=10;
int re=find(n);
System.o
Netty源码学习-ObjectEncoder和ObjectDecoder
bylijinnan
java netty
Netty中传递对象的思路很直观:
Netty中数据的传递是基于ChannelBuffer(也就是byte[]);
那把对象序列化为字节流,就可以在Netty中传递对象了
相应的从ChannelBuffer恢复对象,就是反序列化的过程
Netty已经封装好ObjectEncoder和ObjectDecoder
先看ObjectEncoder
ObjectEncoder是往外发送
spring 定时任务中cronExpression表达式含义
chicony
cronExpression
一个cron表达式有6个必选的元素和一个可选的元素,各个元素之间是以空格分隔的,从左至右,这些元素的含义如下表所示:
代表含义 是否必须 允许的取值范围 &nb
Nutz配置Jndi
ctrain
JNDI
1、使用JNDI获取指定资源:
var ioc = {
dao : {
type :"org.nutz.dao.impl.NutDao",
args : [ {jndi :"jdbc/dataSource"} ]
}
}
以上方法,仅需要在容器中配置好数据源,注入到NutDao即可.
解决 /bin/sh^M: bad interpreter: No such file or directory
daizj
shell
在Linux中执行.sh脚本,异常/bin/sh^M: bad interpreter: No such file or directory。
分析:这是不同系统编码格式引起的:在windows系统中编辑的.sh文件可能有不可见字符,所以在Linux系统下执行会报以上异常信息。
解决:
1)在windows下转换:
利用一些编辑器如UltraEdit或EditPlus等工具
[转]for 循环为何可恨?
dcj3sjt126com
程序员 读书
Java的闭包(Closure)特征最近成为了一个热门话题。 一些精英正在起草一份议案,要在Java将来的版本中加入闭包特征。 然而,提议中的闭包语法以及语言上的这种扩充受到了众多Java程序员的猛烈抨击。
不久前,出版过数十本编程书籍的大作家Elliotte Rusty Harold发表了对Java中闭包的价值的质疑。 尤其是他问道“for 循环为何可恨?”[http://ju
Android实用小技巧
dcj3sjt126com
android
1、去掉所有Activity界面的标题栏
修改AndroidManifest.xml 在application 标签中添加android:theme="@android:style/Theme.NoTitleBar"
2、去掉所有Activity界面的TitleBar 和StatusBar
修改AndroidManifes
Oracle 复习笔记之序列
eksliang
Oracle 序列 sequence Oracle sequence
转载请出自出处:http://eksliang.iteye.com/blog/2098859
1.序列的作用
序列是用于生成唯一、连续序号的对象
一般用序列来充当数据库表的主键值
2.创建序列语法如下:
create sequence s_emp
start with 1 --开始值
increment by 1 --増长值
maxval
有“品”的程序员
gongmeitao
工作
完美程序员的10种品质
完美程序员的每种品质都有一个范围,这个范围取决于具体的问题和背景。没有能解决所有问题的
完美程序员(至少在我们这个星球上),并且对于特定问题,完美程序员应该具有以下品质:
1. 才智非凡- 能够理解问题、能够用清晰可读的代码翻译并表达想法、善于分析并且逻辑思维能力强
(范围:用简单方式解决复杂问题)
使用KeleyiSQLHelper类进行分页查询
hvt
sql .net C# asp.net hovertree
本文适用于sql server单主键表或者视图进行分页查询,支持多字段排序。KeleyiSQLHelper类的最新代码请到http://hovertree.codeplex.com/SourceControl/latest下载整个解决方案源代码查看。或者直接在线查看类的代码:http://hovertree.codeplex.com/SourceControl/latest#HoverTree.D
SVG 教程 (三)圆形,椭圆,直线
天梯梦
svg
SVG <circle> SVG 圆形 - <circle>
<circle> 标签可用来创建一个圆:
下面是SVG代码:
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<circle cx="100" c
链表栈
luyulong
java 数据结构
public class Node {
private Object object;
private Node next;
public Node() {
this.next = null;
this.object = null;
}
public Object getObject() {
return object;
}
public
基础数据结构和算法十:2-3 search tree
sunwinner
Algorithm 2-3 search tree
Binary search tree works well for a wide variety of applications, but they have poor worst-case performance. Now we introduce a type of binary search tree where costs are guaranteed to be loga
spring配置定时任务
stunizhengjia
spring timer
最近因工作的需要,用到了spring的定时任务的功能,觉得spring还是很智能化的,只需要配置一下配置文件就可以了,在此记录一下,以便以后用到:
//------------------------定时任务调用的方法------------------------------
/**
* 存储过程定时器
*/
publi
ITeye 8月技术图书有奖试读获奖名单公布
ITeye管理员
活动
ITeye携手博文视点举办的8月技术图书有奖试读活动已圆满结束,非常感谢广大用户对本次活动的关注与参与。
8月试读活动回顾:
http://webmaster.iteye.com/blog/2102830
本次技术图书试读活动的优秀奖获奖名单及相应作品如下(优秀文章有很多,但名额有限,没获奖并不代表不优秀):
《跨终端Web》
gleams:http