国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 數據庫 > MySQL > 正文

MySQL 與 Elasticsearch 數據不對稱問題解決辦法

2024-07-24 13:14:19
字體:
來源:轉載
供稿:網友

MySQL 與 Elasticsearch 數據不對稱問題解決辦法

jdbc-input-plugin 只能實現數據庫的追加,對于 elasticsearch 增量寫入,但經常jdbc源一端的數據庫可能會做數據庫刪除或者更新操作。這樣一來數據庫與搜索引擎的數據庫就出現了不對稱的情況。

當然你如果有開發團隊可以寫程序在刪除或者更新的時候同步對搜索引擎操作。如果你沒有這個能力,可以嘗試下面的方法。

這里有一個數據表 article , mtime 字段定義了 ON UPDATE CURRENT_TIMESTAMP 所以每次更新mtime的時間都會變化

mysql> desc article;+-------------+--------------+------+-----+--------------------------------+-------+| Field    | Type     | Null | Key | Default            | Extra |+-------------+--------------+------+-----+--------------------------------+-------+| id     | int(11)   | NO  |   | 0               |    || title    | mediumtext  | NO  |   | NULL              |    || description | mediumtext  | YES |   | NULL              |    || author   | varchar(100) | YES |   | NULL              |    || source   | varchar(100) | YES |   | NULL              |    || content   | longtext   | YES |   | NULL              |    || status   | enum('Y','N')| NO  |   | 'N'              |    || ctime    | timestamp  | NO  |   | CURRENT_TIMESTAMP       |    || mtime    | timestamp  | YES |   | ON UPDATE CURRENT_TIMESTAMP  |    |+-------------+--------------+------+-----+--------------------------------+-------+7 rows in set (0.00 sec)

logstash 增加 mtime 的查詢規則

jdbc {  jdbc_driver_library => "/usr/share/java/mysql-connector-java.jar"  jdbc_driver_class => "com.mysql.jdbc.Driver"  jdbc_connection_string => "jdbc:mysql://localhost:3306/cms"  jdbc_user => "cms"  jdbc_password => "password"  schedule => "* * * * *" #定時cron的表達式,這里是每分鐘執行一次  statement => "select * from article where mtime > :sql_last_value"  use_column_value => true  tracking_column => "mtime"  tracking_column_type => "timestamp"   record_last_run => true  last_run_metadata_path => "/var/tmp/article-mtime.last" }

創建回收站表,這個事用于解決數據庫刪除,或者禁用 status = 'N' 這種情況的。

CREATE TABLE `elasticsearch_trash` ( `id` int(11) NOT NULL, `ctime` timestamp NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8

為 article 表創建觸發器

CREATE DEFINER=`dba`@`%` TRIGGER `article_BEFORE_UPDATE` BEFORE UPDATE ON `article` FOR EACH ROWBEGIN -- 此處的邏輯是解決文章狀態變為 N 的時候,需要將搜索引擎中對應的數據刪除。 IF NEW.status = 'N' THEN insert into elasticsearch_trash(id) values(OLD.id); END IF; -- 此處邏輯是修改狀態到 Y 的時候,方式elasticsearch_trash仍然存在該文章ID,導致誤刪除。所以需要刪除回收站中得回收記錄。  IF NEW.status = 'Y' THEN delete from elasticsearch_trash where id = OLD.id; END IF;ENDCREATE DEFINER=`dba`@`%` TRIGGER `article_BEFORE_DELETE` BEFORE DELETE ON `article` FOR EACH ROWBEGIN -- 此處邏輯是文章被刪除同事將改文章放入搜索引擎回收站。 insert into elasticsearch_trash(id) values(OLD.id);END

接下來我們需要寫一個簡單地 Shell 每分鐘運行一次,從 elasticsearch_trash 數據表中取出數據,然后使用 curl 命令調用 elasticsearch restful 接口,刪除被收回的數據。

你還可以開發相關的程序,這里提供一個 Spring boot 定時任務例子。

實體

package cn.netkiller.api.domain.elasticsearch;import java.util.Date;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.Id;import javax.persistence.Table;@Entity@Tablepublic class ElasticsearchTrash { @Id private int id; @Column(columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP") private Date ctime; public int getId() { return id; } public void setId(int id) { this.id = id; } public Date getCtime() { return ctime; } public void setCtime(Date ctime) { this.ctime = ctime; }}

倉庫

package cn.netkiller.api.repository.elasticsearch;import org.springframework.data.repository.CrudRepository;import com.example.api.domain.elasticsearch.ElasticsearchTrash;public interface ElasticsearchTrashRepository extends CrudRepository<ElasticsearchTrash, Integer>{}

定時任務

package cn.netkiller.api.schedule;import org.elasticsearch.action.delete.DeleteResponse;import org.elasticsearch.client.transport.TransportClient;import org.elasticsearch.rest.RestStatus;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.scheduling.annotation.Scheduled;import org.springframework.stereotype.Component;import com.example.api.domain.elasticsearch.ElasticsearchTrash;import com.example.api.repository.elasticsearch.ElasticsearchTrashRepository;@Componentpublic class ScheduledTasks { private static final Logger logger = LoggerFactory.getLogger(ScheduledTasks.class); @Autowired private TransportClient client; @Autowired private ElasticsearchTrashRepository alasticsearchTrashRepository; public ScheduledTasks() { } @Scheduled(fixedRate = 1000 * 60) // 60秒運行一次調度任務 public void cleanTrash() { for (ElasticsearchTrash elasticsearchTrash : alasticsearchTrashRepository.findAll()) {  DeleteResponse response = client.prepareDelete("information", "article", elasticsearchTrash.getId() + "").get();  RestStatus status = response.status();  logger.info("delete {} {}", elasticsearchTrash.getId(), status.toString());  if (status == RestStatus.OK || status == RestStatus.NOT_FOUND) {  alasticsearchTrashRepository.delete(elasticsearchTrash);  } } }}

Spring boot 啟動主程序。

package cn.netkiller.api;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.scheduling.annotation.EnableScheduling;@SpringBootApplication@EnableSchedulingpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); }} 

以上就是MySQL 與 Elasticsearch 數據不對稱問題解決辦法的講解,如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
麻豆网站在线免费观看| 国产探花视频在线观看| 精品国内自产拍在线视频| 国产欧美一区二区三区小说| 中文字幕免费中文| √天堂8资源中文在线| 国产精品yjizz视频网一二区 | 激情小说 在线视频| 免费观看久久久久| 免费久久网站| 国产特级毛片| wwww在线观看| 国产精品不卡一区二区三区在线观看| 99在线播放| 国产在线观看18| 69国产精品视频| 美女免费视频黄| 91精品专区| 久久精品亚洲7777影院| 国产精品扒开做爽爽爽的视频| 亚洲第一成人在线视频| 国产一卡2卡3卡免费网站| 在线观看av网站| 国产天堂资源| 国产乱妇乱子| 一本大道久久精品| 国产精品视频流白浆免费视频| www在线视频| 一区二区三区四区在线免费视频| 国产精品综合久久久久| 日本不卡视频一区二区| 91美女在线| 中文字幕日本在线| 国产原创精品视频| 久久久久久国产视频| 天天操中文字幕视频| 在线免费观看黄色片| 国产精品伦一区二区三区视频| 黄网站在线观看高清免费| 日本一卡二卡四卡精品| 国产www在线观看| 中文字幕av中文字幕| 尤物网在线观看| 国产精品666| 中文在线观看视频| av福利在线观看| 亚洲夜夜综合| 欧美日韩一区二区三区在线播放| 99在线免费观看| 精品剧情v国产在线观看| 在线中文字幕av| 在线观看中文| 六月天色婷婷| 国产在线第一页| 国产系列电影在线播放网址| 99视频在线观看地址| 国产粉嫩一区二区三区在线观看| 国产福利微拍精品一区二区| 国产成人福利| 欧美人成在线观看网站高清| 国产原创av在线| 国产天堂资源| sm国产在线调教视频| 午夜伦全在线观看| 99热免费在线| 国产女人在线观看| 精品偷拍激情视频在线观看| 色综合久久五月天| 中文字幕在线影院| 日本一本久久| 国产精品午夜久久久久久| 91在线网址| 国产麻豆一级片| 在线观看av的网站| 天天操夜夜操天天射| 亚洲激情丁香| 国产一级片网站| 超碰人人在线| 亚洲国产成人综合| 国产三级香港三韩国三级| gogo在线观看| 91在线最新| 国产性色视频| 欧美亚洲另类在线观看| 国产黄色在线免费观看| 日本综合一区二区三区| 国产精品白浆流出视频| 国产鲁鲁视频在线观看特色| gogo在线观看| 四虎成人精品在永久免费| 国产变态拳头交视频一区二区| 国产精品㊣新片速递bt| 免费看的毛片| 超碰在线观看免费版| 亚洲精品一线| 在线三级中文| 亚洲国产精华液| 亚洲综合在线不卡| 在线观看精品一区二区三区| 国产馆av播放| 国产亚洲精品久久久久久移动网络| 免费精品国产自产拍观看| 樱花草在线观看www| 精品视频在线一区二区| 精品推荐国产麻豆剧传媒| 国产成人综合美国十次| 国产精品白浆流出视频| 91涩漫在线观看c| 在线播放av网站| www555久久| 国产女王在线**视频 | 99久久99久久免费精品小说| 国产精品免费91| 精品视频vs精品视频| 99免费视频| 青青草原国产在线观看| 丁香综合在线| 国产91在线视频蝌蚪| av丝袜在线| 国产69精品久久久久孕妇国产69久久 | av影视在线看| www.国产精品.com| 黄色国产网站在线播放| 国产性色视频| 亚洲综合在线免费| 国产在线一区二区视频| 国产精品18久久久久久久久久 | 在线免费看av| 国内a∨免费播放| 国产wwww| 欧美国产中文| 国产高清视频在线播放| 欧美日韩久久中文字幕| 国产一二在线观看| 亚洲综合激情六月婷婷在线观看| 美女被人操视频在线观看| 国产污视频在线| 日本a级黄色| 国产福利在线观看| 激情丁香婷婷| 香蕉视频网站在线观看| 国产欧美日本亚洲精品一4区| 欧美婷婷久久五月精品三区| 国产成人午夜精品| 国产精品自产拍在线网站| 91久久精品国产性色| 天天av天天爽| 福利视频网址导航| 超碰在线影院| 日本一二区视频| 精品176二区| 国产福利微拍精品一区二区| 国产在线视频精品视频免费看| av在线中文| www.99av| 日本不卡1区2区3区| 先锋影音av中文字幕| 精品视频一区二区观看| 国产9色视频| 精品国内一区二区三区免费视频| 国产中文字幕在线观看| 欧美精品久久久久久久小说| jizz在线视频| 欧美96在线| 黄色网页网址在线免费| 美女永久在线网站| 国产在线麻豆精品| 国产麻豆免费| 国产成人精品综合网站| 精品一区二区在线欧美| 在线黄色.com| 免费看的毛片| 国产一级在线观看| 国产福利电影在线| 亚洲精品视频在线免费| 在线色视频网| 国产在线日本| 国产成人综合亚洲欧美在| 国产成人久久精品77777| 国产黄在线观看| 亚洲va国产日韩欧美精品色婷婷| 三级小说一区| 国产香蕉视频在线观看| 99爱视频在线观看| 狠狠干五月天| 国产成在线观看免费视频| 在线观看中文字幕| 国产中文字幕av| 一区二区三区四区在线免费视频| 亚洲激情丁香| 懂色一区二区三区| 92久久精品| 国产卡一卡二卡三| 在线中文字幕av| 国产免费网址| www.91在线播放| 91九色在线看| 国产三级在线观看| 国产原创av在线| av在线二区|