數(shù)據(jù)庫(kù)選擇歷程
我們的項(xiàng)目一直使用MySQL作為數(shù)據(jù)庫(kù). 無(wú)論是從C++的服務(wù)器, 還是到Golang服務(wù)器. 當(dāng)年搞服務(wù)器時(shí), 看大部分人都是用SQL(MySQL/SQLServer), 而Mongo感覺(jué)像邪教一樣, 再加上服務(wù)器還是Linux比較正統(tǒng), 所以果斷選了MySQL.
剛開(kāi)始感覺(jué),游戲服務(wù)器的數(shù)據(jù)存儲(chǔ)其實(shí)應(yīng)該是蠻神圣的過(guò)程. 那么多的數(shù)據(jù), 需要按照MySQL一樣分表, 分字段存儲(chǔ), 為了查詢, 還要乖乖的學(xué)一下SQL的語(yǔ)法
就這么折騰了幾年. 在云DB的蒙蔽下, 一直認(rèn)為MySQL就是做游戲服務(wù)器存儲(chǔ)的專(zhuān)業(yè)技術(shù). 分布式和存儲(chǔ)壓力一定交給云DB來(lái)做. 直到真正試了下NoSQL在游戲服務(wù)器開(kāi)發(fā)里的思路.
用了Golang, 才發(fā)現(xiàn)同步寫(xiě)邏輯是多么的優(yōu)雅.
用了NoSQL系列的數(shù)據(jù)庫(kù), 才意識(shí)到: 游戲服務(wù)器的數(shù)據(jù)存儲(chǔ)和游戲服務(wù)器的存盤(pán)兩個(gè)概念差異其實(shí)蠻大的.
MySQL中, 背包其實(shí)跟角色完全沒(méi)有關(guān)系, 只是通過(guò)1個(gè)角色id映射過(guò)去, 人為的割裂了數(shù)據(jù)的關(guān)聯(lián)性. 還硬生生的整出個(gè)概念叫結(jié)構(gòu)化查詢讓你學(xué)
NoSQL中, 只是把數(shù)據(jù)庫(kù)當(dāng)成是存儲(chǔ)點(diǎn), 每個(gè)角色的數(shù)據(jù)是完整的一塊. 里面怎么存隨你便. 每個(gè)角色通過(guò)id來(lái)查詢, 其他都沒(méi)有了
于是乎, 游戲開(kāi)發(fā)變得異常簡(jiǎn)單. MySQL角色進(jìn)門(mén)查詢4~5次才能搞定要的數(shù)據(jù).而NoSQL一口氣全查出來(lái), 存盤(pán)也無(wú)需增量, 直接存盤(pán)就可以了
所以現(xiàn)在覺(jué)得, NoSQL的思路對(duì)于游戲服務(wù)器存儲(chǔ)來(lái)說(shuō)簡(jiǎn)直是完美的!
轉(zhuǎn)載請(qǐng)注明: 戰(zhàn)魂小筑http://www.shnenglu.com/sunicdavy
NoSQL數(shù)據(jù)庫(kù)方案對(duì)比
NoSQL下實(shí)現(xiàn)方案很多, 游戲常用的就這么3家: mongo, redis, memcached
下面說(shuō)下優(yōu)缺點(diǎn)
mongo
磁盤(pán)映射內(nèi)存數(shù)據(jù)庫(kù)
value為document類(lèi)型, 基于BSON的value序列化
應(yīng)用場(chǎng)景:
適合多寫(xiě)少讀, 例如日志和備份
轉(zhuǎn)載請(qǐng)注明: 戰(zhàn)魂小筑http://www.shnenglu.com/sunicdavy
redis
內(nèi)存數(shù)據(jù)庫(kù)
單核
value限制512M
多種value類(lèi)型, 游戲用途使用私有的序列化協(xié)議(例如protobuf)
支持落地(bgsave)
用戶: 新浪, 淘寶, Flickr, Github
應(yīng)用場(chǎng)景: 適合讀寫(xiě)都很高, 數(shù)據(jù)處理復(fù)雜等
轉(zhuǎn)載請(qǐng)注明: 戰(zhàn)魂小筑http://www.shnenglu.com/sunicdavy
memcached
內(nèi)存數(shù)據(jù)庫(kù)
多核
value限制1M
不支持落地(持久化)
用戶: LiveJournal、hatena、Facebook、Vox
應(yīng)用場(chǎng)景: 動(dòng)態(tài)系統(tǒng)中的緩沖, 適合多讀少寫(xiě)
轉(zhuǎn)載請(qǐng)注明: 戰(zhàn)魂小筑http://www.shnenglu.com/sunicdavy
個(gè)人評(píng)價(jià)
memcached 適合網(wǎng)頁(yè)緩沖, 游戲里很少有使用. 目前只有騰訊云支持云memcached
redis非常適合游戲的內(nèi)存數(shù)據(jù)庫(kù), 但是落地策略會(huì)比較復(fù)雜, 需要具體分析, 可以參考后面的鏈接看下云風(fēng)怎么處理這個(gè)問(wèn)題
mongo數(shù)據(jù)庫(kù)在早期還是非常不錯(cuò)的NoSQL的數(shù)據(jù)庫(kù). 工具比較方便, 可視化. 但是隨著近年來(lái)游戲的并發(fā)度越來(lái)越高, 所以為了一次到位, 很多人還是選擇了redis
下圖參考自知乎問(wèn)題. 鏈接在后面有提示, 若侵權(quán)請(qǐng)聯(lián)系刪除
轉(zhuǎn)載請(qǐng)注明: 戰(zhàn)魂小筑http://www.shnenglu.com/sunicdavy

參考鏈接:
談?wù)勀澳盃?zhēng)霸在數(shù)據(jù)庫(kù)方面踩過(guò)的坑( Redis 篇)
http://blog.codingnow.com/2014/03/mmzb_redis.html
轉(zhuǎn)載請(qǐng)注明: 戰(zhàn)魂小筑http://www.shnenglu.com/sunicdavy
Memcache,Redis,MongoDB(數(shù)據(jù)緩存系統(tǒng))方案對(duì)比與分析
http://blog.csdn.net/suifeng3051/article/details/23739295
http://www.zhihu.com/question/31417262