2009-05-30 64 views
2

我目前正在研究涉及查詢大量數據(數十億行)的問題,並且對這種類型的東西有點缺乏經驗,會喜歡一些聰明的建議。關於構建一個快速的分佈式數據庫的建議

數據/問題看起來像這樣:

  1. 每個表具有2-5鍵列和1個值列。
  2. 每一行都有一個唯一的鍵組合。
  3. 我需要能夠通過鍵的任何子集進行查詢(即key1 ='blah'和key4 ='bloo')。
  4. 如果能夠快速插入新行(如果該行已經存在,則更新該值)會很好,但是如果我可以慢慢做到這一點,我會很滿意。

目前,我有這個在一臺機器上的每個鍵定義單獨的索引上運行MySQL的實現,在所有的鍵(唯一的)一個指數和一個指數相結合的第一和最後一個鍵(這是目前最常見的我正在查詢,但可以很容易地改變)。不幸的是,這個速度很慢(而且索引最終佔用了磁盤空間的10倍,這不是一個大問題)。

我恰好有一大堆快速的計算機可供我使用(〜40),這讓這臺單機數據庫的令人難以置信的速度變得更加令人討厭。我想利用所有這些功能來快速創建這個數據庫。我已經考慮過構建一個分佈式散列表,但是這樣會很難僅查詢一部分鍵。看起來像BigTable/HBase是一個體面的解決方案,但我還不確信更簡單的解決方案不存在。

非常感謝,任何幫助將不勝感激!

回答

0

要指出顯而易見的事實:您可能是磁盤綁定的。

在某些時候,如果您在進行隨機查詢,並且您的工作集比RAM大得多,那麼您將受到磁盤可以執行的隨機IOPS數量的限制。您無法做到每個連接磁盤每秒幾十個子查詢。

如果你遇到了瓶頸,你可能會通過切換到SSD,更大的RAID或大量RAM而獲得更多的收益,而不是通過在許多計算機之間分發數據庫(這將主要只是讓你更多的最後兩個資源)