小编jef*_*cco的帖子

C#Driver SafeMode off Upserts - 并非所有记录都已更新/插入

在我们的应用程序中,我们正在进行大量的插入/更新(从1k到100k),我注意到并没有保存所有记录.它可以在安全模式关闭的情况下节省90%-95%的记录.

使用safemode执行upsert会成功挂起所有记录但速度太慢.我记得在某处读到即使安全模式关闭,也应该没有理由更新/插入失败,除非服务器不可用.

我写了一个小应用程序来测试它,并包含下面的代码.它试图在Mongo中插入100,000个int,并且在运行后检查时,我在集合中看到大约90,000个记录.

(注意:我正在使用并行更新,因为我正在使用_id进行更新,而Mongo 2.0在使用_id时支持并行操作.当不使用Parallel.Foreach时,我仍然看到一些记录丢失虽然不是很好)

        MongoServer server = MongoServer.Create(host);

        MongoDatabase test = server.GetDatabase("testDB");

        var list = Enumerable.Range(0, 100000).ToList();

        using (server.RequestStart(test))
        {
            MongoCollection coll = test.GetCollection("testCollection");

            Parallel.ForEach(list, i =>
            {
                var query = new QueryDocument("_id", i);
                coll.Update(query, Update.Set("value",100), 
                             UpdateFlags.Upsert, SafeMode.False);;
            });
        }
Run Code Online (Sandbox Code Playgroud)

所以我想我的问题是:快速进行大量更新的最佳方式是什么,成功率是100%?

我不能使用insert,因为我有许多进程写入Mongo并且无法确定某个文档是否存在,这就是我使用Upsert的原因.

c# mongodb

4
推荐指数
1
解决办法
1831
查看次数

用Devise创建Rails多态用户模型

所以我知道这个问题已被问了很多次,但我的问题更进一步.

在为我的应用程序建模时,我有两种类型的用户,它们与用户模型具有多态关联.如:

class User < ActiveRecord::Base
    belongs_to :profileable, :polymorphic => true
end

class User_Type_1 < ActiveRecord::Base
    has_one :user, :as => :profileable
end

class User_Type_2 < ActiveRecord::Base
    has_one :user, :as => :profileable
end
Run Code Online (Sandbox Code Playgroud)

我这样做的原因,而不是STI,是因为User_Type_1有4个字段,User_Type_2有20个字段,我不希望用户表有这么多字段(是的24-ish字段不是很多,但我'大多数时候,我宁愿没有20个字段空了)

我理解这是如何工作的,我的问题是我希望注册表单只用于注册类型的用户,User_Type_1但签名表单用于两者.(我将有一个应用程序的管理员端,将创建用户User_Type_2)

我知道我可以after_sign_in_path_for(resource)AppicationController某种方式使用覆盖在登录时重定向到网站的右侧部分.例如:

def after_sign_in_path_for(resource)
    case current_user.profileable_type
    when "user_type_1"
        return user_type_1_index_path
    when "user_type_2"
        return user_type_1_index_path
    end
end
Run Code Online (Sandbox Code Playgroud)

所以我想我的问题是如何让表单与Devise一起工作,只允许注册类型User_Type_1然后在sign_up之后签名?

另外,如果我以错误的方式解决这个问题,那么正确的方法是什么?

ruby-on-rails polymorphic-associations devise

4
推荐指数
1
解决办法
2392
查看次数

将现有的新文件帐户连接到heroku rails应用程序以监控内存

我在Heroku上有一个现有的New Relic帐户和一个现有的rails应用程序.我成功地将Heroku应用程序中的数据发送到New Relic.但是我希望在New Relic中看到每个dyno的内存占用量.

我能找到的所有文档都说要通过Heroku安装附加组件.我不希望它为我配置一个新帐户,我只是希望它链接到我当前的帐户.我怎样才能做到这一点?如果我已经安装了New Relic并且正在工作并且我添加了附加组件,它是否只链接到它已经配置的帐户?

ruby-on-rails heroku newrelic

4
推荐指数
2
解决办法
1302
查看次数