2011-03-24 47 views
2

有沒有辦法減少與mysql或python腳本相關的I/O?我正在考慮使用EC2,成本似乎不錯,除非我無法真正預測我的I/O使用情況,而且我擔心它可能會讓我不知所措。減少應用程序和數據庫上的I/O

我基本上開發了一個python腳本來解析數據並將其上傳到mysql中。一旦它在MySQL中,我做了一些相當沉重的分析(創建新的列,表...基本上大量的數據集基於數學和財務分析)。那麼是否有任何設計最佳實踐可以避免沉重的I/O?我認爲memcached將所有內容存儲在內存中,並從那裏訪問它,有沒有辦法讓mysql或其他腳本執行相同的操作?

我現在在另一臺主機上運行腳本,並且有2個ram的演出,但是我看到的ec2實例有8個演出,所以我想知道是否可以使用額外的內存來節省我一些錢。

+0

你的*大數據集*?有多大,它會適合內存嗎? – 2011-03-24 20:57:20

+0

嗨克里斯..我應該提到它應該適合。我的計劃是我的數據集可能會有2-3場演出,其中沒有任何東西在盒子上運行。如果有解決方案可行,我可以不斷提升自己的記憶力。 – Lostsoul 2011-03-24 21:01:40

回答

0

通過IO我假設你的意思是磁盤IO ...並假設你可以將所有內容放入內存舒適。你可以:

    您箱
  • disable掉†
  • 使用MySQL MEMORY表,而你正在處理,(或者考慮存儲在內存中使用Sqlite3如果你只使用數據庫SQL查詢的便利性)

另外:除非您使用EBS,否則我並不認爲Amazon會針對您的實例收取IO。 EBS比實例存儲慢得多,所以只有當你使用時需要這個持久性,即。而不是在處理數據時。

†可能壞主意

+0

我懷疑禁用交換會減少磁盤I/O ......雖然這可能取決於您的操作系統......但是不依賴於您的操作系統是禁用交換意味着您的應用程序會在您運行時崩潰**出內存...恕我直言,這不是一個好主意......如果你的系統使用了很多交換空間,增加更多的內存。或者加快速度(SSD)交換...但不要禁用它,它在那裏是有原因的;-) – Carpetsmoker 2011-03-24 21:33:54

+0

你沒有錯,它崩潰了!,我只是爲了最大的效果......點二個單獨會綽綽有餘。 – 2011-03-24 21:46:00

0

您沒有真正指定它是寫入還是讀取。我的猜測是,你可以在一個ramdisc中的mysql實例中完成這一切(Linux下的tmpfs)。

像ALTER TABLE這樣的操作和複製大數據最終會產生大量的IO請求,因爲它們會移動大量數據。這與您剛剛獲得大量隨機(或更可預測的查詢)並不相同。

如果是批量操作,也許你可以完全在tmpfs實例中完成。

可以在機器上運行多個mysql實例,在tmpfs上啓動實例非常簡單 - 只需在tmpfs中使用帶有datadir的mysql_install_db,然後使用適當的參數運行mysqld。堅持在一些shell腳本,你會得到它啓動。因爲它在ramfs中,所以它不需要爲緩衝區使用大量內存 - 只需將它們設置得相當小。