把你所有的mongos放在一个地方的工具
mongopool的Python项目详细描述
您的所有mongos都在一个地方
- Description
- Install
- Usage
- Basic Example
- Multiple databases on the same cluster
- Dynamic paths
- Connecting to a replicaSet
- Setting a timeout
- Custom connection classes support
- Setting it up
说明
MongoPool是管理您与不同 群集,将数据库映射到客户端,并允许您仅使用 不用担心创建和管理连接的数据库名称
你永远不需要在任何地方创建mongoclient 再次访问数据库,使您能够编写漂亮的 可维护代码。使用Mongopool,您将保持连接 信息放在一个地方,并允许您在 需要。
在Ubervu,我们有信心使用它管理超过25个Mongo实例 为客户提供优质服务##安装
安装
Pypi
$ sudo pip install mongopool
手动
$ git clone https://github.com/uberVU/mongopool
$ cd mongopool
$ sudo python setup.py install
用法
基本示例
你要做的就是建立一个 包含连接到 集群,实例化MongoPool,通过dot访问数据库 符号。
>>>config=[{'cluster1':{'host':'127.0.0.1','port':27017,'dbpath':'blogs'}},...{'cluster2':{'host':'127.0.0.1','port':27018,'dbpath':'posts'}}]>>>mongopool=MongoPool(config)>>>mongopool.blogsDatabase(MongoClient('127.0.0.1',27017),u'blogs')>>>mongopool.postsDatabase(MongoClient('127.0.0.1',27018),u'posts')
同一集群上的多个数据库
但是如果你想同时使用多个数据库 集群?可以将dbpath指定为包含数据库的数组 以下示例中的名称:
>>>config=[{'cluster1':{'host':'127.0.0.1','port':27017,'dbpath':['blogs','posts']}}]>>>mongopool=MongoPool(config)>>>mongopool.blogsDatabase(MongoClient('127.0.0.1',27017),u'blogs')>>>mongopool.postsDatabase(MongoClient('127.0.0.1',27017),u'posts')``
动态路径
您可能已经自动创建了数据库,如下所示 命名模式在这种情况下,不可能全部加上 dbpath中群集上的数据库因此,您可以将其作为 regexp模式假设您将评论保存在单独的 每个月的数据库,命名注释
>>>config=[{'cluster1':{'host':'127.0.0.1','port':27017,'dbpath':'comments_\d*'}}]>>>mongopool=MongoPool(config)>>>mongopool.comments_012014Database(MongoClient('127.0.0.1',27017),u'comments_012014')>>>mongopool.comments_032014Database(MongoClient('127.0.0.1',27017),u'comments_032014')``
Caution:这是一个很强的特性,但是应该小心使用。 dbpath将按照您将它们放入配置中的顺序进行匹配 所以一定要从最特别到最 为了避免创建不正确的映射并连接到 错误的群集。
错误
config=[{'cluster1':{'host':'127.0.0.1','port':27017,'dbpath':'.*'}},{'cluster2':{'host':'127.0.0.1','port':27017,'dbpath':['blogs','comments'}}]
正确
config=[{'cluster1':{'host':'127.0.0.1','port':27017,'dbpath':['blogs','comments'}},{'cluster2':{'host':'127.0.0.1','port':27017,'dbpath':'.*'}}]
连接到复制集
MongoPool还管理到复制集的连接您只需在配置中添加副本集的名称。此外,如果您希望read_首选项与PRIMARY不同,可以在配置中指定它
>>>config=[{'cluster1':{'host':'127.0.0.1','port':27018,'replicaSet':'rset0',...'read_preference':'secondary','dbpath':'blogs'}}]>>>mongopool=MongoPool(config)>>>mongopool.blogsDatabase(MongoReplicaSetClient([u'127.0.0.1:27019',u'127.0.0.1:27020',u'127.0.0.1:27018']),u'blogs')
设置超时
默认情况下,MongoClient和mongorelicasetclient没有设置超时,尽管有时它很方便要设置连接超时,可以在实例化mongopool时将其作为第二个参数传递,也可以使用set_timeout方法,该方法将 使用新超时重新创建所有连接并创建所有新连接 与新值的连接
mongopool=MongoPool(config,network_timeout=2)...mongopool.set_timeout(network_timeout=5)
自定义连接类支持
如果要使用自定义连接类而不是MongoClient和mongorelicasetclient,可以通过传递两个可选参数来完成此操作:connection_class和rset_connection_class
mongopool=MongoPool(config,connection_class=MyClass,rset_connection_class=MyOther(Class)
设置它
除了这个项目,我们还提供了一个示例配置文件,以便轻松开始。为了使用它,您必须在不同的端口上启动多个mongod实例为此,可以运行start_instances.sh脚本。如果不想打开许多mongod实例,可以将配置文件中的所有端口值更改为27017,并删除使用复制集的label3项
# make sure that you are in the mongopool main directory $ cd mongopool # run the provided script or modify sample_config.yml file $ ./start_instances.sh $ python
然后运行以下命令:
pythonimportosimportyamlfrommongopoolimportMongoPoolfilename=os.path.join(os.getcwd(),'sample\_config.yml')options=yaml.load(open(filename))config=options['mongopool']pool=MongoPool(config)
现在你应该有一个可以工作的Mongopool实例你可以玩的。完成后,运行:
$ ./clean\_instances.sh
这将确保删除所有创建的数据库,并关闭所有mongod实例