发表于: 2020-07-30 22:50:02
1 1503
今天完成的事情:
Dubbo提供了哪几种注册中心的方式?Redis和Zookeeper应该用哪一种?
Dubbo提供了以下几种注册中心方式:Multicast,Zookeeper,Redis,Simple,以及Consul 、Nacos,Eureka等。
对于注册中心的选择主要参考以下条件:数据模型,数据一致性,负载均衡,健康检查,易用性,性能与容量。
当前主流注册中心的比较:
CAP指的是CAP原则,即C(Consistency)一致性,A(Availability)可用性,P(Partition tolerance)分区容错性。
对于Redis和Zookeeper应该用哪一种,要根据实际需求来选择,
Redis优点有:支持集群,性能高;缺点有:要求服务器时间同步,否则可能出现集群失败问题。
Zookeeper优点有:支持分布式,和很多周边产品;缺点有:受限于Zookeeper的稳定性。
任务总结:
任务一:
1.开发环境的搭建:JDK,Maven,Mysql,Navicat,Idea等软件的下载安装以及环境变量的配置。
2.设计DB表,分别用Mysql和Navicat操作数据库,数据库的备份与恢复,创建索引。
根据业务分析来设计DB,每个DB表对应一个实体类。
索引:帮助Mysql高效获取数据的排好序的数据结构。
mysql使用的是B+Tree结构。要了解B+tree,得先了解二叉树结构。
二叉树(二叉查找树):左子树的键值小于根的键值,右子树的键值大于等于键值。
例如:
这样如果要查询5的话只需要查找3次。
但是如果存入的数据是类似id一样一直增加的话,就会出现:
这样二叉树就不平衡了,现在如果要查找5,则需要查找5次,查询速度非常低。
红黑树(平衡二叉查找树):
性质1:每个节点要么是黑色,要么是红色。
性质2:根节点是黑色。
性质3:每个叶子节点是黑色,且为null。
性质4:每个红色结点的两个子结点一定都是黑色。
性质5:任意一结点到每个叶子结点的路径都包含数量相同的黑结点。
根节点:树最顶端的节点。
子节点:除根节点之外,并且本身下面还连接有节点的节点。
叶子节点:不断细分直到不再有子节点的节点。
即:
红黑树是可以自平衡的,即使插入的数据一直增加也能通过左旋,右旋,变色等操作来保持平衡。
但是随着数据量的增大,红黑树的高度也会越来越大,查找次数会不断增多。
对红黑树进行改造,减少数的深度之后就得到了
B-Tree:
节点中的数据索引从左至右递增排列。
所有索引元素不重复。
每个叶节点具有相同的深度,即树的高度。
相比于二叉树,B-Tree每个内结点有多个分支,即多叉。
mysql索引所使用的B+Tree就是在B-Tree的基础上做了一些变种:
B+Tree:
非叶子节点不再储存data,只储存索引(冗余),来节省空间可以放更多的索引。
叶子节点包含索引字段。
叶子节点用指针连接,提高区间访问性能。
B+Tree把所有的索引元素在叶子节点储存了一份完整的元素,然后把处于中间的元素提到子节点来作为冗余存放,由于只储存了索引,所以可以储存更多的索引。
索引的元素开始是存在磁盘里的,当我们找到某个节点时它才会被加载到内存中。而B+Tree就是将所有子节点的冗余先加载到内存中。
即:
B-Tree:
B+Tree:
MylSAM存储引擎索引实现:
索引文件和数据文件时分离的(非聚集索引)
InnoDB存储引擎索引实现:
表结构文件本身就是按B+Tree组织的一个索引结构文件。
叶节点保存了完整的数据记录。索引和数据文件储存在一起。(聚集索引)
组合索引的最左前缀法则,必须要有最左边的字段才能使用组合索引。
3.编写DAO,使用JdbcTemplate,Mybatis,Spring对数据库增删改查。
JdbcTemplate是spring对jdbc的封装,需要我们手动传入sql语句,然后使用其中的执行方法即可。
execute:可以执行所有方法。
update:用于执行增,删,改方法。
queryXXX:用于查询。
执行步骤:
1.加载数据库的驱动
2.通过JCBC建立数据库连接
3.访问数据库,执行sql语句
4.断开数据库连接,释放资源
和jdbc不同的是第三步,jdbc是使用PreparedStatement来操作数据库的;而jdbcTemplate则是直接调用update,query等方法。
Mybatis:Mybatis避免了jdbc使用原生sql语句,只需要配置xml文件和pojo实体类和接口中的方法映射即可实现对数据库的增删改查。
Spring:IOC(控制反转),将创建bean对象的权力交给spring容器,由spring来帮我们创建所有的bean对象,在我们需要的时候直接去容器中取即可。
依赖注入:set方法注入,构造函数注入,注解注入。
4.junit单元测试,Debug调试,log4j日志。
5.使用git将项目上传服务器。服务器相关操作指令。
明天计划完成的事情:加快进度,完成任务总结,完成复盘ppt
评论