【開發(fā)日志補(bǔ)全計(jì)劃】64位對大家來說應(yīng)該足夠了
原作者:CCP Creber Cattus
原文:http://community.eveonline.com/devblog.asp?a=blog&nbid=1882
文章摘要:我們正在把物品ID編號系統(tǒng)改為使用64位的數(shù)據(jù)。這是一個(gè)“添加/更改/移除游戲功能”之外的巨大變動(dòng)。它主要發(fā)生在服務(wù)器端而且有點(diǎn)風(fēng)險(xiǎn)!:P 但是這個(gè)步驟對EVE的成長是很有必要的。
在過去的歲月中,我們已經(jīng)開始為使用64位數(shù)據(jù)而重新構(gòu)建了物品ID編號系統(tǒng)。
?
這意味著什么?
呃……游戲中每一個(gè)物品在數(shù)據(jù)庫里都有一個(gè)ID。物品不僅僅是放在你機(jī)庫里的東西,比如一堆凡晶石或者一艘烏鴉級,在你腦中的每一個(gè)技能、行星上的采集器、代理人、恒星系、星域、人物等等,都是物品的一種,總的來說幾乎一切事物都是EVE中的一個(gè)物品。在這次改動(dòng)之前,物品ID編號能夠達(dá)到2,147,483,647;而在這次改動(dòng)之后,這些ID能夠達(dá)到9,223,372,036,854,775,807,也就是2^63 – 1(沒錯(cuò),是63……我們幾乎從沒用過這個(gè)數(shù)字)。光看看這些數(shù)字,你就知道新的系統(tǒng)要好的多了吧!
?


?
為什么我們要做這個(gè)(說真的)?
多年前我們就已經(jīng)接近32位ID編號系統(tǒng)的上限。為了緩解這個(gè)問題,我們一直在做的是:在大家刪除自己的物品幾個(gè)月后,我們會(huì)把那些物品的ID回收再利用。例如,當(dāng)某個(gè)人把你的船打爆時(shí),在這個(gè)過程中所有被摧毀的物品都會(huì)移到系統(tǒng)設(shè)置的垃圾場;垃圾場里物品的ID會(huì)在一段時(shí)間后被系統(tǒng)回收,因此這些ID就可以被其他的物品重新使用。以前,回收再利用物品ID使我們相當(dāng)痛苦。有時(shí)指向一個(gè)特定物品ID的記錄變得無效了(所以那些個(gè)記錄里毛都沒有?。?dāng)有新的物品類型加入的時(shí)候,新的額外的信息列表可能不會(huì)在垃圾場清理腳本中被正確地處理,這樣一來就對我們造成了問題;2010年初,世界服務(wù)器的垃圾場清理腳本就自己崩壞過,讓我們很頭疼,還記得那次黑色星期五嗎?接著在看到Incarna預(yù)告片的時(shí)候,我們預(yù)計(jì)物品的增長會(huì)比現(xiàn)在更快,所以我們知道這個(gè)問題只會(huì)變得更大。物品的增長會(huì)用完目前所有可用的物品ID,而我們將沒有可回收再利用的物品ID,也沒有人可以再創(chuàng)建新物品。所以說,這次有了64位的ID系統(tǒng)后,我們就能停止回收再利用物品ID,這是件好事情……別誤會(huì),我不是討厭環(huán)境保護(hù),我只是不喜歡回收再利用。以后,我們不需要追蹤記錄哪些ID可用,還有一個(gè)額外的好處,就是當(dāng)物品創(chuàng)建時(shí),我們不需要為它另外做記錄。
那么,這樣做的風(fēng)險(xiǎn)是什么?
這個(gè)改動(dòng)剛開始一直在小的內(nèi)部測試服務(wù)器上運(yùn)行,隨后在大型的內(nèi)部服務(wù)器上運(yùn)行,再后來一直在公共測試服務(wù)器上運(yùn)行。盡管我們一直廣泛地測試這個(gè)改動(dòng),由于它涉及了游戲里面幾乎每一個(gè)系統(tǒng),還是有可能會(huì)造成影響。
在它正式上線后,我們會(huì)一直密切關(guān)注反饋信息、錯(cuò)誤記錄、錯(cuò)誤報(bào)告和總體的服務(wù)器運(yùn)行狀況,并且準(zhǔn)備對任何問題作出迅速回應(yīng)。所以上線日是“全體動(dòng)員”的一天,直到我們確信服務(wù)器正順利地航行在星辰大海中。
轉(zhuǎn)換全部現(xiàn)有數(shù)據(jù)需要很長一段時(shí)間,所以我們估計(jì)版本升級時(shí)會(huì)消耗大約十幾個(gè)小時(shí)的停機(jī)維護(hù)時(shí)間。這些時(shí)間花得很值,因?yàn)槲覀兠棵腌妼⒖梢垣@取183萬億個(gè)物品ID。:P