把你所有的mongos放在一个地方的工具

mongopool的Python项目详细描述


您的所有mongos都在一个地方

说明

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实例

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java附加两个数组   java如何在Extjs的不同页面中使用相同的存储   java Jung,大顶点的布局重叠,图形出现在奇怪的位置   java如何在Android中通过画布绘制圆?   java验证库设计模式选择   java研磨机未知标记“timedTests”   java Android领域子类实例方法   java使用resteasy/jaxrs从请求负载接收两种类型的数据   缓冲策略Java缓冲策略有时不能正确绘制   java跟踪棋子   密度无关像素如何在java中锐化图像缩略图?   java如何在MongoDB更新查询中编写(或)更新   java A*寻路游戏系统退出问题   java在安卓中读取xml的最佳方式是什么?   通过反射调用的方法的java抑制警告   安卓 java。语言错误:信号11(SIGSEGV),代码10(?),故障地址006e006f   java lombok 1.18.2使用DexBuilderForDebug抛出TransformClasses   java JOptionPane CD对话框按钮?   java只返回json中的一些值,而不是完整实体对象   java包不存在错误,请稍后重试