摘抄自:http://francs3.blog.163.com/blog/static/405767272012112811268129/
今天了解了 MongoDB 的锁机制,与传统 RDMBS MVCC 机制相差较大,它在一些方面的特性
比较特殊,下面简单介绍下:
--1 MongoDB 使用的锁
MongoDB 使用的是“readers-writer”锁, 可以支持并发但有很大的局限性,当一个读锁存在,许多
读操作可以使用这把锁,然而, 当一个写锁的存在,一个单一的写操作会 exclusively 持有该锁,同时
其它读,写操作不能使用共享这个锁;举个例子,假设一个集合里有 10 个文档,多个 update 操作不能
并发在这个集合上,即使是更新不同的文档。
--2 锁的粒度
在 2.2 版本以前,mongod 只有全局锁;在 2.2 版本开始,大部分读写操作只锁一个库,相对之前版本,
这个粒度已经下降,例如如果一个 mongod 实例上有 5 个库,如果只对一个库中的一个集合执行写操作,那
么在写操作过程中,这个库被锁;而其它 5 个库不影响。相比 RDBMS 来说,这个粒度已经算很大了!
--3 如何查看锁的状态
db.serverStatus()
db.currentOp()
mongotop
mongostat
the MongoDB Monitoring Service (MMS)
--4 哪些操作会对数据库产生锁?
下表列出了常见数据库操作产生的锁。
Issue a query | Read lock |
Get more data from a cursor | Read lock |
Insert data | Write lock |
Remove data | Write lock |
Update data | Write lock |
Map-reduce | Read lock and write lock, unless operations are specified as non-atomic. Portions of map-reduce jobs can run concurrently. |
Create an index | Building an index in the foreground, which is the default, locks the database for extended periods of time. |
db.eval() | Write lock. db.eval() blocks all other JavaScript processes. |
eval | Write lock. If used with the nolock lock option, the eval option does not take a write lock and cannot write data to the database. |
aggregate() | Read lock |
--5 哪些数据库管理操作会锁数据库?
某些数据库管理操作会 exclusively 锁住数据库,以下命令需要申请 exclusively 锁,并锁定一段时间
db.collection.ensureIndex(),
reIndex,
compact,
db.repairDatabase(),
db.createCollection(), when creating a very large (i.e. many gigabytes) capped collection,
db.collection.validate(),
db.copyDatabase().This operation may lock all databases
以下命令需要申请 exclusively 锁,但锁定很短时间。
db.collection.dropIndex(),
db.collection.getLastError(),
db.isMaster(),
rs.status() (i.e. replSetGetStatus,)
db.serverStatus(),
db.auth(), and
db.addUser().
备注:可见,一些查看命令也会锁库,在比较繁忙的生产库中,也会有影响的。
--6 锁住多个库的操作
以下数据库操作会锁定多个库。
db.copyDatabase() must lock the entire mongod instance at once.
Journeying, which is an internal operation, locks all databases for short intervals.
All databases share a single journal.
User authentication locks the admin database as well as the database the user is accessing.
All writes to a replica set’s primary lock both the database receiving the writes and the
local database. The lock for the local database allows the mongod to write to the primary’s oplog.
--7 参考
http://docs.mongodb.org/manual/faq/concurrency/
http://blog.163.com/dazuiba_008/blog/static/36334981201211112221314/
相关推荐
为了解决这个问题,"optimistic_concurrency_mongodb_dotnet"是一个专门针对.NET环境的C#库,它为MongoDB添加了乐观并发控制机制,以确保在高并发场景下的数据一致性。 乐观并发控制(Optimistic Concurrency ...
Timestamp Based Concurrency Control 是一种基于时间戳的并发控制机制,用于解决分布式事务中的并发问题。 Distributed Transaction Distributed Transaction 是一种分布式事务机制,用于解决分布式系统中的事务...
在本文中,我们将深入探讨MongoDB的并发控制机制,特别是其文档级原子性特性,通过一个JavaScript示例来证明这一点。 首先,让我们理解什么是原子性。在数据库系统中,原子性是指一个事务中的所有操作要么全部成功...
- 多线程:线程池、并发工具类、锁机制、原子类的使用。 - 内存模型:JVM内存区域、垃圾回收机制、性能优化策略。 - 泛型:了解其工作原理,避免类型擦除带来的问题。 - 反射:如何在运行时动态地获取类信息和...
这种方式避免了传统的锁机制带来的性能瓶颈。 ### 示例代码 以下是一些示例代码,展示了如何在MySQL数据库中使用锁定和事务隔离级别的并发控制机制: #### 使用锁定机制 在MySQL中,可以使用`LOCK TABLES`命令来...
- **High Concurrency(高并发):** 如春节抢红包、节假日购票高峰。 - **High Extendibility(高可扩展性):** 通过增加硬件资源实现性能提升。 - **High Performance(高性能):** 快速响应用户请求。 #### 七...
- 并发控制(Concurrency Control)确保在多用户环境下,数据的一致性和完整性,如锁机制、乐观锁、多版本并发控制(MVCC)等。 5. 数据库安全性: - 权限与角色:设置不同级别的访问权限,通过用户、角色和权限...
C#结合数据库系统提供了锁(Locks)、乐观并发(Optimistic Concurrency)和悲观并发(Pessimistic Concurrency)等策略,理解并合理应用这些机制可以确保数据的安全性。 7. 性能优化:数据库性能优化是高级技术的...
这可能涉及到线程同步、锁机制、异步编程模型等。 10. 安全性(Security):考虑到数据敏感性,屏幕拷贝和文件索引系统可能需要实施访问控制、数据加密等安全措施。 总的来说,"屏幕文件索引源码"项目涵盖了从屏幕...
2. **分布式数据库(Distributed Databases)**:如Cassandra、MongoDB,提供高性能、高可用的数据存储。 3. **消息队列(Message Queues)**:如RabbitMQ、Kafka,作为节点间通信的中间件。 4. **服务发现(Service...
4. **并发处理**:由于聊天系统通常需要处理大量并发请求,因此需要掌握Java的并发编程技巧,如使用线程池、锁机制、并发集合等。Java Concurrency API提供了丰富的工具类来处理这些问题。 5. **文件传输**:在聊天...
10. **并发控制(Concurrency Control)**:Go的goroutine和channel提供了一种天然的并发控制方式,避免了多线程环境下的锁竞争问题。 在实际应用中,这个Go分布式爬虫项目可能还包括其他特性,如反爬策略识别、IP...
这可能涉及到ORM(对象关系映射)工具,如Entity Framework,用于与数据库交互,或者使用NoSQL数据库如MongoDB来存储非结构化数据。 6. **并发控制(Concurrency Control)**:CSharpSpider可能需要处理多个并发...
同时,事务(Transaction)管理和并发控制(Concurrency Control)对于保证数据库的正确性和可靠性至关重要,可能会涉及到锁机制、两阶段提交等概念。 最后,数据库安全和备份恢复也是重要的内容。如何设置权限、...
8. **数据持久化(Data Persistence)**:搜索引擎需要存储大量数据,可能会使用关系型数据库(如MySQL)、非关系型数据库(如MongoDB)或者文件系统(如HDFS)等,源码中会有相关的数据存储和检索代码。 9. **...
开发者可能使用Java NIO(非阻塞I/O)或Java Concurrency API来优化网络性能,处理并发连接。 3. **多线程**:在视频会议中,多个并发的视频流和音频流需要同步处理,这就需要用到Java的多线程技术。通过创建和管理...
6. **数据库**:SQL语言、关系型数据库(RDBMS)、NoSQL数据库,如MySQL、MongoDB等,涉及查询语句、索引(index)、事务(transaction)和并发控制(concurrency control)等。熟悉这些概念对于开发数据驱动的应用...
JUC(Java Concurrency Utilities)提供了如Executor框架、并发集合、锁和同步器等工具,帮助开发者高效地管理并发任务。此外,NIO(非阻塞I/O)和AIO(异步I/O)进一步提高了服务器处理大量并发连接的能力。 二、...
4. 并发处理(Concurrency):为了提高爬取效率,通常会采用多线程或多进程,或者使用异步I/O模型如`asyncio`。Python的`concurrent.futures`库提供了并发处理的基础,而`Scrapy`框架则内置了高效的并发模型。 5. ...
你可以通过设置 `concurrency` 参数来控制并发数,或使用 `download_delay` 控制每次请求之间的间隔。 ### 8. 处理登录与 cookie 对于需要登录才能访问的网站,Scrapee 可以处理 cookie 和 session。你可以设置...