有一個場景,我必須從多個源導入數據(數百萬條記錄)并將其保存在數據庫中。當用戶嘗試搜索與該數據相關的任何信息時,他們應該在 2-3 秒內獲得結果。為此,我設計了一個架構,使用 golang 從多個源導入數據并將數據推送到 AWS SQS 中。我創建了一個 lambda 函數,當 AWS SQS 有一些數據時會觸發該函數。然后,此 lambda 函數將數據推送到 AWS Elastic Search 中。我創建了一個 Rest API,用它向用戶提供結果。我每天早上都使用 CRON 來做這個導入工作。現在我的問題是,如果有一批新數據到來,我想刪除現有數據并用新數據替換所有數據。我陷入了如何實現刪除和添加新數據部分的困境。我想到了創建一個臨時索引,然后用原來的索引替換它。但問題是我不知道導入何時結束并可以進行此索引切換。
1 回答

一只甜甜圈
TA貢獻1836條經驗 獲得超5個贊
您所追求的概念是索引別名?;竟ぷ髁鞒淌牵?/p>
將今天的數據導入到索引中
my-index-2019-09-16
(例如)。確保導入完成并且工作正常。
將別名指向新索引(這是索引之間的原子切換):
POST?/_aliases {? ???"actions"?:?[ ????????{?"remove"?:?{?"index"?:?"my-index-2019-09-15",?"alias"?:?"my-index"?}?}, ????????{?"add"?:?{?"index"?:?"my-index-2019-09-16",?"alias"?:?"my-index"?}?} ????] }
刪除舊索引。
您將在導入過程中將磁盤空間增加一倍,但否則這應該不會出現任何問題,并且只有在數據有正確的替換后才刪除數據。
- 1 回答
- 0 關注
- 113 瀏覽
添加回答
舉報
0/150
提交
取消