數(shù)據(jù)是怎么保存的?(如何理解游戲系列)


圖片來源:https://blog.engineyard.com/2013/maintaining-cross-platform-functionality-and-scalability

《排行榜是怎么算出來的?》一文里,我們把服務(wù)器想象成了一面很大的墻,墻上有很多抽屜。當(dāng)你在某一局游戲里玩了567分后,游戲會把你的名字和分?jǐn)?shù)一起,寄送給服務(wù)器。服務(wù)器收到之后,會打開一個空抽屜,把567這個數(shù)據(jù)放進(jìn)去,并在抽屜上貼一個標(biāo)簽,上面寫下你的名字。

這篇文章我們繼續(xù)討論一下這個抽屜具體是怎么回事,以便盡早擺脫這個比喻。

想象一下你走進(jìn)FBI的檔案室,這時候你看到了一個滿是抽屜的柜子,每個柜子上貼著一個通緝犯的ID,你打開一個貼著“通緝犯_007”標(biāo)簽的抽屜,在里面發(fā)現(xiàn)了一張表格,這張表格是這位通緝犯的簡歷:

昵稱:Jack愛放鹽,

性別:男,

籍貫:德克薩斯州,

政治面貌:清白,

追捕原因:走私、販賣咸豆腐腦

這張簡歷里,排在左邊的昵稱、性別、籍貫叫做鍵(Key),排在右邊的Jack愛放鹽、男、德克薩斯州這些叫做這個鍵所對應(yīng)的值(Value)。這張由許多鍵值對構(gòu)成的簡歷叫做一個文檔(Document)。每份文檔都貼著一個標(biāo)簽(例如“通緝犯_007”),以便索引,每個柜子像是一個數(shù)據(jù)集(Collection),而整個檔案室就像是一個面向文檔的數(shù)據(jù)庫。

回到《水果忍者》這個例子,假設(shè)我們還要記錄游戲者獲得某個分?jǐn)?shù)的時間,參考剛才FBI檔案室的做法,服務(wù)器在收到游戲者寄送來的數(shù)據(jù)包時,需要記錄如下一個文檔:

昵稱:Jack愛放鹽,

最高分?jǐn)?shù):567,

獲得時間:2014年5月4日

現(xiàn)在我們可以找一個叫做“排行榜”的柜子,把這個文檔存在它的某個空抽屜里,并把這位游戲者的ID(例如“游戲者_(dá)001”)作為標(biāo)簽貼在抽屜的外邊。除了“排行榜”這個數(shù)據(jù)集合以外,我們還需要其它的數(shù)據(jù)集,或許我們會有一個“玩家信息”的柜子,柜子的每個抽屜里都放著玩家的個人信息:

昵稱:Jack愛放鹽,

國家:美國,

簽名檔:咸還是甜,這是一個問題,

使用設(shè)備:iPhone7

所以,整個游戲的數(shù)據(jù)就是這么存儲的:數(shù)據(jù)庫里有很多個數(shù)據(jù)集,每個數(shù)據(jù)集里有很多個文檔,而一個文檔就是以某種格式(比如上面的鍵值對格式)來封裝、組織數(shù)據(jù)的這么一個東西。

當(dāng)然,這種面向文檔的數(shù)據(jù)庫并非存儲數(shù)據(jù)的唯一方式,我們還有更傳統(tǒng)的關(guān)系型數(shù)據(jù)庫,還有基于節(jié)點和邊的網(wǎng)絡(luò)型數(shù)據(jù)庫等等,我們甚至可以用自己定義的格式,把數(shù)據(jù)存儲在各種文件里;這些數(shù)據(jù)有可能是保存在你的iPhone上(單機(jī)游戲),也可能是保存在某臺服務(wù)器上(多人游戲);但不管以何種方式存在哪里,這些數(shù)據(jù)都是對游戲世界的一種描述,是對游戲狀態(tài)的一種持久化。

透過這些數(shù)據(jù),我們可以看到它們所描述的世界,數(shù)據(jù)越多,關(guān)于這個世界的信息就越詳細(xì)。當(dāng)數(shù)據(jù)多到一定程度后,我們就擁有了一個傳說中的“大數(shù)據(jù)”。這些數(shù)據(jù)是如此之龐雜,以至于其中許多變量之間的相關(guān)關(guān)系是無法一眼看出來的。這個時候,我們需要把這些有價值的相關(guān)關(guān)系挖掘出來。

等等,什么是相關(guān)關(guān)系,為什么我需要把相關(guān)關(guān)系挖出來?挖出來后能吃嗎?

先說說什么是相關(guān)關(guān)系。數(shù)學(xué)上的定義太枯燥,所以請各位再次容忍一下我的不嚴(yán)謹(jǐn)。設(shè)想你在剛才的FBI數(shù)據(jù)庫里取出了很多文檔,并逐個觀察每個文檔里一個叫做“地域”的鍵和另一個叫做“豆腐腦喜好”的鍵,假設(shè)你發(fā)現(xiàn)“地域”值為“北方”的文檔,“豆腐腦喜好”的值都是“咸”,而“地域”為“南方”的,“豆腐腦喜好”的值都是“甜”,那么我們就說這兩個變量是有相關(guān)關(guān)系的,下次再看到一個文檔地域為南,我們就能猜測它的豆腐腦喜好為甜。再比如游戲角色的級別越高,殺傷力也越高;一條微博的轉(zhuǎn)發(fā)量越多,被閱讀次數(shù)也多;一個物體受力越大,加速度就越大,等等。

盡管相關(guān)關(guān)系并不意味著因果關(guān)系,但它可以讓你去猜測變量之間可能存在的因果關(guān)系,此外,對相關(guān)關(guān)系本身的理解也有助于我們對周圍的世界獲得更加準(zhǔn)確的判斷,但這一切都有個前提,就是你的數(shù)據(jù)庫是沒問題的。

遺憾的是,我們常常有意無意地在自己的數(shù)據(jù)庫里做著數(shù)據(jù)挖掘:知乎用戶太裝逼,豆瓣用戶小清新,處女室友太糾結(jié),天蝎前任復(fù)仇心。地圖炮這個群攻型的拉仇恨主動技,正是以此為理論基礎(chǔ)的。如果你把我們的世界想象成一款游戲,那么每個人所掌握的數(shù)據(jù)都只是服務(wù)器上所有數(shù)據(jù)的一部分而已,由此得出的結(jié)論,難免有失偏頗。

下一篇《聲音是如何播放出來的?》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容