簡體   English   中英

鎖定帶有大讀取的數據庫(Ruby-on-Rails / Heroku)

[英]Locking DB w/ Large Reads (Ruby-on-Rails/Heroku)

目前,我有一個運行在Heroku上的Web API,該API不斷地編寫我們從其他數據源收集的信息(當前大約有半GB的數據,並且增長非常快)。 我們希望在當前數據庫之上添加一個報告系統,可用於從數據庫中提取有用的信息。 問題在於,當我們運行報表時,我們正在鎖定數據庫,並且與數據庫進行通信的任何其他站點都將超時。 是否有人對解決此類問題有任何解決方案? Amazon RDS似乎在數據庫復制方面有一些有趣的東西,但是我不知道這是否可以解決我的問題。

任何建議將不勝感激。

謝謝

確保您正在運行innodb表,而不是舊的isam或myisam表-innodb具有行級鎖,可伸縮性更高。

確保在所有聯接/外鍵上都定義了索引...如果您執行的聯接沒有索引,它將被磨碎。 還要確保在適當的位置上有索引以適合您要搜索或排序的數據(只要它是多樣化的數據,而不是布爾值或少量值)

復制是另一個好主意,因為您可以將報告以只讀模式定位在輔助服務器上,並且一旦解鎖便會追上來。 半GB的數據應該還沒有真正鎖定它,所以我先來看一下索引和innodb。

一種解決方案是擁有數據庫的副本,以便您的正常流量進入主數據庫,而長時間運行的查詢在從屬數據庫上執行。 我不確定您對Heroku上的數據庫有多少控制權,但它們可能不支持復制。

但是,您是否考慮過Heroku設置可能是這里的問題? 除非您要執行非常復雜的查詢,否則500 MB的數據庫實際上不會出現性能問題。

如果您滿意使用MySQL而不是Postgres,則Engine Yard支持數據庫復制(盡管通常它不如Heroku容易使用)。

暫無
暫無

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

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