簡體   English   中英

在 GAE 上進行 Sequelize 數據庫遷移的最佳實踐

[英]Best practice for Sequelize database migrations on GAE

我在 Google App Engine 上使用 Express、Postgres 和 Sequelize 構建了一個應用程序,但在運行較長時間的遷移時遇到了一些問題。 這種遷移只是將我的一個大表中的數據轉儲到彈性搜索中。

截至目前,我一直在預啟動命令中運行我的遷移

npm i && sequelize db:migrate

但我注意到由於實例的自動擴展特性,Google App Engine 一直在一遍又一遍地運行我的遷移。 運行遷移有更好的做法嗎? 有沒有辦法只運行一次此遷移並防止僅對預啟動命令進行自動縮放?

首先有必要了解 App Engine 如何處理縮放類型:

  • 自動擴展根據請求率、響應延遲和其他應用程序指標創建實例。 您可以為這些指標中的每一個指定閾值,以及始終保持運行的最小實例數。

  • 當您的應用程序收到請求時,基本擴展會創建實例。 當應用程序空閑時,每個實例都將被關閉。 基本擴展非常適合間歇性工作或由用戶活動驅動的工作。

  • 手動擴展指定無論負載水平如何都連續運行的實例數。 這允許復雜初始化和應用程序等任務隨着時間的推移依賴 memory 的 state。

我建議您選擇手動擴展以設置您需要/想要的具體實例數量,或者,如果您要使用自動擴展,請注意限制(最大/最小(空閑)實例)以設置特定限制。 但是,您可以選擇最適合您要求的配置。

話雖如此,無論您選擇哪種縮放方法,每次 GAE 縮放時似乎都會重新啟動腳本,或者是腳本告訴您的應用程序一遍又一遍地重復該過程。 如果您分享有關如何執行腳本及其作用的詳細信息,以便獲得更好的視角,這可能會很有用。

此任務的可能解決方法是將遷移腳本本身的功能移植到 GAE 應用程序中受管理員保護的處理程序的主體中,這可以通過對特定 URL 的 HTTP 請求觸發。

我認為可以將可能長時間運行的遷移操作拆分為一系列較小的操作(使用推送任務隊列),對 GAE 更友好。

另外,我建議你看看這個線程

However I understand you want to migrate your data from PostgreSQL to one Elasticsearch table, I found out this tutorial where is recommended create a CSV file from your PostgreSQL database, then you can pass the data from CSV to the Json format, this is because you可以使用 Elasticdump 服務將您的 Json 文件格式化為 Elastic Search 文檔,這些步驟在 Node JS 上,因此您可以根據數據大小在 App Engine 或 Cloud 函數中創建腳本並執行導入,例如:

# import
node_modules/elasticdump/bin/elasticdump --input=formatted.json --output=http://localhost:9200/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM