簡體   English   中英

在NodeJS中存儲很少修改的數據庫值的最佳實踐是什么?

[英]What is the best practice for storing rarely modified database values in NodeJS?

我有一個可以與Salesforce一起使用的節點應用程序,可以處理一些不同的事情。 其中一項功能是讓用戶填寫表格並將其推送到Salesforce。

該表單具有一個下拉列表,因此我查詢salesforce以獲取可用下拉列表,並通過res.locals將其提供給我的表單。 目前,我是通過一些中間件獲取這些值的,將它們存儲在用戶會話中,然后檢查是否設置了會話值,如果沒有使用,請使用它們,查詢salesforce並將其引入。

這行得通,但是這意味着Mongo中的每個用戶會話數據都擁有一大堆選擇列表值(它們對於所有用戶而言都是相同的)。 我很少在Salesforce方面更改值,所以我想知道是否存在“正確”的方法來將這些值存儲在我的應用程序中?

我可以將它們放入Mongo集合中,並在它們更改時觸發它們的手動刷新。 我可以在Mongo中使它們過期(但實際上,如果確實需要更改它們,這是因為有人需要立即訪問新值),因此不確定這是否最有意義...

將它們存儲在每個人的會話中是解決此問題的最佳方法,還是我應該做些其他事情?

為了快速回答您的問題,您可以將它們添加到單個對象中(而不是會話數據(按用戶))。 但不確定如何管理它們的壽命(即,在它們改變時再次拉動它們)。 可以使用一個簡單的腳本文件來實現單例,該腳本文件需要返回一個簡單的對象...

但是,如果我要做這樣的事情,我會做不同的事情:

  1. 我將創建一個API端點來返回您的列表數據(可能給它一個查詢參數以返回不同的列表)。

如果您可以承受短時間內過時的數據,則可以編寫您的API,以便它返回已緩存的響應(http緩存,短時間)

  1. 如果您的數據必須實時更新,則您的API應該在API的響應中返回eTag。 eTag標頭基本上就像是數據的校驗和,一個好的校驗和應該是集合中所有記錄的“最后更新日期”。 收到請求后,您檢查是否具有包含校驗和的標頭“ if-none-match”,此時,您對數據庫執行“精簡”調用以僅提取校驗和,如果匹配則返回304 http代碼(未修改),否則,您實際上會提取所需的全部數據並返回它(與響應eTag中的新校驗和一起)。 基本上,您是讓瀏覽器進行緩存...

請注意,您還可以在第1點和第2點中組合緩存並一起使用。

此處的更多資源: https : //devcenter.heroku.com/articles/increasing-application-performance-with-http-cache-headers https://developers.facebook.com/docs/marketing-api/etags

暫無
暫無

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

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