apache httpclient 工具类_HttpClient 和Mycat 主从节点和读写分离

1e4402829d557fc86506480674c22dd8.png

第175次(HttpClient)

学习主题:HttpClient

学习目标:

1 掌握HttpClient自定义工具以及HttpClient具体的使用

对应视频:

http://www.itbaizhan.cn/course/id/85.html

对应文档:

对应作业

1. HttpClient自定义工具类的使用

(1) 如何编写一个HttpClient工具类?

HttpClient工具类

public class HttpClientUtil {

public static String doGet(String url, Map<String, String> param) {

// 创建Httpclient对象

CloseableHttpClient httpclient = HttpClients.createDefault();

String resultString = "";

CloseableHttpResponse response = null;

try {

// 创建uri

URIBuilder builder = new URIBuilder(url);

if (param != null) {

for (String key : param.keySet()) {

builder.addParameter(key, param.get(key));

}

}

URI uri = builder.build();

// 创建http GET请求

HttpGet httpGet = new HttpGet(uri);

// 执行请求

response = httpclient.execute(httpGet);

// 判断返回状态是否为200

if (response.getStatusLine().getStatusCode() == 200) {

resultString = EntityUtils.toString(response.getEntity(), "UTF-8");

}

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

if (response != null) {

response.close();

}

httpclient.close();

} catch (IOException e) {

e.printStackTrace();

}

}

return resultString;

}

public static String doGet(String url) {

return doGet(url, null);

}

public static String doPost(String url, Map<String, String> param) {

// 创建Httpclient对象

CloseableHttpClient httpClient = HttpClients.createDefault();

CloseableHttpResponse response = null;

String resultString = "";

try {

// 创建Http Post请求

HttpPost httpPost = new HttpPost(url);

// 创建参数列表

if (param != null) {

List<NameValuePair> paramList = new ArrayList<>();

for (String key : param.keySet()) {

paramList.add(new BasicNameValuePair(key, param.get(key)));

}

// 模拟表单

UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList,"utf-8");

httpPost.setEntity(entity);

}

// 执行http请求

response = httpClient.execute(httpPost);

resultString = EntityUtils.toString(response.getEntity(), "utf-8");

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

response.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

return resultString;

}

public static String doPost(String url) {

return doPost(url, null);

}

public static String doPostJson(String url, String json) {

// 创建Httpclient对象

CloseableHttpClient httpClient = HttpClients.createDefault();

CloseableHttpResponse response = null;

String resultString = "";

try {

// 创建Http Post请求

HttpPost httpPost = new HttpPost(url);

// 创建请求内容

StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);

httpPost.setEntity(entity);

// 执行http请求

response = httpClient.execute(httpPost);

resultString = EntityUtils.toString(response.getEntity(), "utf-8");

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

response.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

return resultString;

}

}

(2) 如何通过HttpClient工具类发送Get、Post请求?

656099c3ff072436144c9e56cbf7d21e.png

2. 实战案例(对应视频194-198)

(1) 设计一个SOA模式架构的项目,通过HttpClient完成服务调用。实现对用户表的CRUD操作。(打包源码)

分享/讲解/扩展思考

点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。

第176次(MyCat)

学习主题:MyCat

学习目标:

1 掌握什么是MyCat

2 掌握MyCat分库分表

3 掌握MyCat主从备份,读写分离

对应视频:

http://www.itbaizhan.cn/course/id/85.html

对应文档:

对应作业

3. MyCat简介

(1) 什么是MyCat?

前身时Cobar

基于java语言编写的数据库中间件 可以与多个数据库进行通信

核心时分库分表 ,配合数据库的主从模式还可以实现读写分离

6e93ef7f2c309aa7e1dd4c0dfe6f6030.png

(2) MyCat有哪些优势?

1. 数据量级

单一的Mysql其数据存储量级和操作量级有限

Mycat可以管理若干Mysql数据库,同时实现数据的存储和操作

2. 开源

Mycat时java编写的中间件,开源免费

3.市场应用占比高

4. MyCat中的概念

5.

(1) 什么是切分?

逻辑上的切分,在物理层面,是使用多库[database],多表[table]实现的切分

(2) 什么是纵向切分

就是把原本存储于一个库的数据存储到多个库上。

由于对数据库的读写都是对同一个库进行操作,所以单库并不能解决大规模并发写入的

问题。

例如,我们会建立定义数据库 workDB、商品数据库 payDB、用户数据库 userDB、日志

数据库 logDB 等,分别用于存储项目数据定义表、商品定义表、用户数据表、日志数据表等。

优点

减少增量数据写入时的锁对查询的影响

由于单表数量下降,常见的查询操作由于减少了需要扫描的记录,使得单表单次查询所需的检索行数变少,减少了磁盘io,时延变短

缺点:

无法解决单表数据量太大的问题

(3) 什么是横向切分

把原本存储于一个表的数据分块存储到多个表上,当一个表中的数据量过大时,我们可以把该表的数据按照某种规则,进行划分,然后存储到多个结构相同的表,和不同的库上

例如,我们 userDB 中的 userTable 中数据量很大,那么可以把 userDB 切分为结构相同

的多个 userDB:part0DB、part1DB 等,再将 userDB 上的 userTable,切分为很多 userTable:

userTable0、userTable1 等,然后将这些表按照一定的规则存储到多个 userDB 上。

优点:

单表的并发能力提高了,磁盘i/o性能也提高了

如果出现高并发的话,总表可以根据不同的查询,将并发压力分到不同的小表在里面.

缺点:无法实现表连接查询

(4) 什么是逻辑库-Schema

Mycat中定义的database,是逻辑上存在的,但物理上是不存在的

主要针对纵向切分提供的概念

(5) 什么是逻辑表-table

Mycat中定义的table,是逻辑上存在,物理上是不存在的

主要针对横向切分提供的概念

(6) 什么是数据主机 – dataHost

物理mysql存放的主机地址(集群 ) 可以使用主机名,IP,域名定义

(7) 什么是数据节点 – dataNode

配置物理的database(数据库),数据保存的物理节点就是dataNode (数据库)

(8) 什么是分片规则

当控制数据的时候,如何访问物理的database和table

就是访问dataHost和dataNode的算法

在Mycat处理具体的数据CRUD的时候,如何访问dataHost和dataNode的算法,如

哈希算法,crc32算法等

(9) MyCat的默认端口是多少?

1e60a9856a3f60374883b5e84bd6efaa.png

6. MyCat的使用-读写分离介绍

(1) 读写分离的原理是什么?

使用不同的数据库引擎,实现读和写的分离操作,提供所有的操作效率

一个读一个写 ,我们只需要他们的数据一致就可以

(2) 什么是主从备份?

就是一种主备模式的数据库应用

主库(master)数据和备库(slave)数据完全一致

实现数据的多重备份,保证数据的安全(读写分离的基础)

(3) 主从备份模式是如何实现数据同步的?

008cad9f30134579ac722e6cede620fa.png

7. MyCat的使用-创建MySQL的主从模式

(1) 如何在Linux中创建MySQL的主从备份模式?

Master(主库配置)

路径:/etc/my.cnf

命令:vim /etc/my.cnf

配置server_id=1 (mysql服务的唯一标识,自己写)

配置要求:

Server_id 任意配置,只要是数字即可

Server_id Master唯一标识数字必须小于Slave唯一标识数字

配置log_bin

本环境中log_bin值:master_log

开启日志功能以及日志文件命名.log_bin=master_log

变量的值就是日志文件名称,是日志文件名称的主体(就是主数据库中的Binary log如上图)

Mysql数据库自动增加文件名后缀和文件类型

重启mysql

访问mysql

Mysql -uusername -ppassword

创建用户和授权

Mysql数据库中,为不存在的用户授权,会默认创建此用户

此用户是从库访问主库使用的用户

Ip地址不能写%,因为主从备份中,当前创建的用户,是给从库Slave访问主库Master使用的,用户必须有指定的访问地址,不能是通用地址

Grant(授予) all privileges(特权) on *.* to ‘username’@’ip’identified(鉴定) by ‘password’ with grant option;

刷新

Flush privileges;

查看用户

83ab4fbf410ccb1835d264f8ae64a612.png

查看master信息(show master status)

2763bbf21299bfcf49dfcbe0a7d3e29f.png

关闭防护墙或防火墙中开发3306端口

8. MyCat的使用-安装MyCat

(1) 如何安装MyCat?

解压 至/usr/local

9. MyCat的使用-server.xml

(1) <user>节点的作用是什么?

用户配置节点

(2) <user>节点中name属性的作用是什么?

登录的用户名,也就是链接Mycat的用户名

(3) <user>节点中password属性的作用是什么?

登录的密码,也就是链接Mycat的密码

(4) <user>节点中schemas属性的作用是什么?

逻辑库名,这里会和 schema.xml 中的配置关联,多个用逗

号分开,例如需要这个用户管理两个数据库 db1,db2,则配置

db1,db2

(5) <user>节点中privileges属性的作用是什么?

配置用户针对表的增删改查的权限

(6) 在配置privileges时dml权限顺序是什么顺序?用什么表示权限的开启与禁止?

dml 权限顺序为:insert(新增),update(修改),select(查询),delete(删除),0000--> 1111,0 为

禁止权限,1 为开启权限。

10. MyCat的使用-schema.xml

(1) <schema>节点的作用是什么?

配置逻辑库的标签

(2) <schema>中name属性的作用是什么?

逻辑库名称

(3) <schema>中checkSQLschema属性的作用是什么?

是否检测SQL语法中的schema信息

(4) <schema>中sqlMaxLimit属性的作用是什么?

Mycat在执行SQL的时候,如果SQl语句中没有limit子句,自动增加limit子句,避免一次性得到过多的数据,影响效率,limit子句的限制数量默认配置为100,如果SQL中有具体的limit子句,该属性无效

(5) <table>节点的作用是什么?

定义逻辑表的标签

(6) <table>中name属性的作用是什么?

逻辑表名

(7) <table>中dataNode属性的作用是什么?

定义数据节点的标签,即物理数据库中的database名称,多个名称使用逗号分隔

(8) <table>中rule属性的作用是什么?

分片规则名称,具体的规则名称参考rule.xml配置文件

(9) <dataNode>节点的作用是什么?

定义数据节点的标签

(10) <dataNode>中name属性的作用是什么?

数据节点名称,是定义的逻辑名称从,对应具体的物理数据库database

(11) <dataNode>中dataHost属性的作用是什么?

引用dataHost标签的name值,代表使用的物理数据库所在位置和配置信息

(12) <dataNode>中database属性的作用是什么?

具体的物理数据库database名称

(13) <dataHost>节点的作用是什么?

定义数据主机的名称

(14) <dataHost>中name属性的作用是什么?

定义逻辑上的数据主机名称

(15) <dataHost>中maxCon/minCon属性的作用是什么?

最大连接数:max connections

最小链接数:min connections

(16) <dataHost>中dbType属性的作用是什么?

Mysql数据库

(17) <dataHost>中dbDriver属性的作用是什么?

数据库驱动类型 native 使用mycat提供的本地驱动

(18) <writeHost>节点的作用是什么?

写数据的数据库定义标签,实现读写分离操作

(19) <writeHost>中host属性的作用是什么?

数据库命名

(20) <writeHost>中url属性的作用是什么?

数据库访问路径

(21) <writeHost>中user属性的作用是什么?

数据库访问用户名

(22) <writeHost>中password属性的作用是什么?

访问用户密码

(23) <readHost>节点的作用是什么?

数据库配置

(24) <readHost>中host属性的作用是什么?

数据库命名

(25) <readHost>中url属性的作用是什么?

数据库访问路径

(26) <readHost>中password属性的作用是什么?

数据库密码

分享/讲解/扩展思考

点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/506216.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

datalist可以放div吗?_混凝土中能放竹子吗?可以代替钢筋吗?为何打地坪混凝土放竹子?...

大家好&#xff0c;我是专注家居和装修知识分享的家居杂坛。喜欢的就点击一下关注吧&#xff01;对于在地面上所浇筑的混凝土&#xff0c;常规有两种做法。例如&#xff0c;在混凝土中铺设钢筋&#xff0c;打成钢筋混凝土的地面&#xff0c;又或者还有一些朋友在钢混凝土中放入…

snmp协议_软件评测师写作专栏之OSI七层模型及其常见的协议11

各位学员大家好&#xff0c;大家在学习计算机网络的时候&#xff0c;OSI七层模型及其常见的协议是必考的内容。为了让大家快速掌握这方面的知识点&#xff0c;接下来就带领大家一起来学习一下&#xff01;例题&#xff1a;下面的协议中属于应用层协议的是( 1 )&#xff0c;该协…

linux部署tomcat项目404_一个tomcat下部署多个项目或一个服务器部署多个tomcat

点击上方[全栈开发者社区]→右上角[...]→[设为星标⭐]♪ 点击上方绿标 收听一个tomcat下部署多个项目或一个服务器部署多个tomcat最近需要把两个项目同时部署到服务器上&#xff0c;于是研究了一下&#xff0c;页借鉴了很多别人的方法&#xff0c;把过程记录下来&#xff0c;以…

科学计数法_第一章 科学计数法与近似数

生活中&#xff0c;我们常常遇到一些较大的数&#xff0c;如10000000、3450000000等.利用科学计数法表示某些较大的数可以免去一些不必要的麻烦&#xff0c;尤其是遇到一些乘法运算时&#xff0c;如20000000245000000.科学记数法表示数时&#xff0c;不改变数的符号&#xff0c…

# 傅立叶变换 画曲线_让你永远忘不了的傅立叶变换解析

使用联想链条和几何直观&#xff0c;辅以从实际需求衍生概念的思考模式&#xff0c;详解什么是傅立叶变换&#xff0c;为什么要做傅立叶变换等&#xff0c;帮助记忆和理解&#xff0c;目的当然是标题所说&#xff1a;让你永远忘不了傅立叶变换这个公式。另&#xff0c;这篇博客…

找不到天隆虚拟机_玩转虚拟机,教你如何装系统

最近小白系统收到很多小伙伴的私信想要知道虚拟机如何安装系统&#xff0c;那么今天小白系统整理了下虚拟机安装系统的教程&#xff0c;下面一起看下吧。虚拟机安装系统适合什么人群呢&#xff1f;1、如果你新买的电脑不支持安装Win7系统&#xff0c;那么装个虚拟机吧&#xff…

从数据类型 nvarchar 转换为 numeric 时出错_JS入门篇(三):javascript的数据类型详解...

JavaScript的数据类型分为两大类&#xff0c;基本数据类型和复杂数据类型。基本数据类型&#xff1a;Undefined、Null、Boolean、Number、String。复杂数据类型&#xff1a;Object。(1)Undefined类型Undefined 类型只有一个值&#xff0c;即特殊的 undefined。在使用 var 声明变…

为啥我的页面模板的from提交不了数据_4-9【微信小程序全栈开发课程】意见反馈(四)--提交反馈信息

1、创建后端操作文件先在后端server/controllers文件夹中创建操作文件createopinion.js&#xff0c;用来将从前端页面提交的数据&#xff0c;插入到opinions表中&#xff0c;创建完之后&#xff0c;页面目录如下2、添加路由在路由管理文件server/routes/index.js文件中添加路由…

rac一节点时间比另一个节点快_数据库数据那么多为什么可以检索这么快?

你好&#xff0c;是我琉忆。经常跟数据打交道的你&#xff0c;有没有去考虑过数据上百万&#xff0c;为什么它可以检索那么快&#xff1f;一说到数据库的检索速度这么快&#xff0c;我想你一定想到了索引。没错&#xff0c;今天我们来简单聊聊索引&#xff0c;聊聊索引是什么&a…

唯有自己变得强大_真正的自立,唯是让自己变得更加强大

更大的成功&#xff0c;不是看我们用双腿走了多少路&#xff0c;而是要看我们总共行了多少路。一只萤火虫&#xff0c;靠自身的力量发出了光芒。夜晚&#xff0c;它仰头望天&#xff0c;对着月亮说&#xff1a;“我是靠自己而发光的&#xff0c;而你却是借助太阳的光芒。虽然你…

mysql必知必会_MySQL必知必会

MySQL必知必会联结的使用, 子查询, 正则表达式和基于全文本的搜索, 存储过程, 游标, 触发器, 表约束.了解SQL数据库基础电子邮件地址薄里查找名字时, 因特网搜索站点上进行搜索, 验证名字和密码, 都会用到数据库.数据库是一个以某种有组织的方式存储的数据集合.把数据库想象成一…

vm虚拟机安装_虚拟机 --- 安装VM(一)

虚拟机&#xff08;英语&#xff1a;virtual machine&#xff09;&#xff0c;在计算机科学中的体系结构里&#xff0c;是指一种特殊的软件&#xff0c;可以在计算机平台和终端用户之间创建一种环境&#xff0c;而终端用户则是基于这个软件所创建的环境来操作软件。虚拟机最初由…

cnetos7 mysql5.6 utf8设置_CentOS7下安装MySQL 5.6修改字符集为utf8并开放端口允许远程访问...

前言mysql最初的免费战略已经深入人心&#xff0c;感觉自己一直都在用mysql。今天在CentOS7下装mysql。发现原来centos下默认没有mysql&#xff0c;因为开始收费了&#xff0c;取而代之的是另一个mysql的分支mariadb&#xff0c;这个是mysql创始人重新主导的分支。But, whateve…

preparedstatement打印sql语句_Mybatis是这样防止sql注入的

链接&#xff1a;https://juejin.im/post/5e131203e51d4541082c7db3Mybatis这个框架在日常开发中用的很多&#xff0c;比如面试中经常有一个问题&#xff1a;$和#的区别&#xff0c;它们的区别是使用#可以防止SQL注入&#xff0c;今天就来看一下它是如何实现SQL注入的。什么是S…

mysql 虚拟列索引_使用MySQL 5.7虚拟列提高查询效率

原标题&#xff1a;使用MySQL 5.7虚拟列提高查询效率导读翻译团队&#xff1a;星耀队知数堂团队成员&#xff1a;星耀队-芬达&#xff0c;星耀队-顺子&#xff0c;星耀队-M哥原文出处&#xff1a;https://www.percona.com/blog/2018/01/29/using-generated-columns-in-mysql-5-…

python selenium span内容读取_【程仁智推荐】Selenium自动化测试入门

LupuX 2017-06-18 14:24:28 11853 收藏 41分类专栏&#xff1a; Auto Test 文章标签&#xff1a; 自动化测试 selenium web测试 UI自动化版权一、什么是SeleniumSelenium 是一个浏览器自动化测试框架&#xff0c;它主要用于web应用程序的自动化测试&#xff0c;其主要特点如下…

c++ 操作mysql_C++操作mysql方法总结(1)

C通过mysql的c api和通过mysql的Connector C 1.1.3操作mysql的两种方式使用vs2013和64位的msql 5.6.16进行操作项目中使用的数据库名为booktik表为book……….(共有30条记录&#xff0c;只列出了部分记录&#xff0c;14-30未列出)一、通过mysql的C api进行操作1、新建一个空项目…

mysql进阶知识_Mysql面试知识点总结(进阶篇)

上一篇主要介绍一些基础的mysql知识点&#xff0c;这一篇我们介绍一下mysql比较重要但在开发中我们程序员很少知道的几个大点(自以为是的观点)。数据库设计三范式&#xff1a;第一范式&#xff1a;数据库表的每一列都是不可分割的原子数据项&#xff0c;即列不可拆分。第二范式…

java实现报表_修改带 JAVA 自定义类的报表还要重启应用,咋解决?

这是 JAVA 编译型语言特性决定的&#xff0c;修改 JAVA 程序重启应用也正常。只不过改报表就要重启整个应用就有点夸张了&#xff0c;报表变动比较频繁&#xff0c;每次都重启应用会影响业务的。这个问题的根本原因是耦合性问题&#xff0c;报表里一旦涉及到 JAVA 代码就要跟主…

idea 用iterm 终端_iTerm2 都不会用,还敢自称老司机?(上)

对于需要长期与终端打交道的工程师来说&#xff0c;拥有一款称手的终端管理器是很有必要的&#xff0c;对于 Windows 用户来说&#xff0c;最好的选择是 Xshell&#xff0c;这个大家都没有异议。但对于 MacOS 用户来说&#xff0c;仍然毋庸置疑&#xff0c;iTerm2 就是你要的利…