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>
"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>