- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
在我们的应用程序中,我们正在进行大量插入/更新(从 1k 到 100k 不等),我注意到并非所有记录都被保存。它可以在关闭安全模式的情况下保存 90%-95% 的记录。
使用安全模式执行更新插入可以成功更新所有记录,但速度太慢。我记得在某处读到,即使关闭安全模式,除非服务器不可用,否则更新/插入应该没有理由失败。
我写了一个小应用程序来测试这个,并包含了下面的代码。它尝试将 100,000 个整数插入 Mongo,在运行后检查时,我在集合中看到大约 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);;
});
}
所以我想我的问题是:以 100% 的成功率快速进行大量更新的最佳方法是什么?
我不能使用 insert,因为我有许多进程写入 Mongo,并且无法确定某个文档是否存在,这就是我使用 Upsert 的原因。
最佳答案
当您使用 SafeMode.False 时,C# 驱动程序只会将插入/更新消息写入套接字,而不会等待回复。当您非常快速地向套接字写入大量数据时,它会在客户端得到缓冲,网络堆栈将尽可能快地将字节喷射到网络上。如果您使网络饱和,则可以备份很多东西。
我的猜测是,在网络堆栈有机会将所有剩余字节写入网络之前,您正在退出进程。这可以解释丢失的文件。
最好的办法是在最后调用 Count,不是一次,而是重复调用,直到计数等于您认为应该的值。那时您知道没有数据要传输。
但是,如果任何插入由于任何原因(例如,违反唯一索引)而失败,则计数永远不会达到您的预期值。在不使用 SafeMode.True 的情况下,无法 100% 知道插入/更新是否有效。
请注意,大多数长期存在的服务器进程永远不会出现此问题,因为它们永远不会退出。
关于C# Driver SafeMode off Upserts - 并非所有记录都已更新/插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7779433/
当我在 master note 上运行这个命令时 hadoop hdumer@HadoopMaster:~$ hive 但是 Hadoop 多节点运行良好 它显示以下错误: Logging initi
我设置了3 节点 Hadoop 集群(Apache Hadoop-2.8.0)。我已经部署了 2 个使用 QJM 在 HA 模式下配置的名称节点。在安装namenode的同一台机器上配置了2个data
使用 Sudo jps 查看正在运行的守护进程。并发现节点管理器没有运行。 如此尝试,sudo service hadoop master stop 停止,当我尝试重新启动时它重新启动了。然而,当我给
在我们的应用程序中,我们正在进行大量插入/更新(从 1k 到 100k 不等),我注意到并非所有记录都被保存。它可以在关闭安全模式的情况下保存 90%-95% 的记录。 使用安全模式执行更新插入可以成
谁能说如何用 WriteConcern 替换过时的 SafeMode ?特别是我对 SafeMode.True 很感兴趣? 谢谢。 最佳答案 SafeMode.True 转换为 WriteConcer
我发现官方MongoDB C#驱动的一些方法使用SafeMode并返回SafeModeResult。这个 SafeMode 是什么以及如何使用它?很高兴看到一些用例 - 例如,具有 MongoColl
我是一名优秀的程序员,十分优秀!