2014-06-17 54 views
4

我們正試圖找出在實時網站上處理緩慢數據庫的最佳解決方案。使用網絡應用程序處理緩慢數據庫的策略

基本的系統架構是這樣的:

  • 慢(一些讀取和寫入大多數是快速的,別人拿多秒)的Postgres數據庫。我們無法控制這一點。
  • 訪問Postgres數據庫的單片離線系統。我們無法控制這一點。
  • 可以訪問Postgres數據庫的快速內部服務器。我們可以爲此服務器開發和安裝軟件。
  • 運行LAMP堆棧的快速Web服務器不能訪問Postgres數據庫,但可以訪問內部服務器。我們可以爲這個服務器開發軟件。
  • 快速MySQL數據庫(s)可以被任何東西訪問。我們完全控制了這一點。

我們正在開發一個新的Web應用程序使用的Symfony 2.在Web服務器上運行

我們最初的計劃是建立一個RESTful API坐內部服務器,它是由Web應用程序所消耗的。我們面臨的主要問題是網絡應用程序的速度受到Postgres數據庫的速度的限制,這對用戶來說是不可接受的。

有誰知道任何策略來解決這個速度問題?

緩存是顯而易見的解決方案,我們當然可以討論數據的當前使用情況,但在某些情況下,它必須絕對保持最新狀態。例如,如果用戶保存了一些更改,這些更改應立即顯示。我們已經考慮讓API擁有自己的快速數據存儲,它從Postgres異步更新。然後,我們可以在這個快速存儲器上執行所有讀取操作,同時向寫入和Postgres寫入數據。數據中的擔心當然是一致的,並且會增加系統的複雜性。

我們正在探索使用JSON-LD來表示數據,因爲它非常適合我們正在使用的數據,並且使用標準(儘管是比較年輕的標準)應該可以緩解前進中的任何主要體系結構更改,這可能會好的發生。由於它可以直接放入文檔存儲中,因此可能會簡化該過程。

我們這裏的關鍵目標是:

  • 提供良好的體驗給用戶。
  • 創建一個可維護且直觀易懂的系統。

任何建議或建議將是最受歡迎的!

回答

1

我覺得要問的主要問題是:爲什麼Postgres DB太慢了嗎?從你的解釋中,也不清楚所有這些系統在做什麼以及依賴/要求是什麼。例如,需要PostgresDB中的數據是最新的?這是主要的數據庫嗎?它是整體離線系統的集成數據庫嗎?

如果您無法更改緩慢的Postgres數據庫,它必須是最新的到分鐘和網站依賴於它,並且必須是最新的(在某些情況下),以及您有問題因爲那是不可能的。如果Postgres數據庫不需要一分鐘的時間,因爲它只是被離線應用程序使用,你可以更新該數據庫異步並使用MySQL數據庫,以提供必要的性能。

鑑於您計劃使用JSON-LD,我很想聽聽您正在構建的系統的更多信息。你能分享一些更多的信息嗎?

+0

感謝Markus。把事情分到最後或者不是問題。我們認爲我們已經制定出了一個適用於我們用例的戰略,這與您所描述的幾乎相同;通過異步更新MySQL數據庫以經常從Postgres獲取更改,但不一定最新。然後,我們將API寫入MySQL DB和Postgres,以便這些更改最新。 我可能能夠告訴你更多關於我們的JSON-LD使用方法:-) –

1

嗯,你可能會使用couchdb。沙發的前提是它最終是一致的,但是您需要使用本地副本來處理數據,並立即返回到應用程序,然後儘可能快地更新中央存儲庫。

它也是開箱即用的RESTful。唯一需要橋接的是postgres - couchdb連接。

+0

謝謝Gabor,我會讀一下CouchDB。 –

0

例如,如果用戶保存了一些更改,這些更改應該立即顯示。

這也緩存,所以當用戶更新一些數據,高速緩存(現在包含舊數據)到期(或Etag的或手動刪除緩存)

相關問題