猿教程 Logo

.Net连接MongoDb:写关注

阿里云服务器,每月低至7.8元,项目演示即建站必备,比腾讯云更便宜,并且不需学生认证,从此链接购买有效:去购买

介绍

在上一篇文章中,我们看到在MongoDb .NET驱动程序中如何处理索引。 通常,MongoDb索引是通过mongo shell创建的,但驱动程序还提供了几个选项,以防万一需要。

在这篇文章中,我们将在本系列中介绍MongoDb和.NET的完成阶段:写入和读取问题。 这些术语与数据库中的数据的耐久性和一致性相关。

写关注

当我们写入数据库时,即插入或更新文档,则新的或更新的文档首先被保存到内存而不是磁盘。 内存中的记录稍后以异步方式持续到磁盘。 滞后不是戏剧性的,它可以是一秒钟,一点点,一点点,取决于内存中有多少数据。 然而,有这个滞后,如果数据库服务器在那个滞后期间死机,那么数据不会持续到磁盘,并将从内存中消失。 在服务器重新启动后,它不会神奇地恢复。

默认情况下,当我们向服务器发送写入或更新时,我们得到一个确认信,说明操作是否成功。 如果确认说明OK,那么这意味着新的或更新的文档被持久化到内存中。 新数据也保存在磁盘上并不是100%的保证。 写操作被缩写为“w”,默认值为1,反映了我们刚刚描述的场景,即我们想要对存储器的持久性的确认。

插入和更新中的write参数伴随着MongoDb的内存中的另一个部分,称为日志。 日志是一个日志,MongoDb注册从客户端发送给它的所有插入,更新和删除操作。 该杂志也是新文档首先存储在内存中,然后稍后延迟到磁盘的集合。 当服务器崩溃后需要恢复集合时,日志变得重要。 所有在日记中的文档,但不在磁盘上的集合中,将根据日志插入/更新。 但是,如果文档未写入磁盘,并且相关的插入/更新操作尚未持续到磁盘,那么它将永远丢失。 当我们向数据库中插入一个新的文档时,我们不要等待相关日志条目默认保存到磁盘。 持久性选项的日志部分缩写为“j”,默认值为false。

“w”和“j”一起构成写入关注,如上所述,它们的值默认为1,为false。 这就是MongoDb写/更新操作如此之快。 起初我们只写内存,持续到磁盘会以短暂的滞后异步发生。 取而代之的是我们有一个简短的窗口,新的数据可以永远丢失。

当然可以选择改变这种行为。 如果要确保数据真的保留并记录到磁盘,则插入选项中的“j”值必须设置为true,如下所示:

db.companies.insert({"name" : "Samsung", "phone" : 5345346}, {"writeConcern" : {"w" : 1, "j" : true}})

writeConcern参数也是一个文档。

将j设置为true可使插入速度更慢,但有时候确保将新数据持久存储到磁盘中是非常重要的。 例如。 创建新用户是一个很好的候选人。

“w”参数也可以具有值0,除了我们将在下一篇文章中考虑的其他值 - 这意味着所谓的未确认的写入。 那就是我们甚至不等待初始的基于内存的确认。 当然这是最快的消防选择:

db.companies.insert({"name" : "Opel", "phone" : 2446679809767}, {"writeConcern" : {"w" : 0}})

服务器将使用空的写入结果数组进行响应。 偶尔我们可能会去这个不安全的选择。 我可以从我工作的事业中举个例子。 正在进行的负载测试的统计信息会定期插入MongoDB。 数据用于以最终用户的形式显示统计信息。 写入选项设置为0,以便尽可能快地插入大量频繁输入的数据。 如果批次在这里和那里丢失,这很好。 然后下一轮批次将成功,然后可以重绘图形。

在下一篇文章中,我们将介绍多数据库场景中的写入问题。

阿里云服务器,每月低至7.8元,项目演示即建站必备,比腾讯云更便宜,并且不需学生认证,从此链接购买有效: 去购买


版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/CsharpMongo/40.html