Mongodb 锁定预防

Mongodb lock prevention

在查看 mongodb 文档和 pymongo API 一段时间后,我仍然不清楚我将采取何种路线作为前进的方向(现在比开始时更加困惑)。我的问题与锁有关……与其说是我已经测试并发现存在主要的并发问题,不如说是我不想在事后 运行 进入它们。

我有一个包含多个函数的 tkinter 脚本,它们都需要访问同一个文档集合,并且大多数都访问该集合中的同一个文档。

client = MongoClient()

def 1 ():
    glob_client  = client['ALPHA']['A-Z']
    #do work:
    """Also call subprocesses that use the same database document (glob_client) in another script.
    There can be 3 -10 instances of this subprocess running, listening to various http streams in a while loop, 
    collecting data that can come in at 100's of times per second."""

def2 ():
    glob_client  = client['ALPHA']['A-Z']
... 
def32 ():
    glob_client  = client['ALPHA']['A-Z']

和被调用的子流程(在单独的脚本中),可能有多个实例:

client = MongoClient()
glob_client  = client['ALPHA']['A-Z']

while True:
    #do work with glob_client; updates, push, pull, reads,   

那么,在这种情况下,只在每个函数中使用 client.close() 就足够了吗?

def 1 ():
    glob_client  = client['ALPHA']['A-Z']
    #do work
    client.close()

同样在 while 循环中:

while True:
    #do work with glob_client; updates, push, pull, reads, 
    Client.close()

这就足够了吗,还是我应该在这种情况下寻求分片?或者我应该回到 SQL!

Mongodb 3.0.6 32 位,pymongo 3.03,python 2.7.

为了在这种情况下避免锁定,我将客户端放在一个单独的脚本中,foo.py:

import pymongo

CLIENT = pymongo.MongoClient(maxPoolSize=None,w=1)
COLLEC = CLIENT ['ABC']['XYZ']

然后在各种脚本中将集合导入我需要的任何地方:

from foo import COLLEC