一起來看看Solr全量更新和增量更新的那些事

2021-10-23 22:16:26 字數 3359 閱讀 9968

3.3.1 確定更新點

資料如果保留多份,就會存在一致性問題,就需要同步,同步分為兩大類:全量和增量

資料如果要保留副本,要麼同時寫(就是多寫),或者進行複製:非同步寫(即從主資料拷貝到副本);

同時寫(多寫),引出乙個問題,寫多少節點算成功(場景:分布式系統)?全部寫成功才算成功,還是寫大多數成功算成功,還是寫指定幾個節點算成功?

非同步寫的話,如果採用非同步複製,那麼實時性需要考量的話,就需要採用效能優先的架構。

資料同步一般分為兩種方式:全量和增量。

全量,這個很好理解。就是每天定時(避開業務高峰期)或者週期性全量把資料從乙個地方拷貝到另外乙個地方;

全量的話,可以採用直接全部覆蓋(使用「新」資料覆蓋「舊」資料);或者走更新邏輯(覆蓋前判斷下,如果新舊不一致,就更新);

這裡面有乙個隱藏的問題:如果採用非同步寫,主資料物理刪除了,怎麼直接通過全量資料同步?這就需要借助一些中間操作日誌檔案,或者其他手段,把這些「看不到」的資料記錄起來。

下圖便是全量更新:

增量的基礎是全量,就是你要使用某種方式先把全量資料拷貝過來,然後再採用增量方式同步更新。

增量的話,就是指抓取某個時刻(更新時間)或者檢查點(checkpoint)以後的資料來同步,不是無規律的全量同步。這裡引入乙個關鍵性的前提:副本一端要記錄或者知道(通過查詢更新日誌或者訂閱更新)哪些更新了。

3.2.1.首先要弄懂幾個必要的屬性,以及資料庫建表事項,和dataimporter.properties 、data-config.xml裡面的資料

注意這個只能返回id欄位

注意這個只能返回id欄位

3.2.2.資料庫配置注意事項
1.如果只涉及新增,與修改業務,那麼資料庫裡只需額外有乙個timpstamp欄位

就可以了,預設值為當前系統時間,current_timestamp

2.如果還涉及刪除業務,那麼資料裡就需額外再多新增乙個欄位isdelete,int型別的用0,

1來標識,此條記錄是否被刪除

3.2.3.dataimporter.properties
這個配置檔案很重要,它是用來記錄當前時間與上一次修改時間的,通過它能夠找出,那些,新新增的,修改的,或刪除的記錄標識,此條記錄是否被刪除的記錄
原配置:

<?xml version="1.0" encoding="utf-8"?>

>

type

="jdbcdatasource"

name

="mydb"

driver

="com.mysql.jdbc.driver"

url="jdbc:mysql:"

user

="root"

password

="123456"

/>

>

name

="employee"

datasource

="mydb"

query

="select * from tb_employee"

pk="id"

>

column

="id"

name

="id"

/>

column

="employee_name"

name

="name_ik"

/>

column

="employee_age"

name

="age_i"

/>

column

="employee_gender"

name

="gender_s"

/>

column

="department_id"

name

="department_i"

/>

column

="createtime"

name

="createtime_s"

/>

column

="updatetime"

name

="updatetime_s"

/>

entity

>

document

>

dataconfig

>

增量更新配置:

<?xml version="1.0" encoding="utf-8"?>

>

type

="jdbcdatasource"

name

="mydb"

driver

="com.mysql.jdbc.driver"

url="jdbc:mysql:"

user

="root"

password

="123456"

/>

>

column

="id"

name

="id"

/>

column

="employee_name"

name

="name_ik"

/>

column

="employee_age"

name

="age_i"

/>

column

="employee_gender"

name

="gender_s"

/>

column

="department_id"

name

="department_i"

/>

column

="createtime"

name

="createtime_s"

/>

column

="updatetime"

name

="updatetime_s"

/>

entity

>

document

>

dataconfig

>

3.2.5.通過後台管理手動增量更新和通過瀏覽器手動更新

採用更新時間戳、有的採用checkpoint等來標識和記錄更新點。

新書來了 邀您一起來看看

徹底剖析作業系統的原理,實現核心執行緒 特權級變換 使用者程序 任務排程 檔案系統等作業系統最基本的組成單元。用實際 解釋了鎖 訊號量 生產者消費者問題。實現了shell,幫助大家理解內部命令 外部命令 管道等操作。京東購買 今天,優秀的使用者體驗設計是產品所不可或缺的,但設計一款產品則是乙個漫 長...

第 4 頁 一起來看看workstation這個類

首先還是來看看我們自定義的資料型別employee,在應用的時候它和int型別的資料沒什麼兩樣,一樣的需要建立變數 物件 只不過前者是咱自己定義的,而後這是它內建的。employee這個類中有許多屬性,也有許多方法。而此時,我們不能直接用我們所建立出來的物件呼叫它的屬性進行修改。因為它是privat...

一起來看看手持終端在倉儲物流中的應用

隨著十幾年計算機資訊技術的高速發展,我國許多地區 企業 部隊等的倉儲管理已由原始的紙質單據加人員手工作業方式過渡到了以大型資料庫為核心,倉儲管理系統為中心,機械化或半機械化作業為主,一維二維條碼識別技術為輔的作業管理模式。但是隨著近幾年電子商務等領域的異軍突起,倉儲和流通環節的物資數量呈爆發性的增長...