我们正在使用MongoDB 2.2.0.数据库包含大约51GB的数据(目前),我想对我们迄今为止收集的用户数据进行一些分析.问题是,它是现场机器,我们现在买不起另一个奴隶.我知道MongoDB有一个读锁定,可能会影响任何特别是复杂查询的写入.有没有办法告诉MongoDB以最低优先级处理我的(特定)查询?
在MongoDB中,读取和写入确实会相互影响.读锁是共享的,但读锁会阻止写锁被捕获,当然在保持写锁时不会发生其他读或写操作.MongoDB操作定期产生,以防止其他线程等待锁定饥饿.您可以在此处详细了解其详细信息.
这对您的用例意味着什么?因为没有办法告诉MongoDB在没有读锁定的情况下访问数据,也没有办法确定请求的优先级(至少现在还没有),这些读取是否会显着影响写入的性能取决于你的"余量"是多少写活动正在进行时可用.
我可以提出的一个建议是,在确定如何运行分析时,而不是扫描整个数据集(即对所有历史数据进行聚合查询),尝试在短时间片上运行较小的聚合查询.这将完成两件事:
根据您无法承担获得另一台服务器的费用 - 您可能会考虑获得一个短暂的AWS实例,该实例可能不是很强大,但可用于对数据集的副本运行长分析查询.在制作数据副本时要小心 - 从生产系统中完全同步将对其造成沉重负担(更有效的方法是使用最近的备份/文件快照从中恢复).
归档时间: |
|
查看次数: |
7393 次 |
最近记录: |