日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/7/23 编程问答 80 豆豆
生活随笔 收集整理的這篇文章主要介紹了 apache httpclient 工具类_HttpClient 和Mycat 主从节点和读写分离 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第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請求?

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語言編寫的數據庫中間件 可以與多個數據庫進行通信

核心時分庫分表 ,配合數據庫的主從模式還可以實現讀寫分離

(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的默認端口是多少?

6. MyCat的使用-讀寫分離介紹

(1) 讀寫分離的原理是什么?

使用不同的數據庫引擎,實現讀和寫的分離操作,提供所有的操作效率

一個讀一個寫 ,我們只需要他們的數據一致就可以

(2) 什么是主從備份?

就是一種主備模式的數據庫應用

主庫(master)數據和備庫(slave)數據完全一致

實現數據的多重備份,保證數據的安全(讀寫分離的基礎)

(3) 主從備份模式是如何實現數據同步的?

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;

查看用戶

查看master信息(show master status)

關閉防護墻或防火墻中開發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屬性的作用是什么?

數據庫密碼

分享/講解/擴展思考

點名提問從第一節課到最后一節課分別學到了什么,直到同學們把所有的知識點都說出來并且保證無誤。

總結

以上是生活随笔為你收集整理的apache httpclient 工具类_HttpClient 和Mycat 主从节点和读写分离的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。