PDA

View Full Version : [Guide] Tối ưu Ranking giảm lang



TitanRain
19-07-08, 01:18 AM
Web MU nặng nhất là phần Ranking.
"Nặng" ở đây không có nghĩa là kích cỡ file lớn mà là traffic đến máy chủ lớn

Bạn hình dung thế này:
Với 1 trang xếp hạng hiển thị thông tin 20 nhân vật gồm các thông số:
-Tên
-Level
-Reset
-Money
-PK
-Trạng thái online
Đối với 5 thông số đầu tiên đều có trong table character nhưng thông số thứ 6 thì nằm trong 1 table khác

Như vậy để hiển thị thông tin cho 1 nhân vật trên bảng xếp hạng
trong câu lệnh SQL cần ít nhất 2 câu truy vấn để lấy thông tin

- Đầu tiên trình chủ web sẽ biên dịch mã nguồn, kết nối SQL server
- SQL thẩm định quyền truy xuất dữ liệu
- Kiểm tra ngữ pháp câu lệnh
--> sau đó sẽ tạo ra một execute plan để thực thi

quá trình này diễn ra rất nhanh.
Nhưng mấu chố ở chỗ. Nếu có quá nhiều lần thực hiện thao tác như vậy thì lưu thông trên mạng sẽ lớn. vì đa phần MU server sử dụng ADSL nên điều này càng làm mạng trì chệ

Nói vậy là đủ rồi. Mình xin đưa ra 1 giải pháp cho vấn đề này


1. Sử dụng Stored Procedure để thực thi lệnh

Sau đây là ví dụ cụ thể đối với 1 trang ranking lấy ra thông tin 100 nhân vật

Vào SQL Enterprise Manager
Chọn Database MuOnline
Chọn Stored Procedure
Click phải chuột vào bên phải bảng chọn New Stored Procedure
Chèn lệnh sau rồi save vào


/*
STATUS:
0: FALSE
--------------------------------
9: OK
*/

ALTER PROCEDURE GC_Ranking(
@Status tinyint=0 Output,
@Result varchar(1000)='' Output
)
AS
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
ELSE
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>

<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
GO
Còn đây là mã nguồn trang web Ranking.asp


'===================Khởi tạo lệnh ADODB

SET conn = Server.CreateObject("ADODB.Connection")
connstr = "driver={sql server};server=mutitan.net,4323;uid=sa;pwd=123456; database=MuOnline"
conn.open connstr

set adoCmd = Server.CreateObject("ADODB.Command")
set adoCmd.ActiveConnection = conn

adoCmd.CommandText = "GC_Ranking"
adoCmd.CommandType = adCmdStoredProc

<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
adoCmd.Execute
adoCmd.Close

<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>

SET adoCmd = Nothing
conn.Close
SET conn = Nothing

Response.write("<table><tr><th>Name</th><th>Reset</th></tr>"&adoResult&"</table>")


2.Phân tích code
Đoạn dưới chứa thông tin username và pass để kết nối SQL server


SET conn = Server.CreateObject("ADODB.Connection")
connstr = "driver={sql server};server=mutitan.net,4323;uid=sa;pwd=123456; database=MuOnline"
conn.open connstr




set adoCmd = Server.CreateObject("ADODB.Command")
set adoCmd.ActiveConnection = conn

adoCmd.CommandText = "GC_Ranking"
adoCmd.CommandType = adCmdStoredProc

Khai báo gọi GC_Ranking


<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
adoCmd.Execute
adoCmd.Close

<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>

TitanRain
19-07-08, 01:30 AM
3.Phân tích mở rộng
Thường thì một ngày mỗi người chơi theo dõi Ranking liên tục trong quá trình chơi và mỗi khi Reset (Giống như theo giõi chứng khoán ý:D)

Nhưng chúng ta muốn làm chậm lại quá trình Refresh dữ liệu.
Vì mỗi lần xem trang Ranking lại hàng loạt request đến server được triệu gọi

Tôi xin trình bày cách lưu thông tin bảng xếp hạng vào file .xml ở trên host đặt web.
Mỗi giờ sẽ cập nhật thông tin từ máy chủ 1 lần, còn trong thời gian dưới 1 giờ sẽ hiển thị cho user thông tin đã lưu trong file .xml

Demo: <b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b> (Đây là trang chủ)
Đây là các file đã được lưu trên host:
- <b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
- <b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
- <b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
- <b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
- <b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>

- ....
Tất nhiên quá trình kiểm tra và tạo mới file .xml diễn ra tự động

vietpro8x
19-07-08, 01:32 AM
Gãi đúng chỗ ngứa
Thanks a lot

giangleloi
19-07-08, 06:56 AM
thế thì còn jì bằng nhờ???????^^

Secondhand™
19-07-08, 08:44 AM
Cho mình hỏi thêm chút dc hok bạn ! là vấn đề của bảng xếp hạng Guild đó ! Nó khó chiệu wua à :-s

TitanRain
19-07-08, 05:21 PM
Bạn post code lên mình xem cho

Secondhand™
30-07-08, 11:06 AM
- Bạn có thể cho mình xin cái Mod_Ranking.asp của mu phố keo dc hok ! Mình sài soure của bạn đó mà . Hồi trước anh hà sell

muonline3k
20-08-08, 02:43 PM
anh có thể hướng dẫn kỷ hơn một chút được ko?
mình copy toàn bộ cái ranking.asp sao nó ko dc

tinhhack
10-10-08, 09:22 PM
ui' giowf sao khoong cos cais tool gox tieengs vieetj vaayj, err

tui thi dung cach khac, xai web 08, them vai dong code de han che xem xep hang:
cos nghia la chi xem duoc xep hang vao 1 ngay nhat dinh trong tuan thoi, nhung ngay khac ko xem duoc, "lag 1 ngay con hon lag 1 tuan ^^" voi lai nhu the nay se tao cam giac hoi hop cho nguoi choi " ko biet minh xep thu may roi nhi?" giong may game online lo'n 1 tuan xep hang 1 lan hoho

daica72
02-05-09, 08:51 PM
các bạn ơi sao mà mình cài song mu rồi mà sao khi mình biên qua các nạp khác thì lại ko dc mong các ban chi giáo hoậc liên lạc YM nhatdasai de chi giáo cám ơn rất nhiều

canhphuong
05-05-09, 11:30 PM
bai viet cua ban rat hay
minh cung vua cho online mot mu SS4 co gi cac ban tham gia va gop y cho minh nha
web Mu cua minh day <b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>