請問裝備儲存方式問題

提供WOG各方面的技術問題,並提供最新path更新。

版主: 涅魂, 簫哥, 10度C~

stu6707
 
文章: 162
註冊時間: 2008-10-26 1:00 pm

請問裝備儲存方式問題

文章stu6707 » 2011-05-10 7:53 am

topic-t36531.html

我依照涅大的這篇把wog_item的儲存方式改成serialize array

並且把所有道具種類都加合在一起,存成一個欄位

代碼: 選擇全部
$temp_item_id=array(
0=>array(),
1=>array(),
2=>array(),
3=>array(),
4=>array(),
5=>array()
);
$item_id=serialize($temp_item_id);


處理item_out & item_in非常快 :) 也節省了很多複雜判斷,功能代碼可以由3,40行縮成3,4行,效率也提高了不少

不過我發現serialize的長度比原比的儲存方式還要長.....

serialize -> strlen -> 448
代碼: 選擇全部
a:10:{i:0;a:7:{i:317;i:1;i:324;i:1;i:166;i:8;i:318;i:1;i:9;i:1;i:167;i:1;i:361;i:1;}i:1;a:0:{}i:2;a:4:{i:88;i:1;i:222;i:1;i:66;i:1;i:77;i:1;}i:3;a:2:{i:308;i:1;i:128;i:24;}i:4;a:5:{i:139;i:1;i:140;i:1;i:141;i:1;i:253;i:4;i:242;i:1;}i:5;a:11:{i:455;s:1:"7";i:533;i:10;i:204;s:1:"1";i:258;i:82;i:598;s:1:"5";i:249;s:2:"37";i:226;s:2:"60";i:580;s:2:"10";i:575;s:1:"3";i:306;s:2:"92";i:456;s:2:"34";}i:7;a:0:{}i:8;a:0:{}i:9;a:1:{i:573;i:1;}i:10;a:0:{}}


orginal -> strlen -> 275
代碼: 選擇全部
317,324,166,166,166,166,166,166,166,166,318,9,167,361,88,222,66,77,308,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,139,140,141,253,253,253,253,242,455*7,533*10,204*1,258*82,598*5,249*37,226*60,580*10,575*3,306*92,456*34,573


長了62%..... :face19:

增加儲存大小來增加效能.... 這樣划得來嗎?

感謝解惑~




ETERNAL
 
文章: 2937
註冊時間: 2003-12-03 11:08 pm
性別: 男生

Re: 請問裝備儲存方式問題

文章ETERNAL » 2011-05-10 5:32 pm

能舉例一下嗎,沒用過serialize

資料變長嗎? 看是儲存在哪裡,如果是記憶體裡面的話沒什麼差,反正處理完就刪掉了


水色論壇 http://www.et99.net
簡恩峻分享

stu6707
 
文章: 162
註冊時間: 2008-10-26 1:00 pm

Re: 請問裝備儲存方式問題

文章stu6707 » 2011-05-11 5:57 am

是儲存在資料庫裡,我全部裝備類型合併成一個二維陣列,進資料庫前serialize
代碼: 選擇全部
$temp_item_id=array(
0=>array(2=>10,45=>2),
1=>array(),
2=>array(),
3=>array(4=>7),
4=>array(5=>2),
5=>array(3=>99)
);
$item_id=serialize($temp_item_id);

第一陣列是裝備類型,0是武器,5是道具

第二陣列是儲存裝備,像武器裡面有10個id2與2個id45的武器,道具是99個id3的道具

把陣列的key當成id,value當成數量

因為是用key與value來儲存,所以不能implode,一implode就完了.. 只能serialize

這是serialize完後的array
代碼: 選擇全部
a:10:{i:0;a:7:{i:317;i:1;i:324;i:1;i:166;i:8;i:318;i:1;i:9;i:1;i:167;i:1;i:361;i:1;}i:1;a:0:{}i:2;a:4:{i:88;i:1;i:222;i:1;i:66;i:1;i:77;i:1;}i:3;a:2:{i:308;i:1;i:128;i:24;}i:4;a:5:{i:139;i:1;i:140;i:1;i:141;i:1;i:253;i:4;i:242;i:1;}i:5;a:11:{i:455;s:1:"7";i:533;i:10;i:204;s:1:"1";i:258;i:82;i:598;s:1:"5";i:249;s:2:"37";i:226;s:2:"60";i:580;s:2:"10";i:575;s:1:"3";i:306;s:2:"92";i:456;s:2:"34";}i:7;a:0:{}i:8;a:0:{}i:9;a:1:{i:573;i:1;}i:10;a:0:{}}

這是原本的儲存方式,不過我把全部種類合併成一個字串
代碼: 選擇全部
317,324,166,166,166,166,166,166,166,166,318,9,167,361,88,222,66,77,308,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,139,140,141,253,253,253,253,242,455*7,533*10,204*1,258*82,598*5,249*37,226*60,580*10,575*3,306*92,456*34,573


長度分別為 448 and 275

serialize後的比較長 :face19: 多了62%,所以說資料庫容量也會增大......


附加檔案
1.png
1.png (48.24 KiB) 被瀏覽 8272 次


ETERNAL
 
文章: 2937
註冊時間: 2003-12-03 11:08 pm
性別: 男生

Re: 請問裝備儲存方式問題

文章ETERNAL » 2011-05-11 10:17 am

恩 原來如此,謝謝你的說明
v3裡面是可以這樣做,這樣的大小對資料庫影響有限

但v4好像沒辦法這樣做
v4的裝備格式是這樣
武器id:鑲嵌id,武器id:鑲嵌id,武器id:鑲嵌id

所以可能會有同樣的武器id,對應不同的鑲嵌id
例如:
10:1,10:2
2個id為10的武器,對應鑲嵌id為1跟2

但道具的部份跟v3一樣沒變


水色論壇 http://www.et99.net
簡恩峻分享

stu6707
 
文章: 162
註冊時間: 2008-10-26 1:00 pm

Re: 請問裝備儲存方式問題

文章stu6707 » 2011-05-11 2:16 pm

v4也是可以這樣儲存,合併在一起為三維陣列,如果分開就是二維

代碼: 選擇全部
$temp_item_id=array(
   類型id=>array(
      裝備id=>array(
         鑲嵌id=>數量
      )
   )
);
$item_id=serialize($temp_item_id);

或是分開
代碼: 選擇全部
$temp_item_id=array(
   裝備id=>array(
      鑲嵌id=>數量
   )
);
$item_id=serialize($temp_item_id);


不過這樣應該會更長......




ETERNAL
 
文章: 2937
註冊時間: 2003-12-03 11:08 pm
性別: 男生

Re: 請問裝備儲存方式問題

文章ETERNAL » 2011-05-11 3:14 pm

若可以到第三層以上那應該就可以了

我剛才查一下資料庫
格式是這樣 1500:73&13
武器ID:鑲嵌ID&強化ID

所以可能要改成這樣
代碼: 選擇全部
$temp_item_id=array(
   類型id=>array(
      裝備id=>array(
         鑲嵌id=>array(
           強化id=>數量
           )
        )
   )
);
$item_id=serialize($temp_item_id);



水色論壇 http://www.et99.net
簡恩峻分享

stu6707
 
文章: 162
註冊時間: 2008-10-26 1:00 pm

Re: 請問裝備儲存方式問題

文章stu6707 » 2011-05-11 3:46 pm

變成四維陣列了... 不知多維陣列會不會因為維數的增加而降低效率

不過要寫出對應四維陣列的item_in & out 應該蠻困難的..... 邏輯判斷會不少 @@

效率應該增加不了多少....




ETERNAL
 
文章: 2937
註冊時間: 2003-12-03 11:08 pm
性別: 男生

Re: 請問裝備儲存方式問題

文章ETERNAL » 2011-05-11 4:30 pm

@@ 不知道耶

我也沒試過
只是想到這麼多層,頭都大了
你有沒有興趣接受一個程式題目的挑戰?

不久前我看到的題目,到現在還沒解出來


水色論壇 http://www.et99.net
簡恩峻分享

stu6707
 
文章: 162
註冊時間: 2008-10-26 1:00 pm

Re: 請問裝備儲存方式問題

文章stu6707 » 2011-05-11 5:43 pm

好阿好阿 :)

最近沒事做,活動活動頭腦




回到 Online FF Battle-WOG官方聯盟推廣處

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 4 位訪客