如何將 GCP 雲儲存桶元數據同步到數據庫?
我有大量對象,目前大約 100 萬個,儲存在 GCP 雲儲存桶中。對像以每天 1-2 千個的速度添加。我想有效地執行查詢以根據這些對象的元數據查找儲存桶中的對象,包括文件名中綴/後綴、創建日期、儲存類等。
Cloud Storage API 允許按文件名前綴 ( docs ) 進行搜尋,但回調需要幾秒鐘才能完成。我可以使用
gsutil
, like進行中綴查詢gsutil ls gs://my-bucket/foo-*-bar.txt
,但這更慢。此外,這些查詢被視為A 類操作,會產生成本。與其使用 Cloud Storage API 來搜尋我的儲存桶,我想我可以將儲存桶中所有對象的列表添加到 Bigtable 或 SQL 等數據庫中。數據庫應該與儲存桶的所有更改保持同步,至少在創建或刪除對象時,最好是在修改、儲存類更改等時。
實現這一目標的最佳方法是什麼?
第一步是為數據庫設計表和列,確定元數據的儲存方式,設計查詢語句和更新語句。
然後實施 Cloud Storage 觸發器以通知您編寫的服務以處理來自 Cloud Storage 的事件。Cloud Functions 和 Cloud Run 通常用於處理事件。作為處理事件的一部分,您的程式碼將更新數據庫。
觸發器正常工作後的最後一步是掃描整個儲存桶並使用每個 Cloud Storage 對象的元數據更新數據庫。
你的問題不包括細節。最好使用 number 語句,而不是在 GCP Cloud Storage Bucket 中儲存大量對象。對我來說,這意味著至少有數千萬個物體。您的問題不包括有關 Cloud Storage 中發生變化的速度或您需要執行的實際查詢的資訊。
請記住,Cloud Storage 是一個平面命名空間。層次結構(文件夾/目錄)的概念在軟體中被模擬。如果您將命名空間儲存在與儲存在 Cloud Storage 中相同的數據庫中,那麼性能可能不會更好。
我已經為 AWS、Google Cloud 和 Azure 多次實施了您的設計類型。除非您真的想要事件驅動系統的複雜性,否則我建議偶爾閱讀儲存桶並創建一個可以使用 grep、awk 等處理的簡單文本電子表格。