我知道這個問題在stackoverflow中多次被詢問。 我發佈這個問題,以找出什麼將是我的設計的最佳選擇。 我有我的工作細節以下架構。在內存關係數據庫
_unique_key varchar(256) NULL
_job_handle varchar(256) NULL
_data varchar(1024) NULL
_user_id int(11) NULL
_server_ip varchar(39) NULL
_app_version varchar(256) NULL
_state int(11) NULL
_is_set_stopped bool
我們正在做此表上進行了什麼操作:
- 因爲我們將有一個更新,並在此表10選擇查詢每個作業。所以我們需要高頻率進行讀寫。
- 有其通過做濾波器操縱此表中的許多應用:
- _unique_key
- _STATE
- is_set_stopped
- _USER_ID
- _data字段大小從5KB變化到1 MB基於應用程序和用戶的類型。
- 應用程序可以更新選擇性屬性。
解決方案,我們認爲:
MySQL的InnoDB的
我認爲MySQL將沒有足夠的規模,由於高讀寫需求。
的MySQL在存儲器表
問題的這種解決方案是
- 它不支持動態字段大小。 MEMORY表使用固定長度的行存儲格式。可變長度類型(如VARCHAR)使用固定長度進行存儲。來源http://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html
- 選擇....更新它將鎖定整個表。我不知道這會是一個問題。
Redis的
Redis的樣子喜歡一個不錯的選擇。但我認爲我的表對於鍵值緩存服務器並不好。
- 它只支持非常讓我們的數據類型集。我只能在列表中存儲字符串。我需要將字段存儲爲JSON或其他格式。
- 如果客戶想要更新特定屬性,他們需要下載完整的值,然後解析對象並重新映射到服務器。 可能是我錯了有沒有辦法做到這一點?
- 基於價值的過濾是不可能的。 可能是我錯了有沒有辦法做到這一點?
MySQL的InnoDB的上TMPFS文件系統
此看好。但是,在內存表中,它的規模不會與Redis或MySQL相似。
什麼是您的實際讀/寫速度要求? –
@Joachim Isaksson。 當前需求是1380每秒讀取和寫入一個完整的行,每秒6900讀取is_set_stopped列。 隨着服務器上作業數量的增加,計數將會增加。 –
爲什麼你認爲MySQL和InnoDB不能相關?你需要調好它...... –