mysql怎么用es加速 mysql配合es

elasticsearch為什么快

首先,es有term dictionary,可以用logN次磁盤查找到目標term,但磁盤的隨機讀操作仍然非常耗時,所以盡可能少的讀磁盤就是nosql的初衷,而想要將數(shù)據(jù)放至緩存中,term dictionary又太大了,于是就有了term index,它是term diction的索引,即es中數(shù)據(jù)索引的索引,比如:A開頭的term在第幾頁,B開頭的term又在第幾頁,這棵樹不會包含所有的term,它包含的是term的一些前綴。通過term index可以快速的定位到term dictionary的某個offset,然后再從這個位置往后順序查找,再加上一些壓縮技術(shù)(Lucene Finite State Transducers)trem index的尺寸可以只有所有term的幾十分之一,使得用內(nèi)存緩存所有term index變成可能,其結(jié)構(gòu)如下:

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序定制開發(fā)、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了巨鹿免費建站歡迎大家使用!

為什么es檢索比mysql快,mysql只有term dictionary這一層(索引),是以b+tree排序的方式存儲在磁盤上,檢索一個term需要若干次的磁盤隨機訪問,而lucene在term dictionary的基礎(chǔ)上又添加了term index來加速檢索,其以樹的形式緩存在內(nèi)存里,從term index查到對應(yīng)的term dictionary的block位置后,再去磁盤上找term,大大減少了磁盤的隨機訪問次數(shù),再加上其以FST形式保存,非常節(jié)省空間,Term dictionary在磁盤上是以分block的方式保存的,一個block內(nèi)部利用公共前綴壓縮,比如都是Ab開頭的單詞就可以把Ab省去。這樣term dictionary可以比b-tree更節(jié)約磁盤空間。

使用canal將mysql同步到es中

因為自己項目中需要用到mysql數(shù)據(jù)同步到es中,查找了相關(guān)資料最后決定用canal來做,所以便有了本文,下面一起來看如何使用canal吧

根據(jù) 上的原理解釋,我們知道 canal 會模擬 mysql slave 的交互協(xié)議,偽裝自己為 mysql slave,然后向 mysql master 發(fā)送 dump 協(xié)議。

mysql master 收到 dump 請求,開始推送 binary log 給 slave(也就是 canal),然后 canal 解析 binary log 對象(原始為 byte流)。

經(jīng) canal 解析過的對象,我們使用起來就非常的方便了。

再根據(jù) 提供的版本信息,你會發(fā)現(xiàn) canal 其實相當(dāng)于一個中間件,專門用來解析 MySQL 的 binlog 日志。canal 解析好了之后,會封裝成一個數(shù)據(jù)對象,通過 protobuf3.0 協(xié)議進行交互,讓 canal 客戶端進行消費。

根據(jù)上面的解釋,以及 canal 提供的版本信息,我們在使用 canal 的時候,首選要安裝一個 canal.deployer-1.1.4.tar.gz 進行解析 MySQL 的 binlog 日志。

下載后,復(fù)制 canal.deployer-1.1.4.tar.gz 到 MySQL 主機上,比如放在 /usr/local/soft/目錄下。然后依次執(zhí)行下面的命令:

然后修改 canal 的配置文件 vim conf/example/instance.properties

這三項改成你自己的,比如我的配置如下:

然后保存并退出。(VI 模式下,按 Esc 輸入 :wq 回車退出。)

接著,我們檢查一下 MySQL 的配置。確定版本和是否開啟了 binlog 日志,以及日志格式。

canal 支持 binlog 格式為 ROW 的模式。如果你沒開啟 binlog,并且格式是非 row 的,建議修改一下 mysql 的配置文件。

執(zhí)行 mysql –help | grep my.cnf 找到 mysql 的 my.cnf 文件。

執(zhí)行 vim /etc/my.cnf 命令。添加下面 3 個配置。

然后保存并退出。

接著執(zhí)行 sudo service mysqld restart 重啟 MySQL。

需要注意的是你的 mysql 用戶,必須要有 REPLICATION SLAVE 權(quán)限。該權(quán)限授予 slave 服務(wù)器以該賬戶連接 master 后可以執(zhí)行 replicate 操作的權(quán)利。

如果沒有權(quán)限,則使用 root 賬戶登錄進 MySQL,執(zhí)行下面的語句,創(chuàng)建用戶,分配權(quán)限。

MySQL 啟動后,就可以開啟 canal 服務(wù)了。

開啟后,觀察 canal 服務(wù)的日志,確保服務(wù)正常。

查看 canal 的日志

確定沒有問題后,開始編寫我們的測試程序。

pom.xml 中導(dǎo)入下面的依賴。

使用JAVA進行測試

然后執(zhí)行 main 方法。你再修改修改 MySQL 中的數(shù)據(jù),你會發(fā)現(xiàn)所有改變都同步過來了。上面是使用的Java代碼進行運行,如果想用canal.adapter來進行運行可以下載

放入服務(wù)器中,依次執(zhí)行下面命令

然后修改配置文件 :

然后將需要運行存儲到es的的yml文件放入到

目錄下。例如:

然后開啟canal-adapter服務(wù)

/usr/local/soft/canal-adapter/bin/startup.sh

查看 canal-adapter 的日志,確定沒有問題后修改數(shù)據(jù) 就可以同步到es了

注意:

1、canal-adapter自帶mysql連接使用的5.x的,如果自己安裝的是高版本的mysql需要自己去/usr/local/soft/canal-adapter/lib增加對應(yīng)的jar包

2、因項目中同步es使用的sql中有數(shù)據(jù)庫中沒有的字段,導(dǎo)致原生程序一直報異常,后修改源碼中

加了一個判斷后才可以

3、es中使用的date字段類型和數(shù)據(jù)庫中不一致,所以這里又修改了部分源碼兼容我們項目中的類型

可以根據(jù)各自情況修改。

如何用一款小工具大大加速MySQL SQL語句優(yōu)化

1.將經(jīng)常要用到的字段(比如經(jīng)常要用這些字段來排序,或者用來做搜索),則最好將這些字段設(shè)為索引。 2.字段的種類盡可能用int 或者tinyint類型。另外字段盡可能用NOT NULL。 3.當(dāng)然無可避免某些字段會用到text ,varchar等字符類型,最好將text字段的單獨出另外一個表出來(用主鍵關(guān)聯(lián)好) 4.字段的類型,以及長度,是一個很考究開發(fā)者優(yōu)化功力的一個方面。如果表數(shù)據(jù)有一定的量了,不妨用PROCEDURE ANALYSE()命令來取得字段的優(yōu)化建議?。ㄔ趐hpmyadmin里可以在查看表時,點擊 “Propose table structure” 來查看這些建議) 如此可以讓你的表字段結(jié)構(gòu) 趨向完善。 5.select * 盡量少用,你想要什么字段 就select 什么字段出來 不要老是用* 號!同理,只要一行數(shù)據(jù)時盡量使用 LIMIT 1 6.絕對不要輕易用order by rand() ,很可能會導(dǎo)致mysql的災(zāi)難!! 7.每個表都應(yīng)該設(shè)置一個ID主鍵,最好的是一個INT型,并且設(shè)置上自動增加的AUTO_INCREMENT標志,這點其實應(yīng)該作為設(shè)計表結(jié)構(gòu)的第一件必然要做的事??! 8.拆分大的 DELETE 或 INSERT 語句。因為這兩個操作是會鎖表的,表一鎖住了,別的操作都進不來了,就我來說 有時候我寧愿用for循環(huán)來一個個執(zhí)行這些操作。 9.不要用永久鏈接 mysql_pconnect();除非你真的非??隙愕某绦虿粫l(fā)生意外,不然很可能也會導(dǎo)致你的mysql死掉。 10.永遠別要用復(fù)雜的mysql語句來顯示你的聰明。就我來說,看到一次關(guān)聯(lián)了三,四個表的語句,只會讓人覺得很不靠譜。

分享文章:mysql怎么用es加速 mysql配合es
文章位置:http://muchs.cn/article42/dohceec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站云服務(wù)器、響應(yīng)式網(wǎng)站移動網(wǎng)站建設(shè)、電子商務(wù)、App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)