P H P  V I E T  N A M  P O R T A L
Xin chào, Khách. Vui lòng đăng nhập hoặc đăng ký tài khoản.
Bạn đã quên email kích hoạt?






     Trang chủ | Download | Tự học PHP | Kho tư liệu | Diễn đàn
Trang: [1]
  In  
Tác giảChủ đề: Sử lý database quá lớn  (Đã đọc 6795 lần)
diepdo_us
PHP Starter
*
Posts: 4


Xem hồ sơ
« on: July 21, 2010, 12:48:40 AM »

mình dùng mysql và php nhưng giờ đây dữ liệu của mình quá nhiều.load trang web rất chậm.ai có cách nào giúp mình với.code thì mình đã tối ưu ok rồi.nhưng giờ muốn sử lý ở data mong các ban giúp mình nghĩ hướng giải quyết.thank các bạn trước.à quên với điều kiện không đập database đi
« Last Edit: July 21, 2010, 12:57:05 AM bởi diepdo_us » Logged
nothing1306
Mãi PHP chiêu thân đây... mại vô, mại vô...
Global Moderator
PHP Intermediate
*****
Posts: 214

nothing1306
Xem hồ sơ Email
« Trả lời #1 on: July 21, 2010, 05:25:34 AM »

Mình nghe nói dùng cache sẽ nhanh hơn, nhưng không hiểu có cache và không có cache khoảng cách chênh lệch là bao nhiêu?
Mong bà con giúp đỡ...
Logged

Bạn có một ít tiền, bạn muốn dùng những đồng tiền ít ỏi đó cho những công việc to lớn, vĩ đại, có ý nghĩa, click chuột vào đây: http://sechia.vn/diendan/vi-cong-dong/
Bạn có một ít tình, bạn muốn tìm kiếm 1 người yêu lý tưởng, click chuột vào đây: http://phpvn.org/index.php?action=profile;u=6580
Neexare
PHP Starter
*
Posts: 24


Xem hồ sơ
« Trả lời #2 on: July 23, 2010, 02:33:52 PM »

Nếu nói về Mysql thì có nhiều cách tối ưu lám. Bạn có thể dùng "index" ví dụ, hay là "Query cache", hay denormalization. Mysql rất là lẹ, database cũa bạn lớn tới cở nào mà lại chậm đi vậy?
Logged
cmxq
Administrator
PHP Intermediate
*****
Posts: 1330


Xem hồ sơ Email
« Trả lời #3 on: August 23, 2010, 08:02:04 PM »

Tớ thì chơi theo cách khác: Với 1 website có DB lớn và thời gian cập nhật dữ liệu không đến nỗi liên tục thì tớ tạo ra một bảng cache và kết hợp với 1 thư viện xử lý bảng cache đó tương tự như memcache. Tớ xử lý theo quy tắc: Những cái nào ít thay đổi và thường xuyên phải hiển thị thì sẽ xử lý hoàn tất và lưu mã HTML vào bảng cache, lúc nào cần dùng thì lôi luôn từ bảng cache ra. Một website với hơn 400 ngàn bản ghi, hơn 200 ngàn lượt truy cập 1 ngày mà vẫn chạy ầm ầm.
Logged

Trở về phpvn.org
thienha20
PHP Intermediate
*
Posts: 102


Xem hồ sơ
« Trả lời #4 on: November 07, 2010, 10:06:28 AM »

nếu code bạn dùng mysql_connect trong thì bạn nên chuyển qua dùng adodb thằng này nó tôi ưu việc kết nối database hơn. Nếu dữ liệu quá nhiều trong 1 table nào đó thì bạn chia table đó ra thành nhiều table con việc này đòi hỏi phải sửa lại code. Đồng thời nên tối ưu lại câu lện truy vấn trong code của bạn. Những câu lện truy vấn mốc database lên dư thừa rồi join với 1 số dòng thôi như thế cũng làm chậm đi quá trình truy vấn
Logged
billythekids
PHP Intermediate
*
Posts: 359

billyboxviet@hotmail.de billythekids billythekidsde@yahoo.com
Xem hồ sơ
« Trả lời #5 on: November 20, 2010, 03:22:03 AM »

mình đồng ý với thienha20 về phần sau tức chia nhỏ db ra. Bên mysql mình kông rõ nó có làm dc ko nhưng ben mssql ta có thể tối ưu hoá bằng cách chia ra thành nhiều table rồi mỗi table nằm trên một ndf secondary database file chỉ cái chình chứa một số dữ liệu qua trong thì nằm trên table chính thôi.
Ví dụ thê này nhé:
Mình cần chứa bài viết của toàn bộ users
Vay thì chia ra thành 2 table
Table 1 ( chính ) chứa: postID, userID, tile, datePost
Table 2 (phụ) : chứa postID, content
Như vậy việc linking chứa 2 table sẽ nhẹ hơn rất nhiều khi cần thao tác search ngày post, tiêu đề, hay người post. còn khi kiếm nội dung thì chỉ cần query lại vào thằng table 2 để kiếm và lấy lại postID nó sẽ nhanh hơn.
Logged
datgs
PHP Starter
*
Posts: 4


Xem hồ sơ Email
« Trả lời #6 on: July 07, 2011, 11:47:45 PM »

Quan trọng là dữ liệu của bạn cỡ bao nhiêu records trong bảng, câu query phức tạp cỡ nào (bao nhiêu WHERE conditions, join bao nhiêu bảng, bao nhiêu sub query)... Bạn hỏi chung chung thế thì tất nhiên là càng dễ trả lời nhưng càng khó để bạn đạt được mục đích.

Tập chung vào MySQL, nếu bạn không muốn đập phá database đi thì:

1) Phải phân tích các show queries (mysql có lưu các slow query ở đâu đó)
2) Không có thì phải lấy được các queries ra, dùng tính năng EXPLAIN để phân tích câu query.
3) Sau khi explain, quyết định đánh INDEX vào các trường cần thiết.
...
 
Nếu số lượng người dùng rất lớn thì bạn phân tích xem số lượng query đọc (SELECT) và query ghi (INSERT/UPDATE/DELETE) trên database của bạn cái nào nhiều hơn.

4) Nếu SELECT nhiều hơn, bạn nên sử dụng REPLICATION, với SLAVE DB toàn là bảng MyISAM.
5) Nếu INSERT/UPDATE/DELETE nhiều hơn bạn nên chuyển MASTER DB sang InnoDB
5.1) Ngoài ra bạn có thể phân tích xem, nhưng câu INSERT/UPDATE/DELETE nào không cần phát huy tác dụng ngay tức thì, bạn có thể sử dụng DELAY param

Sau khi các cách trên không hiệu quả lớn (chắc chắn là hiệu quả nhưng nếu chưa đạt yêu cầu) thì

6) Sử dụng cache

...

7) Ngoài ra sử dụng DbEngine hợp lý (ngoài InnoDB và MyISAM) cũng rất hiệu quả.
Logged
Trang: [1]
  In  
 
Chuyển sang:  

Powered by SMF 1.1.15 | SMF © 2006-2007, Simple Machines . Modified by PHPVN Members