2016-01-01 36 views
1

我需要在Redis 3.0.1中存儲32M記錄,每個記錄需要大約422KB。總共製作大約13GB的信息。Big Redis設置

該信息存儲在壓縮哈希列表的光盤中,並在微笑傑克遜中序列化。我正在使用Java 6,Jedis和AIX。

我有幾個問題:

  1. 這是否意味着,Redis的過程中需要13GB或RAM?
  2. 這是一個單一實例的可管理的大小,還是你去集羣安裝?我認爲我們最多可以有4臺服務器。這意味着重新審視整個項目和日期,所以請考慮其他管理對此問題的影響。
  3. 有更好的方式來存儲這個數據量嗎?

感謝

卡洛斯

+2

這是你的數學嗎? 422KB x 32,000,000 = 13504000000KB/1024 = 13187500MB/1000 = 13187GB – Alex

+1

您對數據的查詢模式很重要,因爲某些原因無法知道您是否需要內存(Redis)或磁盤(RDBMS/NoSQL )等等,而不知道如何查詢這些數據。任何這些東西都可以工作,但是每個都更適合特定的用例 – Alex

+0

@Alex另外,OP應該考慮gzipping值... –

回答

0

即使你使用Redis的集羣,所有的數據應該適合在內存中。 正如Alex所指出的那樣,有13TB的數據,如你所說限於4個服務器,這意味着每個服務器應該有超過4TB的RAM ...

此外,Redis以一種針對速度進行了優化,因此不會盡力減小尺寸。所以在實踐中可能需要超過13TB。 這就是爲什麼我不會在這種情況下推薦Redis,或者至少不是Redis的原因。 也許你應該考慮一個替代的NoSQL數據庫,它提供了快速的響應時間,儘管它將數據存儲在磁盤上,例如Couchbase(它使用Redis內置作爲緩存)。或者,如果您的用例允許,最簡單的解決方案就是將Redis緩存添加到當前體系結構中,而無需更改您使用的當前數據庫。它將戲劇性地提高對緩存中數據的訪問速度(但不會減少第一次訪問)。這取決於數據是否可能在短時間內被請求超過一次,或者不是。

+0

謝謝帕斯卡爾,我喜歡你的方法。但是,序列化器呢?我知道這不是Redis特有的,但我在做的是使用Jackson for Smile序列化Java pojos:http://wiki.fasterxml.com/JacksonForSmile –

+0

也許我錯過了一些東西,但我不明白爲什麼它會影響數據庫。 Redis不知道您存儲的數據類型。它只會給你回你插入的東西。 –

+0

當然可以。我只是在想一個更好的串行器會減少內存需求。但那將是另一個線索。感謝您的回答。 –