MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Cách xóa các phiên cũ / cũ khi sử dụng lưu trữ phiên Mongo DB trong Ruby on Rails 3.2

Chìa khóa để giải quyết vấn đề này là hiểu rằng sử dụng trực tiếp Mongoid các phương thức khi session_store của ứng dụng Rails 3 của bạn được đặt thành mongoid_store sẽ không bao giờ cho phép loại tương tác cơ sở dữ liệu trực tiếp này xảy ra.

Vì vậy, thay vào đó, bằng cách sử dụng Mongoid chỉ cho kết nối cơ sở dữ liệu cơ bản nhưng sau đó thực sự tương tác với Moped cốt lõi của Mongoid trực tiếp trên cấp độ hoạt động của trình điều khiển, chức năng tương tự có thể đạt được một cách dễ dàng! Đây là rake của Mongoid / Moped rake nhiệm vụ tôi nghĩ ra hoạt động khá tốt:

namespace :sessions do
  stale_window = 7
  desc "Clear stale DB sessions older than #{ stale_window } days."
  task :cleanup => :environment do
    db = Mongoid::Sessions.default
    begin
      db[:sessions].where('updated_at' => { '$lt' => stale_window.days.ago }).sort(updated_at: 1).no_timeout.remove_all
    rescue Moped::Errors::SocketError => e
      # Rescue here if needed. If not, the screwed up process dies silently.
    end
  end
end

Kết nối được đặt qua db = Mongoid::Sessions.default và điều kỳ diệu xảy ra trong dòng:

db[:sessions].where('updated_at' => { '$lt' => stale_window.days.ago }).sort(updated_at: 1).no_timeout.remove_all

Tôi đã đặt một stale_window biến để tôi có thể dễ dàng điều chỉnh phạm vi của nhiệm vụ này; đặt giá trị DB cũng như mô tả. Để sử dụng nó, tôi chạy nó như thế này từ đường dẫn codebase:

RAILS_ENV=production bundle exec rake sessions:cleanup

Và tất nhiên chỉ cần thay đổi RAILS_ENV giá trị để phù hợp với môi trường mà bạn muốn nhiệm vụ này thực hiện; chẳng hạn như staging , development hoặc bất cứ điều gì khác mà bạn có thể đặt tên cho môi trường của mình. Sau khi chạy rake đó nhiệm vụ, sessions bảng bộ sưu tập được cắt tỉa thành một thứ gì đó thực tế hơn với cách sử dụng trong thế giới thực và kích thước cơ sở dữ liệu tổng thể hợp lý hơn để xử lý.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Kết nối chuỗi theo nhóm

  2. MongoDB $ atanh

  3. Làm cách nào để truy xuất tất cả các phần tử phù hợp có bên trong mảng trong Mongo DB?

  4. Nhiều điều kiện tham gia bằng cách sử dụng toán tử $ lookup

  5. Chuẩn hóa dữ liệu trong MongoDB