Tôi đang làm việc không có một trang web mà các cửa hàng xem trang cá nhân trong một 'quan' bảng:Cách tốt nhất để lưu trữ views/số liệu thống kê trong MySQL
CREATE TABLE `views` (
`view_id` bigint(16) NOT NULL auto_increment,
`user_id` int(10) NOT NULL,
`user_ip` varchar(15) NOT NULL,
`view_url` varchar(255) NOT NULL,
`view_referrer` varchar(255) NOT NULL,
`view_date` date NOT NULL,
`view_created` int(10) NOT NULL,
PRIMARY KEY (`view_id`),
KEY `view_url` (`view_url`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
Nó khá cơ bản, các cửa hàng user_id (id của người dùng trên trang web), địa chỉ IP của họ, url (không có miền để giảm kích thước của bảng một chút), url giới thiệu (không thực sự sử dụng ngay bây giờ và có thể loại bỏ nó), ngày (YYYY-MM-DD định dạng của khóa học) và dấu thời gian unix khi lượt xem xảy ra.
Bảng, tất nhiên, đang nhận được khá lớn (4 triệu hàng tại thời điểm này và nó là một trang web khá trẻ) và chạy truy vấn trên đó là chậm.
Đối với một số tối ưu hóa cơ bản bây giờ tôi đã tạo ra một bảng 'views_archive':
CREATE TABLE `views_archive` (
`archive_id` bigint(16) NOT NULL auto_increment,
`view_url` varchar(255) NOT NULL,
`view_count` smallint(5) NOT NULL,
`view_date` date NOT NULL,
PRIMARY KEY (`archive_id`),
KEY `view_url` (`view_url`),
KEY `view_date` (`view_date`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
này bỏ qua thông tin người dùng (và url giới thiệu) và các cửa hàng có bao nhiêu lần một url được xem mỗi ngày. Đây có lẽ là cách chúng ta thường muốn sử dụng dữ liệu (số lần trang được xem mỗi ngày) nên truy vấn khá nhanh, nhưng ngay cả khi tôi sử dụng nó để chủ yếu thay thế bảng 'lượt xem' (phải bây giờ tôi tưởng tượng tôi có thể hiển thị lượt xem trang theo giờ cho tuần cuối cùng/tháng trước và sau đó hiển thị lượt xem hàng ngày ngoài đó và vì vậy sẽ chỉ cần bảng 'lượt xem' để chứa dữ liệu từ tuần trước/tháng) nhưng vẫn lớn bàn.
Dù sao, câu chuyện dài ngắn, tôi tự hỏi bạn có thể cho tôi bất kỳ mẹo nào về cách xử lý tốt nhất số liệu thống kê/lượt xem trang trong một trang web MySQL hay không, mục tiêu là giữ cả kích thước của bảng (s) trong db càng nhỏ càng tốt và vẫn có thể dễ dàng (và ít nhất là tương đối nhanh) truy vấn thông tin. Tôi đã xem xét các bảng được phân đoạn một chút, nhưng trang web không cài đặt MySQL 5.1. Bất kỳ lời khuyên hay suy nghĩ khác bạn có thể cung cấp sẽ được nhiều đánh giá cao.
umm, doesn Máy chủ của bạn có nhật ký truy cập đã lưu tất cả dữ liệu này không? Có rất nhiều người xem nhật ký/tóm tắt ở đó cho nhật ký truy cập web. Có lý do thuyết phục nào không sử dụng một trong số họ không? – dnagirl
Mục đích của cột view_created là gì? –
Mục đích của cột view_created, MicWafflestix, sẽ được sử dụng nếu tôi muốn hiển thị số lượt xem theo giờ (cho biết số lần bài viết được xem mỗi giờ ngày hôm nay). Tôi cho rằng tôi có thể sử dụng DATETIME thay vì dấu thời gian INT (10), nhưng tôi không chắc chắn sẽ giúp tôi rất nhiều. – Charlie