Rails gem多个NOSQL数据存储区

时间:2014-04-30 23:35:01

标签: ruby-on-rails nosql

我正在创建自己的gem,我想让用户将数据保存到多个NOSQL数据存储中。我怎样才能做到这一点?我应该在哪里放置必要的文件?

2 个答案:

答案 0 :(得分:0)

我在我的宝石中做了同样的事情。我想你已经在你的gem /引擎中创建了一个App文件夹。创建另一个名为“backend”的文件夹,并为每个数据存储区创建类。对于我的情况,我为Mongo和Redis创建了一个单独的

module Memberfier
  class RedisStore
    def initialize(redis)
      @redis = redis
    end

    def keys
      @redis.keys
    end

    def []=(key, value)
      value = nil if value.blank?
      @redis[key] = ActiveSupport::JSON.encode(value)
    end

    def [](key)
      @redis[key]
    end

    def clear_database
      @redis.keys.clone.each {|key| @redis.del key }
    end
  end
end


module Memberfier
  class MongoStore
    def initialize(collection)
      @collection = collection
    end

    def keys
      @collection.distinct :_id
    end

    def []=(key, value)
      value = nil if value.blank?
      collection.update({:_id => key},
                        {'$set' => {:value => ActiveSupport::JSON.encode(value)}},
                        {:upsert => true, :safe => true})
    end

    def [](key)
      if document = collection.find_one(:_id => key)
        document["value"]
      else
        nil
      end
    end

    def destroy_entry(key)
      @collection.remove({:_id => key})
    end

    def searchable?
      true
    end

    def clear_database
      collection.drop
    end

    private

    def collection; @collection; end
  end
end

答案 1 :(得分:0)

您可能已经看过Bob叔叔关于应用程序架构的演讲。如果没有,那就是here。我建议使用单个边界对象来选择继承的模型。该边界对象可以有多种CRUD方法,例如findcreatedelete。该边界对象可以从您配置的任何NOSQL适配器继承。示例/来源:http://hawkins.io/2014/01/pesistence_with_repository_and_query_patterns/