2010-03-10 35 views
6

Google lưu trữ nhật ký khi bạn thực hiện khai báo Ghi nhật ký ở đâu? Các câu lệnh ghi nhật ký có vẻ khá nhanh, vì vậy dường như chúng không được lưu trữ trong kho dữ liệu.Bản ghi Google App Engine hoạt động chính xác như thế nào?

Bản ghi đáng tin cậy như thế nào? Nếu tôi làm một tuyên bố đăng nhập và nó thành công, có khá nhiều bảo đảm rằng nó sẽ hiển thị trong nhật ký không?

Có bao nhiêu lịch sử nhật ký được lưu trữ?

Lý do tôi quan tâm đến điều này là vì tôi đang tạo trang web câu hỏi và câu trả lời và tôi muốn theo dõi lượt xem của mỗi người dùng đã đăng nhập duy nhất cho mỗi câu hỏi và hiển thị số lượt xem trên câu hỏi trang. Vì vậy, nếu 10 người dùng khác nhau truy cập vào trang câu hỏi 100 lần, nó vẫn chỉ được tính là 10 lượt xem duy nhất.

Tôi có máy tính ngoại vi xử lý nền cho ứng dụng của mình. Tôi dự định để máy tính bên ngoài này tải xuống nhật ký khoảng 30 phút một lần và tính toán số lượt xem cho mỗi câu hỏi dựa trên các nhật ký. Bằng cách này, tôi không phải tạo một thực thể datastore cho mỗi câu hỏi khác nhau mà mỗi người dùng xem.

Các bạn nghĩ sao? Có ai nhìn thấy bất kỳ vấn đề với điều này?

EDIT: Tôi đoán mối quan tâm chính của tôi là độ tin cậy của nhật ký.

Trả lời

5

Đây không phải là câu trả lời cho câu hỏi của bạn - đúng hơn, đó là câu trả lời cho vấn đề bạn đang cố giải quyết.

Nếu bạn đã quen thuộc với Bloom Filters và sử dụng Memcached's incr (hoặc sharded datastore counter), bạn có thể tạo giải pháp "đủ tốt". Bạn có thể sử dụng một bộ lọc Bloom để kiểm tra xem một giá trị có trong tập hợp (trong trường hợp này là một id người dùng), và nếu không, tăng bộ đếm của bạn và thêm giá trị vào bộ lọc. Một trong các thuộc tính của Bloom Filters là việc thêm một giá trị vào tập hợp được bao gồm kiểm tra đối với là một hoạt động thời gian không đổi. Spacewise, nó sẽ mất một chút không gian để lưu trữ mỗi bộ lọc tiềm năng, nhưng điều này đã có vẻ là một đơn đặt hàng của cường độ ít phức tạp hơn so với viết mã để grep định kỳ cho uniques. Here's a Python implementation.

Không có gì miễn phí, tuy nhiên - tôi đã nói "đủ tốt" là quan trọng. Với Bloom Filters, luôn có một cơ hội dương tính giả. Tức là, tùy thuộc vào kích thước của băm cho mỗi câu hỏi, có một cơ hội nhỏ bạn sẽ kiểm tra xem liệu ID người dùng đã được tính hay chưa và nhận được "CÓ IT CÓ" khi đó là lần đầu tiên Người dùng xem câu hỏi . Bạn có thể tính toán kích thước bạn cần cho một dương tính giả hợp lý, nhưng có một sự cân bằng không gian để làm như vậy.

+0

Cảm ơn Ikai, tôi đã cân nhắc sử dụng memcache và hỏi câu hỏi này về nó: http://stackoverflow.com/questions/2422131/google-app-engine-memcache-how-likely-am-i-to-lose- dữ liệu trong kịch bản này. Tất cả các câu trả lời tôi nhận được cho biết tôi không nên dựa vào memcache để lưu trữ dữ liệu tạm thời, tôi chỉ nên sử dụng nó như một bộ nhớ đệm. Tôi thực sự đã đưa ra một giải pháp khá tốt đẹp để sử dụng nhật ký yêu cầu để tìm ra dữ liệu tôi cần :). – Kyle

+0

Ngoài ra tôi đã thử sử dụng kho dữ liệu (http://stackoverflow.com/questions/2427442/google-app-engine-about-how-much-quota-does-a-single-datastore-put-use) và đã tìm ra rằng nó quá đắt, đặc biệt khi xem xét dữ liệu tôi cần đã được lưu trữ trong nhật ký yêu cầu. – Kyle

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