我正在创建自己的gem,我想让用户将数据保存到多个NOSQL数据存储中。我怎样才能做到这一点?我应该在哪里放置必要的文件?
答案 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方法,例如find
,create
,delete
。该边界对象可以从您配置的任何NOSQL适配器继承。示例/来源:http://hawkins.io/2014/01/pesistence_with_repository_and_query_patterns/