2009-08-15 30 views
8

Tôi muốn triển khai bộ đếm chế độ xem hướng đến người dùng (tương tự như SO cho lượt xem câu hỏi) theo dõi số lần xem duy nhất cho một trang. Có một vài câu hỏi similar ở đây nhưng không có câu trả lời nào cho câu hỏi của tôi hoàn toàn.Triển khai bộ đếm lượt xem trang duy nhất?

Thiết lập nào tốt nhất cho điều này (về bảng cơ sở dữ liệu, v.v.)? Sẽ tốt hơn nếu thêm cột 'lượt xem' vào bảng 'câu hỏi' và đơn giản là tăng số lượng này lên mỗi lượt xem trang? Và nếu tôi muốn các khung nhìn là duy nhất, tôi đoán tôi có thể có một bảng khác với các địa chỉ IP và câu hỏi của câu hỏi và chỉ tăng cột 'xem' nếu chưa có mục nhập nào với IP hiện tại. Tuy nhiên bảng 'ip-view' này sẽ trở nên thật sự nhanh chóng ... Chủ yếu là tôi quan tâm đến việc phải lưu trữ mọi lượt xem trang và mọi IP trong một bảng.

Làm thế nào điều này có thể được tối ưu hóa để nó không trở thành một nút cổ chai hiệu suất? Có cách tiếp cận nào tốt hơn những gì tôi mô tả không? Xin lưu ý rằng điều rất quan trọng đối với tôi là chỉ có lượt xem duy nhất được tính.

Cập nhật: ngoài việc đề xuất phương pháp triển khai, tôi cũng muốn hiểu thêm về các vấn đề về hiệu suất khi giả sử phương pháp ngây thơ đơn giản kiểm tra xem IP có tồn tại và cập nhật cột 'xem' không chế độ xem trang. Vấn đề chính là số lượng chèn lớn xảy ra (giả định lưu lượng truy cập lớn) hoặc kích thước của bảng ánh xạ đối tượng-to-ip (có thể rất lớn vì một hàng mới sẽ được chèn cho mỗi câu hỏi cho mỗi khách truy cập mới). Điều kiện chủng tộc có nên được xem xét (tôi chỉ giả định rằng một bản cập nhật/tăng sql tuyên bố là nguyên tử)? Xin lỗi cho tất cả các câu hỏi nhưng tôi chỉ bị mất như thế nào tôi nên tiếp cận này.

+0

Kiểm tra câu trả lời của tôi ở đây, có thể: http://stackoverflow.com/questions/1269968/incremented-db-field/1269973#1269973 –

Trả lời

0

Dường như có một cách tiếp cận mang tính cách mạng (trên đỉnh đầu của tôi), bản thân tôi không chắc chắn về khả năng mở rộng hoặc khả thi hơn.

Nếu bạn thực sự muốn lưu trữ IP trong DB và muốn tránh bị DB bị tắc nghẽn, bạn nên lưu trữ chúng theo thứ tự phân cấp.

<ID, IP_PART, LEVEL, PARENT_PART, VIEWS> 

như vậy, khi người dùng truy cập trang web ur từ IP 212.121.139.54, các hàng trong bảng ur sẽ là:

< 1, 212, 1, 0, 0> < 2, 121, 2, 1, 0> < 3, 139, 3, 2, 0> < 4, 54, 4, 3, 1>

điểm cần Lưu ý:

  1. Chỉ những hàng có LEVEL val = 4, sẽ có số lượt xem.
  2. Để tránh dự phòng lưu trữ VIEWS val = 0, cho LEVEL val = 1,2,3; bạn có thể nghĩ đến việc lưu trữ chúng trong một bảng khác.
  3. Ý tưởng, như đã hình thành, dường như không phù hợp với một nhóm nhỏ các IP.
  4. Mặc dù điều này có thể đã bỏ qua thực tế là một IP proxy công cộng đang ngồi trước một mạng riêng truy cập trang web ur từ nhiều hơn một hộp. Nhưng đó không phải là ques ur. tôi đoán.

vì vậy, hãy cho tôi biết bạn đã triển khai gì?

6

Nếu bạn cần theo dõi lượt xem duy nhất cụ thể, có thể có hai cách để thực hiện việc này ... trừ khi bạn đang hoạt động với người dùng nội bộ mà bạn có thể xác định. Bây giờ, để thực hiện việc này, bạn cần phải theo dõi mọi người dùng đã truy cập trang.

Theo dõi có thể được thực hiện ở phía máy chủ hoặc phía máy khách.

Phía máy chủ sẽ cần phải là địa chỉ IP, trừ khi bạn đang giao dịch với người dùng nội bộ mà bạn có thể xác định. Và bất cứ khi nào bạn xử lý các địa chỉ IP, hãy cẩn thận khi sử dụng chúng để nhận dạng người dùng (có thể có nhiều người dùng trên mỗi IP hoặc nhiều IP cho mỗi người dùng) và bạn không thể làm gì về điều đó.

Bạn cũng nên xem xét rằng "bảng IP khổng lồ về cái chết" không phải là một giải pháp tồi. Hiệu suất sẽ chỉ trở thành một vấn đề nếu bạn có hàng trăm ngàn người dùng ... giả sử nó được lập chỉ mục đúng cách, tất nhiên.

Phía máy khách có thể liên quan đến việc bạn để lại "Tôi đã truy cập!" bánh quy. Nếu cookie KHÔNG có, sau đó tăng số lượng người dùng của bạn. Nếu không thể tạo cookie, bạn sẽ phải sống với chế độ xem người dùng tăng cao. Và tất cả những điều cần lưu ý về việc xử lý cookie sẽ được áp dụng ... tức là, cuối cùng chúng sẽ biến mất và biến mất.

Các vấn đề liên quan