5 replication journaling mongodb locks
我最近读了很多关于 MongoDB 的文章,但我找不到任何明确的材料,即数据如何写入日志和 oplog。
到目前为止我对这个过程的理解是这样的,有错误的地方请指正
我还想知道日志记录是否被禁用(我知道这是一个非常糟糕的主意),oplog 和数据库在什么时候更新?
最后,我有点困惑在这个过程中的哪些点上创建了写锁。这是仅在数据库和 oplog 更新时发生还是在其他时间发生?
感谢任何可以阐明这一点或向我指出一些阅读材料的人。
西蒙
据我了解,这是发生的事情。我简化了一点,但应该清楚它是如何工作的。
如果您仔细阅读,您会注意到数据早在通过查询优化器运行并应用于映射到内存的文件时就已经为 oplog 做好了准备。当辅助节点之一拉取 oplog 条目时,它会立即应用于内存映射文件的数据,并以与主节点相同的方式在磁盘中同步。
需要注意的一些事情:一旦将相对较小的数据写入日志,就相当安全。如果节点在两次数据文件同步之间发生故障,数据文件和 oplog 都可以从数据文件和日志中的最后状态恢复。一般来说,最大数据丢失是上次提交后记录到日志中的操作,中位数为 50 毫秒。
至于锁。如果您写得很仔细,那么当数据同步到磁盘时,不会在数据库级别施加锁定。可以创建写锁,以确保在任何给定时间点只有一个线程修改给定文档。还有其他可能的写锁,但一般来说,它们应该相当罕见。
文件系统层上的写锁创建一次,尽管只是隐式创建,iirc。在应用程序启动期间,会在 dbpath 的根目录中创建一个锁定文件。当有效锁存在时,任何其他 mongod 实例都将拒绝对这些数据文件执行任何操作。你也不应该这样做;)
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
874 次 |
| 最近记录: |