文章目錄
- 一、清空控制台
- 1. 清空控制台
- 2. 修改資料
- 3. 監控資料
- 4. 資料變化
- 5. 索引查詢
- 6. 預期性能評估
- 7. 增量同步分析
- 二、驗證方案
- 2.1. 把shop索引删除
- 2.2. 重建shop索引
- 2.3. 修改id=取得資料
- 2.4. 檢視shop索引資料
- 2.4. 修改分類表資料
- 2.6. 監控
- 2.7. 檢視shop索引資料
- 2.8. 總結
- 2.9. 解決方案
一、清空控制台
1. 清空控制台
清空canal.adapter控制台
cd /app/canal/canal.adapter
tail
2. 修改資料
修改mysql的id=1的name的資料,将
陝西22面館(北京亦莊
改為
gblfy陝西面館(北京亦莊)
3. 監控資料
監控canal.adapter控制台
4. 資料變化
{
"data": [
{
"id": 1,
"created_at": 1637308432000,
"updated_at": 1640159632000,
"name": "gblfy陝西面館(北京亦莊)",
"remark_score": 4.9,
"price_per_man": 156,
"latitude": 31.195341,
"longitude": 120.915855,
"category_id": 1,
"tags": "新開業 人氣爆棚",
"start_time": "10:00",
"end_time": "22:00",
"address": "船廠路36号",
"seller_id": 1,
"icon_url": "/static/image/shopcover/xchg.jpg"
}
],
"database": "dianpingdb",
"destination": "example",
"es": 1637644424000,
"groupId": "g1",
"isDdl": false,
"old": [
{
"name": "陝西22面館(北京亦莊)"
}
],
"pkNames": [
"id"
],
"sql": "",
"table": "shop",
"ts": 1637644425043,
"type": "UPDATE"
}
從上面可以看出,canal.adapter監控到了我的資料變化,并進行增量的資料的同步到ES7中。
5. 索引查詢
# 查詢shop索引
GET /shop/_search
{
"query": {
"match": {
"name": "gblfy"
}
}
}
6. 預期性能評估
我們要求最大性能(理論上):當使用者修改id=1 中name的資料的值,其他索引的内容都不應該發生變化,僅僅對我對修改的id=1 中name的資料的值發生變化。
我們在配置canal.adapter的shop.xml中的sql時,是一個全量的sql。
SELECT
a.id,
a.NAME,
a.tags,
CONCAT( a.latitude, ',', a.longitude ) AS location,
a.remark_score,
a.price_per_man,
a.category_id,
b.`name` AS category_name,
a.seller_id,
c.remark_score AS seller_remark_score,
c.disabled_flag AS seller_disabled_flag
FROM
shop a
INNER JOIN category b ON a.category_id = b.id
INNER JOIN seller c ON c.id =
7. 增量同步分析
sql中沒有指定具體要求的資料的id,那canal.adapter怎麼監控到我資料發生變化後,隻同步我修改ID=1的這條資料呢?
- 二種解釋:
-
第一種:
canal.adapter内部做了一個這樣的機制;
當我修改ID=1的資料時,canal.adapter通過全量sql就可以把id=1的資料篩選出來,然後進行增量同步到es7的索引中。
-
第二種:
canal.adapter 内部武這樣監控的機制,隻要資料發生變化,就執行全量sql,做全量同步,隻不過已經存在而索引讓es7做更新操作而已。
二、驗證方案
2.1. 把shop索引删除
# 删除shop索引
2.2. 重建shop索引
PUT /shop
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1
}
, "mappings": {
"properties": {
"id":{"type": "integer"},
"name":{"type": "text","analyzer": "ik_max_word","search_analyzer": "ik_smart"},
"tags":{"type": "text","analyzer": "whitespace","fielddata": true},
"location":{"type": "geo_point"},
"remark_score":{"type": "double"},
"price_per_man":{"type": "integer"},
"category_id":{"type": "integer"},
"category_name":{"type": "keyword"},
"seller_id":{"type": "integer"},
"seller_remark_score":{"type": "double"},
"seller_disabled_flag":{"type": "integer"}
}
}
}
2.3. 修改id=取得資料
把id=1的name值由
gblfy陝西面館(北京亦莊)
改成
com.gblfy陝西面館(北京亦莊)
2.4. 檢視shop索引資料
# 查詢shop索引
從上面查詢結果來看符合預期,對吧!
2.4. 修改分類表資料
把category表中id=1中的name值
美食5
修改成
美食8
說明:
2.6. 監控
從截圖中可以看出也監控到了,對吧,别急!
2.7. 檢視shop索引資料
從上面截圖中可以看到,資料canal.adapter 雖然監控到了,但是,es7中的資料沒更新。
2.8. 總結
2.9. 解決方案