在大型 mongoDB 上,我有 2 种不同的读取用例和 2 种不同的写入/更新类型。
- 阅读 1:按索引查找 -> 对此毫无疑问。这就像一个魅力 - 只要索引适合内存/内存。
- 读取 2:逐行读取,就像一个批处理脚本逐个读取日志文件。
- write 1: insert - 追加一个新的数据集或文档。
- write 2:更新数据,直接寻址或通过索引找到。
现在我想知道 mongoDB 是否能够“优先”不同的写入任务。我有一个集合,它不需要“实时”写入和立即可用的数据。使用一个慢队列,不着急处理这些写任务就足够了。但是,也有一些写入语句应尽快处理并以最小延迟(如果有)可用。
mongoDB 是否允许我区分高(尽快)和低优先级(队列)写入/更新?
目前没有用于写入(或读取,尽管您可以将读取发送到辅助节点)的优先级系统 - 您将获得的最接近的东西就是让步。对于长时间运行的操作以及它预测将从磁盘中分页数据的操作,MongoDB 将产生锁并允许其他操作通过,本质上是交错操作:
如果您想确保不太重要的写入受到一定程度的限制,您可以通过确保它们被复制 W=2、REPLICAS_SAFE 或类似的写入(取决于您的驱动程序)来限制它们。有关 MongoDB 方面此类实现背后的命令,请参见此处 - 查看您的驱动程序文档以获取相关等效项。
http://www.mongodb.org/display/DOCS/getLastError+Command#getLastErrorCommand-%7B%7Bw%7D%7D
然后会有一点延迟,因为写入等待复制到辅助节点,从而允许您的其他更重要的写入操作写入锁。
http://www.mongodb.org/display/DOCS/How+does+concurrency+work
就未来而言,随着 2.2 即将发布,您将获得数据库级锁定,因此只要您的 2 个不同的配置文件/优先级位于不同的数据库中,您就应该没有锁争用(当然,IO/RAM 争用可能仍然存在)。
最后,就其他要查看的内容而言,对于逐行读取,我会查看上限集合和可尾游标 - 看看它们是否适合您的用例:
http://www.mongodb.org/display/DOCS/Tailable+Cursors