1

我有問題,我需要你的幫助。Heroku中的Play數據庫時間訪問框架

我正在用java的Play Framework v1.2.4,我的服務器上傳到Heroku服務器上。

所有的工作都很好,我可以訪問我的數據庫並且一切正常,但是當我對數據庫進行一些保存時,我遇到了實驗麻煩。

我有一種方法在數據庫中多次存儲數據並將通知返回給手機。我的問題是,通知在數據庫完成之前到達以保存數據,因爲當它到達時,我向服務器請求更新數據,並在沒有最後更新的情況下返回數據。幾秒鐘後,我試圖再次更新,數據顯示正確,因此我認爲存在時間訪問問題。 這個想法是,當數據庫結束保存數據時,服務器發送通知。

我不知道這是否是因爲我使用的Heroku服務器的免費版本,但我想在購買前確定。

回答

2

一般來說,對雲數據庫的所有請求總是比在本地計算機上運行的要慢。即使只是簡單地詢問在您的計算機上只需0.0001秒就可以在雲中慢到0.5秒。原因很簡單,雲提供商使用共享數據庫+(地理位置)複製,這只是......不能與僅由同一臺計算機上的一個程序訪問的數據庫進行比較。

還請記住,免費Heroku DB plans不提供任何數據庫緩存,這意味着每個查詢都直接從雲端獲取。

因爲我們不知道你的應用程序,所以很難說什麼是瓶頸,幾乎肯定你至少有3種方法來解決你的問題。他們不是替代品,可能你需要使用(或至少檢查)所有這些。

  1. 您需要風險一些基本的計劃,看看事情的付費版本改變,也許這將是配不上你,也許不是。
  2. 重新設計您的應用程序以減少查詢次數。例如,發送10個查詢以選擇10個不同的行,您需要發送一個查詢,該查詢一次選擇所有10條記錄。使用Play's cache API來避免重複選擇同一組數據。舉個例子,如果你有一些很少變化的類別,但是你需要每篇文章的類別樹,你不需要每次從數據庫獲取類別,而是可以在緩存中存儲一​​個類別列表,所以你會只需要使用一個請求來獲取文章的內容(這可以緩存一段時間,以及...)
+0

哦,恐怕我不能支付我的開發應用程序的服務器,所以我已經在我的服務器中有一個雙線程,並且我通過發送通知來休眠線程,以便給移動應用程序足夠的時間進行更新而不會出現問題。我知道這不是最好的解決方案,但現在已經足夠了。謝謝您的幫助! –