Sẽ không có vấn đề gì khi giữ và cập nhật thông tin này trực tiếp trong MySQL. 3000 lượt truy cập mỗi giờ có nghĩa là ít hơn một truy vấn mỗi giây. Sử dụng công cụ lưu trữ InnoDB cho bảng này nên loại bỏ các vấn đề về khóa. Tuy nhiên InnoDB có rất nhiều tùy chọn và nó cần phải được cấu hình đúng cách để hoạt động hiệu quả - điều này là quan trọng.
Dựa trên ý kiến của bạn tôi nghĩ rằng cấu trúc bạn đang tìm kiếm sẽ giống như thế:
id - page id
type - period length, could be 'day', 'week', 'month'
period - date when period starts, could be integer written as YYYYMMDD or YYYYMM
- depending on the contents of 'type' field
count - hit count for a url over given period
Các khóa chính sẽ là (type, period, id)
. Ngoài ra chỉ số về (id, period)
và trên (type, period, count)
cho hiệu quả:
SELECT *
FROM ...
WHERE type='week'
and period = 20120409
ORDER BY count DESC
Khi trang web được tạo ra, hồ sơ chèn cho từng giai đoạn với count = 0. Khi trang bị một hit, chạy một bản cập nhật đơn giản:
UPDATE table
SET count = count + 1
WHERE id = $page_id
AND period IN (201204, 20120409)
Nó sẽ cập nhật tất cả ba hồ sơ cho thống kê 'ngày', 'tuần' và 'tháng'.
Tôi nghĩ giao dịch có thể tốt. – hjpotter92
Đây có phải là mục đích phân tích không? Nếu có, bạn có thể cân nhắc sử dụng một dịch vụ miễn phí như Google Analytics hoặc Jetpack để theo dõi lượt xem thay thế. –
Tôi có nên cân nhắc sử dụng bộ nhớ cache APC để lưu dữ liệu vào bộ đệm trước và sau đó cập nhật nó vào cơ sở dữ liệu sau một số chế độ xem ...? –