2012-06-13 8 views
7

Tôi chạy một trang web thư mục địa phương (nghĩ yelp/yell.com v.v) và cần cung cấp dữ liệu phân tích cho các doanh nghiệp được liệt kê trên trang web.Người dùng theo dõi - Phân tích trang web PHP/MySQL tùy chỉnh

Tôi cần phải theo dõi như sau:

1) Số người truy cập vào các trang web cụ thể (ví dụ: các widget của Jim đã được xem 65 lần)

2) Số lần người dùng nhấp vào một liên kết (ví dụ: 25 người dùng nhấp để truy cập vào trang web của bạn)

Tôi có thể thực hiện việc này bằng cách thêm một số vào số có liên quan mỗi khi có hành động.

Điều tôi muốn có thể làm là chia thành các phạm vi ngày, ví dụ: 30 ngày qua, 12 tháng qua, mọi lúc.

Làm cách nào để lưu trữ dữ liệu này trong cơ sở dữ liệu? Tôi chỉ cần lý thuyết, chứ không phải mã! Nếu ai đó có thể giải thích cách tốt nhất để lưu trữ thông tin này, tôi sẽ vô cùng biết ơn.

Ví dụ: tôi có sử dụng một bảng cho ngày, một cho các trang/liên kết và một cho dữ liệu người dùng (liên kết được nhấp/trang được truy cập) không? Giải pháp duy nhất tôi có cho đến nay là thêm một hàng mới vào DB mỗi khi một trong những hành động này xảy ra, điều đó sẽ không mở rộng quy mô rất tốt.

Nhờ bất kỳ ai có thể trợ giúp.

+2

tại sao lại phát minh bánh xe? hãy xem http://piwik.org hoặc anh trai lớn google analytics;) – cypherabe

+0

Bạn có thể giảm số lượng hàng mới nếu bạn không muốn phân tích quá chính xác. Giống như thay vì các hoạt động lưu trữ theo dấu thời gian (int 10, tôi giả sử), bạn có thể nhóm/lưu trữ chúng theo ngày. Nó không phải là một giải pháp "dứt khoát" bằng cách này. – HBv6

Trả lời

3

Tôi sẽ không phát minh lại bánh xe và sử dụng các giải pháp đã có sẵn như Piwik. Nó thực sự có thể đọc nhật ký web bình thường của bạn để cung cấp tất cả thông tin bạn yêu cầu.

Nếu vì một lý do nào đó bạn vẫn cần giải pháp tùy chỉnh, tôi sẽ không lưu dữ liệu theo dõi trong phạm vi, mà là sử dụng thời gian và dữ liệu url chính xác cho mỗi cuộc gọi trang web riêng lẻ. Dữ liệu được tích lũy sẽ được tạo nhanh chóng trong phần logic của bạn, ví dụ: thông qua chế độ xem SQL:

SELECT count(url),url 
FROM calllog 
WHERE calldate > NOW()-30days 
+1

Cảm ơn bạn đã trả lời, Lars. Tôi đã có G-Analytics trên trang web, nhưng tôi cần tạo trang tùy chỉnh nơi mỗi người dùng có tài khoản với chúng tôi có thể đăng nhập và xem thống kê của riêng họ (chứ không phải thống kê trên toàn trang web). Vì vậy, bạn sẽ lưu mọi hành động vào hàng mới trong cơ sở dữ liệu bằng dấu thời gian? sau đó sử dụng MySQL để chỉ hiển thị dữ liệu cho 30 ngày qua, 12 tháng, v.v ...? – drandom

+0

Có lưu trữ mỗi lần xem trang và nhấp chuột vào liên kết riêng lẻ với một dấu thời gian một giải pháp có thể mở rộng không? Tôi có thể kết thúc với hàng triệu hàng dữ liệu khá nhanh chóng, phải không? cảm ơn lần nữa vì thời gian của bạn Lars – drandom

+1

Có, hệ thống của bạn đã có sẵn trong nhật ký web của máy chủ web của bạn, điều này thực sự chậm hơn việc đưa dữ liệu vào cơ sở dữ liệu SQL yêu thích của bạn. Vì phần logic sẽ chỉ được thực hiện khi xem thống kê, bạn có thể tạo bảng bộ nhớ cache thay vì chế độ xem, được tạo lại sau mỗi phút hoặc lâu hơn và loại bỏ logdata, sau khi không cần thiết nữa (hoặc giảm nó thành dữ liệu được tích lũy cho sau đó tham khảo, ví dụ như thông tin hàng ngày sau 6 tháng). Tôi tin rằng, PiWik có khả năng có khách hàng, vì vậy bạn có thể sử dụng nó để phân biệt các trang web khác nhau từ các khách hàng khác nhau của bạn. – Lars