国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

數(shù)據(jù)庫同步 Elasticsearch 后數(shù)據(jù)不一致,怎么辦?

這篇具有很好參考價值的文章主要介紹了數(shù)據(jù)庫同步 Elasticsearch 后數(shù)據(jù)不一致,怎么辦?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1、實戰(zhàn)線上問題

  • Q1:Logstash 同步 postgreSQL 到 Elasticsearch 數(shù)據(jù)不一致。

在使用 Logstash 從 pg 庫中將一張表導(dǎo)入到 ES 中時,發(fā)現(xiàn) ES 中的數(shù)據(jù)量和 PG 庫中的這張表的數(shù)據(jù)量存在較大差距。如何快速比對哪些數(shù)據(jù)沒有插入?導(dǎo)入過程中,Logstash 日志沒有異常。PG 中這張表有 7600W。

  • Q2:mq 異步雙寫數(shù)據(jù)庫、es 的方案中,如何保證數(shù)據(jù)庫數(shù)據(jù)和 es 數(shù)據(jù)的一致性?

2、推薦解決方案之一——ID 比較法

如下示例,僅拿問題1舉例驗證,問題2原理一致。

2.1 方案探討

要找出哪些數(shù)據(jù)沒有插入到 Elasticsearch 中,可以采用以下方法:

  • 確保 Logstash 配置文件中的 input 插件的 JDBC 驅(qū)動程序正確配置,以便從 PostgreSQL 數(shù)據(jù)庫中提取所有數(shù)據(jù)。注意 statement 參數(shù),確保它選擇了所有需要的數(shù)據(jù)。

  • 檢查 Logstash 配置文件的 output 插件,確保正確配置了 Elasticsearch 的連接參數(shù)。同時,檢查是否有過濾器在導(dǎo)入過程中過濾掉了部分?jǐn)?shù)據(jù)。

  • 在 Logstash 配置文件中添加一個 stdout 插件,將從 PostgreSQL 數(shù)據(jù)庫中讀取的數(shù)據(jù)記錄到文件中。

例如,可以添加以下內(nèi)容:

output?{
??elasticsearch?{
????...Elasticsearch?配置...
??}
??stdout?{
????codec?=>?json_lines
????path?=>?"/path/to/logstash_output.log"
??}
}

將 Logstash 輸出文件與 PostgreSQL 數(shù)據(jù)庫中的原始數(shù)據(jù)進(jìn)行比較,以找出未導(dǎo)入的數(shù)據(jù)??梢允褂?Python、Shell 腳本或其他編程語言編寫一個簡單的腳本來執(zhí)行此操作。

如果 Logstash 輸出文件中的記錄數(shù)與 PostgreSQL 數(shù)據(jù)庫中的記錄數(shù)一致,但 Elasticsearch 中的記錄數(shù)不一致,請檢查 Elasticsearch 集群的健康狀況和日志。確認(rèn)集群是否在接收和索引數(shù)據(jù)時遇到問題。

如果問題仍然存在,嘗試將批量操作的大小減小,以減輕 Elasticsearch 和 Logstash 的負(fù)擔(dān)??梢酝ㄟ^在 Logstash 配置文件的 output 插件中設(shè)置 flush_size 和 idle_flush_time 參數(shù)來實現(xiàn)。

處理大量數(shù)據(jù)時,可能需要調(diào)整 Logstash 和 Elasticsearch 的性能和資源配置。根據(jù)硬件和網(wǎng)絡(luò)條件,可能需要優(yōu)化批量操作、JVM 設(shè)置、線程池大小等方面的設(shè)置。

2.2 比較腳本的實現(xiàn)

以下是一個簡單的 Shell 腳本示例,用于比較 Logstash 輸出文件(JSON 格式)和 PostgreSQL 數(shù)據(jù)庫中的數(shù)據(jù)。該腳本將比較特定字段(如 id)以確定哪些數(shù)據(jù)可能未導(dǎo)入到 Elasticsearch。

es如何保證與數(shù)據(jù)庫的一致性,elasticsearch,數(shù)據(jù)庫,大數(shù)據(jù),搜索引擎,全文檢索

首先,從 PostgreSQL 數(shù)據(jù)庫中導(dǎo)出數(shù)據(jù),將其保存為 CSV 文件:

COPY?(SELECT?id?FROM?your_table)?TO?'/path/to/postgres_data.csv'?WITH

接下來,創(chuàng)建一個名為 compare.sh 的 Shell 腳本:

#!/bin/bash
#?將?JSON?文件中的?ID?提取到一個文件中
jq?'.id'?/path/to/logstash_output.log?>?logstash_ids.txt

#?刪除?JSON?中的雙引號
sed?-i?'s/"http://g'?logstash_ids.txt

#?對?Logstash?和?PostgreSQL?的?ID?文件進(jìn)行排序
sort?-n?logstash_ids.txt?>?logstash_ids_sorted.txt
sort?-n?/path/to/postgres_data.csv?>?postgres_ids_sorted.txt

#?使用?comm?比較兩個已排序的?ID?文件
comm?-23?postgres_ids_sorted.txt?logstash_ids_sorted.txt?>?missing_ids.txt

#?輸出結(jié)果
echo?"以下 ID 在 Logstash 輸出文件中未找到:"
cat?missing_ids.txt

為腳本添加可執(zhí)行權(quán)限并運行:

chmod?+x?compare.sh

./compare.sh

此腳本會比較 logstash_output.log 和 postgres_data.csv 文件中的 ID。如果發(fā)現(xiàn)缺失的 ID,它們將被保存在 missing_ids.txt 文件中,并輸出到控制臺。請注意,該腳本假設(shè)已經(jīng)安裝了 jq(一個命令行 JSON 處理器)。如果沒有,請先安裝 jq。

3、推薦方案二——Redis 加速對比

在這種情況下,可以使用 Redis 的集合數(shù)據(jù)類型來存儲 PostgreSQL 數(shù)據(jù)庫和 Logstash 輸出文件中的 ID。接下來,可以使用 Redis 提供的集合操作來找到缺失的 ID。

es如何保證與數(shù)據(jù)庫的一致性,elasticsearch,數(shù)據(jù)庫,大數(shù)據(jù),搜索引擎,全文檢索

以下是一個使用 Redis 實現(xiàn)加速比對的示例:

首先,從 PostgreSQL 數(shù)據(jù)庫中導(dǎo)出數(shù)據(jù),將其保存為 CSV 文件:

COPY?(SELECT?id?FROM?your_table)?TO?'/path/to/postgres_data.csv'?WITH?CSV?HEADER;

安裝并啟動 Redis。

使用 Python 腳本將 ID 數(shù)據(jù)加載到 Redis:

import?redis
import?csv

#?連接到?Redis

r?=?redis.StrictRedis(host='localhost',?port=6379,?db=0)

#?從?PostgreSQL?導(dǎo)出的?CSV?文件中加載數(shù)據(jù)
with?open('/path/to/postgres_data.csv',?newline='')?as?csvfile:
????csv_reader?=?csv.reader(csvfile)
????next(csv_reader)??#?跳過表頭
????for?row?in?csv_reader:
????????r.sadd('postgres_ids',?row[0])

#?從?Logstash?輸出文件中加載數(shù)據(jù)
with?open('/path/to/logstash_output.log',?newline='')?as?logstash_file:
????for?line?in?logstash_file:
????????id?=?line.split('"id":')[1].split(',')[0].strip()
????????r.sadd('logstash_ids',?id)

#?計算差集
missing_ids?=?r.sdiff('postgres_ids',?'logstash_ids')

#?輸出缺失的?ID
print("以下 ID 在 Logstash 輸出文件中未找到:")
for?missing_id?in?missing_ids:
????print(missing_id)

這個 Python 腳本使用 Redis 集合數(shù)據(jù)類型存儲 ID,然后計算它們之間的差集以找到缺失的 ID。需要先安裝 Python 的 Redis 庫??梢允褂靡韵旅畎惭b:

pip?install?redis

這個腳本是一個基本示例,可以根據(jù)需要修改和擴展它。使用 Redis 的優(yōu)點是它能在內(nèi)存中快速處理大量數(shù)據(jù),而不需要在磁盤上讀取和寫入臨時文件。

4、小結(jié)

方案一:使用 Shell 腳本和 grep 命令

  • 優(yōu)點:

(1)簡單,易于實現(xiàn)。

(2)不需要額外的庫或工具。

  • 缺點:

(1)速度較慢,因為它需要在磁盤上讀寫臨時文件。

(2)對于大數(shù)據(jù)量的情況,可能會導(dǎo)致較高的磁盤 I/O 和內(nèi)存消耗。

方案二:使用 Redis 實現(xiàn)加速比對

  • 優(yōu)點:

(1)速度更快,因為 Redis 是基于內(nèi)存的數(shù)據(jù)結(jié)構(gòu)存儲。

(2)可擴展性較好,可以處理大量數(shù)據(jù)。

  • 缺點:

(1)實現(xiàn)相對復(fù)雜,需要編寫額外的腳本。

(2)需要安裝和運行 Redis 服務(wù)器。

根據(jù)需求和數(shù)據(jù)量,可以選擇合適的方案。如果處理的數(shù)據(jù)量較小,且對速度要求不高,可以選擇方案一,使用 Shell 腳本和 grep 命令。這種方法簡單易用,但可能在大數(shù)據(jù)量下表現(xiàn)不佳。

如果需要處理大量數(shù)據(jù),建議選擇方案二,使用 Redis 實現(xiàn)加速比對。這種方法速度更快,能夠有效地處理大數(shù)據(jù)量。然而,這種方法需要額外的設(shè)置和配置,例如安裝 Redis 服務(wù)器和編寫 Python 腳本。

在實際應(yīng)用中,可能需要根據(jù)具體需求進(jìn)行權(quán)衡,以選擇最適合的解決方案。

推薦閱讀

  1. 全網(wǎng)首發(fā)!從 0 到 1 Elasticsearch 8.X 通關(guān)視頻

  2. 重磅 | 死磕 Elasticsearch 8.X 方法論認(rèn)知清單

  3. 如何系統(tǒng)的學(xué)習(xí) Elasticsearch ?

  4. 2023,做點事

更短時間更快習(xí)得更多干貨!

和全球?近2000+?Elastic 愛好者一起精進(jìn)!

es如何保證與數(shù)據(jù)庫的一致性,elasticsearch,數(shù)據(jù)庫,大數(shù)據(jù),搜索引擎,全文檢索

比同事?lián)屜纫徊綄W(xué)習(xí)進(jìn)階干貨!文章來源地址http://www.zghlxwxcb.cn/news/detail-608133.html

到了這里,關(guān)于數(shù)據(jù)庫同步 Elasticsearch 后數(shù)據(jù)不一致,怎么辦?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • MySQL數(shù)據(jù)庫忘記密碼怎么辦?教你一招

    MySQL數(shù)據(jù)庫忘記密碼怎么辦?教你一招

    文章目錄 1.以管理員身份打開cmd,關(guān)閉Mysql服務(wù) 2. 跳過密碼授權(quán)登錄 ?3.再繼續(xù)以管理員身份打開一個cmd窗口,進(jìn)行重置密碼 ?4.使用新密碼重新登錄mysql驗證 ?5.使用Navicat可視化工具連接Mysql Mysql數(shù)據(jù)庫之前安裝好了,但是突然忘記當(dāng)初自己設(shè)置的登錄密碼了,導(dǎo)致使用Navi

    2024年02月04日
    瀏覽(430)
  • SQL Server 數(shù)據(jù)庫變成單個用戶怎么辦

    SQL Server 數(shù)據(jù)庫變成單個用戶怎么辦

    參考技術(shù)A 1、首先我們打開SQL? SERVER的管理控制臺,找到一個要設(shè)置角色的用戶。 2、下面我們將為這個用戶賦予創(chuàng)建數(shù)據(jù)庫的角色,我們先用這個用戶登錄管理工具看一下是否具有創(chuàng)建用戶的權(quán)限。 3、進(jìn)行數(shù)據(jù)庫創(chuàng)建的時候,提示如下的錯誤,證明這個用戶不具備這個角色

    2024年02月03日
    瀏覽(89)
  • reduce輸出結(jié)果到sqlserver數(shù)據(jù)庫異常怎么辦

    如果在將reduce的輸出結(jié)果存儲到SQL Server數(shù)據(jù)庫時出現(xiàn)異常,可以按照以下步驟進(jìn)行排查和解決: 檢查數(shù)據(jù)庫連接信息:確保在連接數(shù)據(jù)庫時使用了正確的數(shù)據(jù)庫地址、用戶名、密碼以及數(shù)據(jù)庫名稱。 檢查數(shù)據(jù)庫表結(jié)構(gòu):確保要存儲數(shù)據(jù)的表在數(shù)據(jù)庫中已經(jīng)存在,并且表的字

    2024年02月15日
    瀏覽(23)
  • 數(shù)據(jù)庫所在服務(wù)器磁盤滿了怎么辦?

    數(shù)據(jù)庫所在服務(wù)器磁盤滿了怎么辦?

    大家好,我是G探險者。 給大家拜個晚年哈,節(jié)后上班第一天,打開電腦,發(fā)現(xiàn)數(shù)據(jù)庫服務(wù)器連不上了。 幸虧,節(jié)后第一天上班的人不太多,領(lǐng)導(dǎo)還沒來,我一番鼓搗解決了這個問題。 所以做個總結(jié),記錄一下。 使用mysql提供的客戶端工具在命令行連接mysql數(shù)據(jù)庫時,報錯如

    2024年02月22日
    瀏覽(19)
  • 服務(wù)器數(shù)據(jù)庫被.rmallox勒索病毒加密了怎么辦?|數(shù)據(jù)恢復(fù)解決方案

    服務(wù)器數(shù)據(jù)庫被.rmallox勒索病毒加密了怎么辦?|數(shù)據(jù)恢復(fù)解決方案

    .rmallox 勒索病毒是如何工作的?它如何加密用戶的文件,并要求支付贖金? ???????? .rmallox勒索病毒是一種特殊的惡意軟件,其主要目的是加密用戶的重要文件(如文檔、圖片、視頻等),并要求受害者支付贖金以獲取解密密鑰。以下是勒索病毒通常的工作方式和加密用

    2024年04月28日
    瀏覽(20)
  • 【ElasticSearch】深入探索 ElasticSearch 對數(shù)據(jù)的聚合、查詢自動補全、與數(shù)據(jù)庫間的同步問題以及使用 RabbitMQ 實現(xiàn)與數(shù)據(jù)庫間的同步

    【ElasticSearch】深入探索 ElasticSearch 對數(shù)據(jù)的聚合、查詢自動補全、與數(shù)據(jù)庫間的同步問題以及使用 RabbitMQ 實現(xiàn)與數(shù)據(jù)庫間的同步

    在本文中,我們將深入探討 ElasticSearch 在數(shù)據(jù)處理中的關(guān)鍵功能,包括數(shù)據(jù)聚合、查詢自動補全以及與數(shù)據(jù)庫的同步問題。 首先,我們將聚焦于 ElasticSearch 強大的聚合功能,解釋什么是聚合以及如何通過 DSL 語句和 RestClient 實現(xiàn)各種聚合操作。這一功能能夠讓我們更深入地了

    2024年02月08日
    瀏覽(28)
  • 忘記網(wǎng)站admin密碼怎么辦?如何修改數(shù)據(jù)庫md5值與admin密碼巧解

    如果你不小心忘記了網(wǎng)站管理員賬號密碼,應(yīng)該如何找出呢? 小編總結(jié)了兩種方法: 方法一: 打開數(shù)據(jù)庫,找到admin的user字段,修改user用戶名對應(yīng)的密碼md5植。下面是常見md5值替換表: 數(shù)據(jù)庫修改MD5: 14e1b600b1fd579f47433b88e8d85291 密碼:123456 e10adc3949ba59abbe56e057f20f883e 密碼:

    2024年02月09日
    瀏覽(38)
  • RabbitMQ實現(xiàn)數(shù)據(jù)庫與ElasticSearch的數(shù)據(jù)同步和分享文件過期處理

    RabbitMQ實現(xiàn)數(shù)據(jù)庫與ElasticSearch的數(shù)據(jù)同步 | Hannya。-CSDN 企業(yè)級開發(fā)項目實戰(zhàn)——基于RabbitMQ實現(xiàn)數(shù)據(jù)庫、elasticsearch的數(shù)據(jù)同步 | 波總說先賺它一個小目標(biāo)-CSDN SPringBoot集成RabbitMQ實現(xiàn)30秒過期刪除功能 | 軍大君-CSDN 當(dāng)進(jìn)行文件上傳、文件創(chuàng)建、文件重命名等操作時: 通過Rabbit

    2024年02月09日
    瀏覽(19)
  • 企業(yè)級開發(fā)項目實戰(zhàn)——基于RabbitMQ實現(xiàn)數(shù)據(jù)庫、elasticsearch的數(shù)據(jù)同步

    企業(yè)級開發(fā)項目實戰(zhàn)——基于RabbitMQ實現(xiàn)數(shù)據(jù)庫、elasticsearch的數(shù)據(jù)同步

    1、商品上架時:search-service新增商品到elasticsearch 2、商品下架時:search-service刪除elasticsearch中的商品 數(shù)據(jù)同步是希望,當(dāng)我們商品修改了數(shù)據(jù)庫中的商品信息,索引庫中的信息也會跟著改。在微服務(wù)中數(shù)據(jù)庫和索引庫是在兩個不同的服務(wù)中。如果,商品的服務(wù),向es的服務(wù)中

    2024年02月12日
    瀏覽(86)
  • MySQL主從數(shù)據(jù)不一致,怎么辦?

    MySQL主從數(shù)據(jù)不一致,怎么辦?

    先給大家說個身邊的故事。 小伙伴二狗最近面宇宙廠,前面被問MySQL索引、鎖、主從復(fù)制原理時答的都很開心。 當(dāng) 面試官 問到?:“你們遇到主從不一致的問題怎么解決呢?你有什么更好的方案嗎?” 二狗 懵了。不就是讀寫時候走主,純讀走從嗎。。難道還有什么別的辦法

    2023年04月20日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包