2010-01-10 30 views

Trả lời

10

Tôi nghĩ rằng tôi sẽ đi với Redis, bởi vì:

  • Antirediz (biệt danh của ông) là thực sự tích cực phát triển Redis. (Mỗi khi tôi nhìn vào bảng điều khiển github của tôi, ông đã cam kết một số mã mới). Hiện tại, anh đang phát triển redis fulltime nhờ vào VMware
  • Redis cuối cùng vẫn tồn tại nên hiệu suất là kickass (đầu tiên chỉ sử dụng bộ nhớ nhanh).
  • Redis có hoạt động increment nguyên tử mà bạn cần.
  • Redis có rất nhiều thư viện PHP tốt. Ngoài ra còn có một cái được viết dưới dạng C extension để nó có hiệu suất thực sự tốt. Redis website cũng có tổng quan về các tiện ích mở rộng này. Một số là mã PHP thuần túy (chạy một litle nhưng chậm hơn, nhưng dễ cấu hình hơn).
+0

tay xuống Tôi sẽ nói redis. Tôi đang làm một loại truy cập của điều và tôi đang đẩy 30k lệnh mỗi phút trên một VPS $ 512MB. :) –

+0

Chúng tôi đã cố gắng sử dụng redis cho một hệ thống quầy. Kho dữ liệu chính của Redis là RAM và tập dữ liệu của chúng tôi quá lớn để có hiệu quả.Một cái gì đó giống như Tokyo Tyrant - mà không phải giữ toàn bộ tập dữ liệu trong ram tất cả các thời gian - có lẽ sẽ là một sự lựa chọn tốt hơn. –

+0

Một bộ đếm đơn giản không thể được giữ trong RAM? Twitter lưu trữ gần như tất cả các mẩu tin hoạt động trong bộ nhớ. Nếu bạn muốn thực hiện, tôi nghĩ bạn nên trả một chút tiền mặt cho một mô-đun bộ nhớ. Bên cạnh bạn có thể nhận được một vài hợp đồng ram rẻ tiền. – Alfred

1

Các quầy xem nổi tiếng của những năm 1990 sử dụng các tệp đơn giản để lưu trữ số. Nếu tất cả những gì bạn cần chỉ là để lưu trữ một số, bất cứ điều gì là đủ tốt.

+2

Nếu bạn nhận được bất kỳ loại lưu lượng truy cập có ý nghĩa nào, việc ghi vào tệp trên đĩa có vấn đề tương tranh. Trừ khi bạn sử dụng khóa tập tin, nhưng sau đó bạn chạy các nguy cơ tranh chấp khóa. Các dự án như memcached tồn tại vì một lý do. –

+2

Nhưng nếu bạn chỉ sử dụng nó cho một trang web đơn giản (lưu lượng truy cập thấp) này có thể làm việc và sẽ dễ dàng thực hiện – Alfred

+0

Sự tranh giành khóa không phải là khó. 'while (! get_lock() || count> 10000) {ngủ (0,001); đếm ++}; fread() hoặc fwrite(); remove_lock(); 'Một cái gì đó đơn giản như vậy có thể dễ dàng xử lý xử lý hàng trăm nghìn yêu cầu mỗi giây ... giả sử hệ điều hành đã chọn của bạn nhanh chóng trong các hoạt động của hệ thống tệp. –

-1

Tôi có thể nói APC hoặc memcached là lựa chọn tốt.

+1

Không có sự kiên trì? – stesch

+0

+1. Redis cũng có thể so sánh, và đã được xây dựng trong sự kiên trì. –

9

MongoDB với upserts là điều tuyệt vời cho việc này.

Nếu bạn đang lưu trữ một cái gì đó như:

{ "url" : "www.example.com", "pageviews" : 0 } 

bạn có thể lần truy cập trang nguyên tử tăng rất nhanh với các nguyên tử hoạt động $ inc:

db.downloads.update({'url' : 'www.example.com'}, {'$inc' : {pageviews : 1}}) 

Nếu bạn sử dụng upserts, bạn không có để kiểm tra xem tài liệu có tồn tại hay không trước khi cập nhật. Ví dụ: nếu bạn nói:

db.downloads.update({'url' : 'www.example.com'}, {'$inc' : {pageviews : 1}}, {"upsert" : true}) 

tài liệu có url www.example.com sẽ được tạo nếu nó không tồn tại (với số lần xem trang được đặt thành 1) hoặc nếu tồn tại, số lần xem trang sẽ là tăng lên. Điều này có nghĩa là bạn không phải lo lắng về việc điền trước bộ sưu tập.

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