有大量 key=>value 形式的值對,如:xxxx=>aaaaaaa,值一旦建立就不會更改,數量的話後期會達到百萬層級,且經常會訪問到,並發不高,但要保證資料完整。用什麼方案去存比較好?
回複內容:
有大量 key=>value 形式的值對,如:xxxx=>aaaaaaa,值一旦建立就不會更改,數量的話後期會達到百萬層級,且經常會訪問到,並發不高,但要保證資料完整。用什麼方案去存比較好?
其實把問題再問得完整一點自然就有答案了
被訪問的方式,除了“經常會訪問到,並發不高”之外,訪問的形式是單key查詢還是查多條?資料是否有序?是否有類似“搜尋key首碼為foo”的需求?有“列出10個key”的需求?有“列出全部key”的需求?訪問是隨機key的還是集中在部分熱點key值?冷熱key值的比例大概怎樣?目前並發不高,是否需要考慮後期並發增加以後的方案?
資料完整,是否需要備份?key增加的頻率如何?新增加的key是否立刻需要能訪問?
key和value的長度分別是多少?百萬條1K是一條記憶體條,可百萬條1M就是一塊磁碟了
一般而言,條件不是特別極端的話,選單redis&備份,單mysql&備份,或是mysql+redis都行,各有長短,看你想要什麼和你手裡有什麼資源來找平衡點了
PS:別忘了mysql還分ssd上的mysql和機械磁碟上的mysql,也是各有優劣的
redis 比較方便 一般放記憶體裡 也可以放硬碟
並發不高,資料庫,百萬層級單表夠了;並發高的話,前面加一層memcached
從你的需求上面主要針對兩個點:值一旦建立就不會更改,以及保證資料完整。
資料庫是跑不掉的,目前在保證資料完整性方面資料庫是首選,同時也是最通用最值得信賴的。而針對數量的話後期會達到百萬層級,且經常會訪問到,並發不高這三個點可以考慮使用記憶體資料庫提供訪問效率,如redis,資料結構使用普通的k-v結構即可。
memcached
根據key雜湊到不同的檔案中, 根據訪問量來決定要不要加一層記憶體cache
用mysql儲存,然後前面加redis做緩衝。
只是Key-Value的話,可以不用放資料庫.找一些kv型的nosql就可以用.有持久化的話,可以考慮redis,或者SSDB之類的.Nosql上可以很容易做基於key的分區來解決你的資料容量和訪問量的問題.
直接用apc吧,這樣比較簡單!