-
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%..... 增加儲存大小來增加效能.... 這樣划得來嗎? 感謝解惑~
-
ETERNAL
-
- 文章: 2937
- 註冊時間: 2003-12-03 11:08 pm
- 性別: 男生
-
由 ETERNAL » 2011-05-10 5:32 pm
能舉例一下嗎,沒用過serialize
資料變長嗎? 看是儲存在哪裡,如果是記憶體裡面的話沒什麼差,反正處理完就刪掉了
水色論壇 http://www.et99.net 簡恩峻分享
-
stu6707
-
- 文章: 162
- 註冊時間: 2008-10-26 1:00 pm
由 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後的比較長 多了62%,所以說資料庫容量也會增大......
- 附加檔案
-
- 1.png (48.24 KiB) 被瀏覽 8294 次
-
ETERNAL
-
- 文章: 2937
- 註冊時間: 2003-12-03 11:08 pm
- 性別: 男生
-
由 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
由 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
- 性別: 男生
-
由 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
由 stu6707 » 2011-05-11 3:46 pm
變成四維陣列了... 不知多維陣列會不會因為維數的增加而降低效率
不過要寫出對應四維陣列的item_in & out 應該蠻困難的..... 邏輯判斷會不少 @@
效率應該增加不了多少....
-
ETERNAL
-
- 文章: 2937
- 註冊時間: 2003-12-03 11:08 pm
- 性別: 男生
-
由 ETERNAL » 2011-05-11 4:30 pm
@@ 不知道耶
我也沒試過 只是想到這麼多層,頭都大了 你有沒有興趣接受一個程式題目的挑戰?
不久前我看到的題目,到現在還沒解出來
水色論壇 http://www.et99.net 簡恩峻分享
-
stu6707
-
- 文章: 162
- 註冊時間: 2008-10-26 1:00 pm
由 stu6707 » 2011-05-11 5:43 pm
好阿好阿 最近沒事做,活動活動頭腦
|