應對sharding-jdbc結合mybatis實現分庫分表功能 分表的聯合查詢採用將mysql的資料同步到elasticsearch進行篩選
應對sharding-jdbc結合mybatis實現分庫分表功能 分表的聯合查詢採用將mysql的資料同步到elasticsearch進行篩選
其中windows目錄展示如下:
版本控制:1. 需要jdk:1.8(1.8.0_60)
2.ElasticSearch(5.6.3)
3.建議logstash版本與ElasticSearch版本號對應一致(5.6.3)
4.ruby-2.4.4-2-x64
說明:
ElasticSearch配置head外掛:
1.head在es2.X及以前是作為es的一個外掛存在的,可以直接通過plugin命令安裝,5.x及以後需要作為一個單獨的服務執行,基於nodejs環境及grunt啟動服務
2.logstash + Logstash-input-jdbc來同步資料,logstash-input-jdbc外掛是logstash 的一個個外掛,使用ruby語言開發。所以要先安裝ruby,也是為了好使用ruby中的gem安裝外掛,下載地址: https://rubyinstaller.org/downloads/
核心:同步方式
1、資料同步方式
全量同步與增量同步
全量同步是指全部將資料同步到es,通常是剛建立es,第一次同步時使用。增量同步是指將後續的更新、插入記錄同步到es。
2. logstash-input-jdbc使用
官方文件地址
logstash目錄下配置檔案的結構:
全量同步配置檔案:jdbc.conf + jdbc.sql + mysql-connector-java-5.1.9
增量同步配置檔案:jdbc_add.conf + jdbc_add.sql + mysql-connector-java-5.1.9 + station_parameter.txt
jdbc..conf:
input { stdin { } jdbc { # mysql 資料庫連結,test為資料庫名 jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/test" # 使用者名稱和密碼 jdbc_user => "root" jdbc_password => "root" # 驅動 jdbc_driver_library => "G:\Developer\Elasticsearch5.5.1\ES5\logstash-5.5.1\bin\mysql\mysql-connector-java-5.1.9.jar" # 驅動類名 jdbc_driver_class => "com.mysql.jdbc.Driver" jdbc_paging_enabled => "true" jdbc_page_size => "50000" # 執行的sql 檔案路徑+名稱 statement_filepath => "G:\Developer\Elasticsearch5.5.1\ES5\logstash-5.5.1\bin\mysql\jdbc.sql" # 設定監聽間隔 各欄位含義(由左至右)分、時、天、月、年,全部為*預設含義為每分鐘都更新 schedule => "* * * * *" # 索引型別 type => "jdbc" } } filter { json { source => "message" remove_field => ["message"] } } output { elasticsearch { # ES的IP地址及埠 hosts => ["localhost:9200"] # 索引名稱 index => "article" # 自增ID 需要關聯的資料庫中有有一個id欄位,對應索引的id號 document_id => "%{id}" } stdout { # JSON格式輸出 codec => json_lines } }
jdbc.sql:
select * from t_student_01
增量同步jdbc_add.sql:
input {
stdin {
}
jdbc {
# mysql 資料庫連結,test為資料庫名
jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/test"
# 使用者名稱和密碼
jdbc_user => "root"
jdbc_password => "root"
# 驅動
jdbc_driver_library => "G:\Developer\Elasticsearch5.5.1\ES5\logstash-5.5.1\bin\mysql\mysql-connector-java-5.1.9.jar"
# 驅動類名
jdbc_driver_class => "com.mysql.jdbc.Driver"
#處理中文亂碼問題
codec => plain { charset => "UTF-8"}
#使用其它欄位追蹤,而不是用時間
use_column_value => true
#追蹤的欄位
tracking_column => id
record_last_run => true
#上一個sql_last_value值的存放檔案路徑, 必須要在檔案中指定欄位的初始值
last_run_metadata_path => "G:\Developer\Elasticsearch5.5.1\ES5\logstash-5.5.1\bin\mysql\station_parameter.txt"
#開啟分頁查詢
jdbc_paging_enabled => true
jdbc_page_size => 300
# 執行的sql 檔案路徑+名稱
statement_filepath => "G:\Developer\Elasticsearch5.5.1\ES5\logstash-5.5.1\bin\mysql\jdbc.sql"
# 設定監聽間隔 各欄位含義(由左至右)分、時、天、月、年,全部為*預設含義為每分鐘都更新
schedule => "* * * * *"
# 索引型別
type => "jdbc"
}
}
filter {
json {
source => "message"
remove_field => ["message"]
}
}
output {
elasticsearch {
# ES的IP地址及埠
hosts => ["localhost:9200"]
# 索引名稱
index => "article"
# 自增ID
document_id => "%{id}"
}
stdout {
# JSON格式輸出
codec => json_lines
}
}
引數介紹:
//是否記錄上次執行結果, 如果為真,將會把上次執行到的 tracking_column 欄位的值記錄下來,儲存到 last_run_metadata_path 指定的檔案中
record_last_run => true
//是否需要記錄某個column 的值,如果 record_last_run 為真,可以自定義我們需要 track 的 column 名稱,此時該引數就要為 true. 否則預設 track 的是 timestamp 的值.
use_column_value => true
//如果 use_column_value 為真,需配置此引數. track 的資料庫 column 名,該 column 必須是遞增的.比如:ID.
tracking_column => MY_ID
//指定檔案,來記錄上次執行到的 tracking_column 欄位的值
//比如上次資料庫有 10000 條記錄,查詢完後該檔案中就會有數字 10000 這樣的記錄,下次執行 SQL 查詢可以從 10001 條處開始.
//我們只需要在 SQL 語句中 WHERE MY_ID > :sql_last_value 即可. 其中 :sql_last_value 取得就是該檔案中的值(10000).(!!!注意這裡唯一不變就是 sql_last_value 是資料庫表的主鍵的當前最大值)
last_run_metadata_path => "G:\Developer\Elasticsearch5.5.1\ES5\logstash-5.5.1\bin\mysql\station_parameter.txt"
//是否清除 last_run_metadata_path 的記錄,如果為真那麼每次都相當於從頭開始查詢所有的資料庫記錄
clean_run => false
//是否將 column 名稱轉小寫
lowercase_column_names => false
//存放需要執行的 SQL 語句的檔案位置
statement_filepath => "G:\Developer\Elasticsearch5.5.1\ES5\logstash-5.5.1\bin\mysql\jdbc.sql"
增量同步:jdbc_add.sql:
select * from t_student_01 where id > :sql_last_value
增量同步:station_parameter.txt(!注意 #上一個sql_last_value值的存放檔案路徑, 起初必須要在檔案中指定欄位的初始值,其中“---”這符號是自己生成的)
最終效果:
這個檔案裡記錄上次執行到的 tracking_column 欄位的值,比如上次資料庫有 10000 條記錄,查詢完後該檔案中就會有數字 10000 這樣的記錄,下次執行 SQL 查詢可以從 10001 條處開始,我們只需要在 SQL 語句中 WHERE MY_ID > :sql_last_value 即可. 其中 :sql_last_value 取得就是該檔案中的值。
遇到的問題:
(1)在安裝好ElasticSearch的head外掛後總是用grunt server命令啟動時總是報錯:
解決方案: 命令:
npm install grunt --save-dev
(2)增量同步中上述jdbc_add.sql檔案中的 記錄tracking_column 欄位的值, 必須是
where id > :sql_last_value
(3)上述所有配置檔案需要編碼是ANSI編碼方式(一般預設是UTF-8編碼),否則出錯
相關推薦
應對sharding-jdbc結合mybatis實現分庫分表功能 分表的聯合查詢採用將mysql的資料同步到elasticsearch進行篩選
應對sharding-jdbc結合mybatis實現分庫分表功能 分表的聯合查詢採用將mysql的資料同步到elasticsearch進行篩選 安裝操作指南:(1)、(2) 其中windows目錄展示如下: 版本控制:1. 需要jdk:1.8(1.8.0_60)
sharding-jdbc結合mybatis實現分庫分表功能
源自:https://www.cnblogs.com/zwt1990/p/6762135.html最近忙於專案已經好久幾天沒寫部落格了,前2篇文章我給大家介紹了搭建基礎springMvc+mybatis的maven工程,這個簡單框架已經可以對付一般的小型專案。但是我們實際專案
Spring Boot入門教程(四十四): Sharding-JDBC+JPA|MyBatis+Druid分庫分表實現
一:資料庫分片方案 客戶端代理: 分片邏輯在應用端,封裝在jar包中,通過修改或者封裝JDBC層來實現。 噹噹網的 Sharding-JDBC 、阿里的TDDL是兩種比較常用的實現。 中介軟體代理: 在應用和資料中間加了一個代理層。分片邏輯統一維護在中介軟體
centos7 下安裝canal,並實現將mysql資料同步到redis
簡介:canal為阿里巴巴產品,它主要模擬了mysql的Slave向Master傳送請求,當mysql有增刪改查時則會出發請求將資料傳送到canal服務中,canal將資料存放到記憶體,直到客戶端程式(canal服務端和客戶端程式都是由java編寫,且客戶端邏輯由我們藉助c
SpringBoot 2.3 整合最新版 ShardingJdbc + Druid + MyBatis 實現分庫分表
今天專案不忙,想搞一下shardingJDBC分庫分表看看,主要想實現以下幾點: 捨棄xml配置,使用.yml或者.properties檔案+java的方式配置spring。 使用 Druid 作為資料庫連線池,同時開啟監控介面,並支援監控多資料來源。 不依賴 com.dangdang 的 shardi
Oracle結合Mybatis實現取表TOP 10
語句 sta str rownum info logs where param mys 之前一直使用mysql和informix數據庫,查表中前10條數據十分簡單: 最原始版本: select top * from student 當然,我們還可以寫的復雜一點,比如
MyBatis實現使用者的動態搜尋分頁等功能(7)
實現使用者的動態修改功能 思路分析 點選修改,獲取要修改的使用者id 我們需要新建一個 update.jsp先顯示要修改的使用者資訊,讓後讓使用者選擇性修改 兩個頁面跳轉我們需要servlet處理,所以要新建一個UpdateUserShow.java 實現u
oracle結合mybatis 實現自增主鍵的insert和批量insert功能(未完)
一.引子 在最近的一次開發工作中,有自增主鍵這樣的需求,而資料庫使用的是oracle資料庫; 由於oracle 資料庫沒有像mysql和sqlserver 那樣提供自增主鍵的功能,所以在這裡需要換一種思維去實現自增主鍵的功能!進而我們需要引入[序列]的概念!
ElasticSearch5+logstash的logstash-input-jdbc實現mysql資料同步
在實現的路上遇到了各種坑,再次驗證官方文件只能產考不能全信! ElasticSearch安裝就不說了上一篇有說! 安裝logstash 官方:https://www.elastic.co/guide/en/logstash/current/installing-logstash.html 1
MyBatis-Plus多表聯合查詢並且分頁(3表)
這3張表的關係是 模型表Model ===> 訓練表Training ===》應用表Application(大概的邏輯是:選擇應用,然後訓練,然後成為模型)如有不理解的可加我微信:17625089935 白天問我一般晚上回 首先我們先建立實體Model(我使用的d
ElasticSearch5+logstash-input-jdbc實現mysql資料同步及躺坑彙總
轉載來源 http://www.cnblogs.com/phpshen/p/6098333.html ElasticSearch安裝就不說了上一篇有說! 安裝logstash 官方:https://www.elastic.co/guide/en/logstash/cur
利用SSM(springmvc+spring+mybatis)實現多表聯合查詢
一、資料庫 Author表 (authorid主鍵) NewsInfo表(newsno主
mybatis學習 十四 resultMap標簽 一對一(聯合查詢)
rop prope mybatis div pro sele sel 關聯 bsp 1.使用 resultMap 實現關聯單個對象(聯合查詢方式) <resultMap type="Student" id="stuMap1"> <id colum
Memcached實現MySQL資料同步
一、介紹 1、Memcached介紹 Memcached 是一個高效能的分散式記憶體物件快取系統,用於動態Web應用以減輕資料庫負載。它通過在記憶體中快取資料和物件來減少讀取資料庫的次數,從而提高動態、資料庫驅動網站的速度。Memcached基於一個儲存鍵/值對的hashm
MyBatis學習總結(九)---基於XML多表聯合查詢(一對一、一對多、多對多)
1、一對一的關聯 使用association,association元素用於處理“has-one”(一對一)這種型別關係。 作用:針對pojo物件屬性的對映,它的兩個主要引數此時對應的值: javaType對應pojo類名, property對應pojo的
MyBatis學習總結(三)——多表關聯查詢與動態SQL
一、多表關聯查詢 表與表之間有三種常見的關聯關係,分別是一對一,一對多與多對多關係,MyBatis直接提供一對一與一對多的關聯關係,可以通過間接的方式實現多對多關聯。 1.1、一對一關係 1.1.1、執行環境 假定一個員工(emp)擁有一個登入使用者(user),員工與使用者表之間是一對一關係:
實現MySQL資料同步到ElasticSearch中
一、場景 筆者最近在寫全文搜尋引擎服務,用到的是ElasticSearch框架,該篇部落格就如何實現MySQL資料同步到ES中進行闡述 二、解決方案 執行系統:mac系統下 採用到的技術:ES2.4、logstash-2.4.1 用到的相關外掛:ES-head、logst
MyBatis 多表聯合查詢
最近在做在eclipse + maven搭建SSM框架下做一個簡單的後臺管理系統,因為是第一次搭建SSM專案,在mybatis進行多表連線查詢的時候遇到問題,不知道如何進行處理?在網上搜了一下解決方法是,以實現,記錄下自己的實現方案。 表之間的關係如下圖所示:
mybatis多表聯合查詢
以前東拼西湊來的,不知道都是哪些連結! User 、Role 的對應關係是,一個使用者有多個角色,因此,在 User 的實體中加入一個 Role 的屬性private List<Role> roles;對應一對多的關係。 <select id="q
很好的一篇關於MyBatis 多表聯合查詢及優化的文章
序 這篇文章我打算來簡單的談談 mybatis 的多表聯合查詢。起初是覺得挺簡單的,沒必要拿出來寫,畢竟 mybatis 這東西現在是個開發的都會用,而且網上的文章也是一搜羅一大堆,根本就用不著我來重複。但是吧,就我前幾天在做一個多表聯合查詢的時候,竟然出了很多