连接实用程序

nydus的Python项目详细描述


通用数据库实用程序,包括连接群集和路由,因此您可以像pro一样进行扩展。

下面的示例创建一个redis连接集群,该集群将基于哈希键的简单模数查找来分发读写操作:

fromnydus.dbimportcreate_clusterredis=create_cluster({'backend':'nydus.db.backends.redis.Redis','router':'nydus.db.routers.keyvalue.PartitionRouter','hosts':{0:{'db':0},1:{'db':1},2:{'db':2},}})res=redis.incr('foo')assertres==1

nydus.db.创建群集

create_cluster函数是一个基于简单dict配置配置Cluster的简单助手。

有两个必需的关键字参数:

  • backend:后端类的完整路径,它应该扩展nydus.db.backends.BaseConnection

  • hosts:一个字典,其中键是有序的数值,结果是连接选项的dict。

    (这些键是数值,只是为了便于配置时的可读性)

  • defaults:所有主机的默认设置字典。

或者,您也可以为router指定一个值,它是路由器类的完整路径, 必须扩展nydus.db.routers.BaseRouter

分布式查询

在某些情况下,您可能希望在多个节点上执行查询(并行)。NYDUS有内置的支持,当任何路由功能 返回一组节点:

fromnydus.dbimportcreate_cluster>>># by not specifying a router all queries are executed on all hostsredis=create_cluster({'backend':'nydus.db.backends.redis.Redis','hosts':{0:{'db':0},1:{'db':1},2:{'db':2},}})>>># map the query over all connections returned by the default routerres=redis.incr('foo')>>>asserttype(res)==listassertlen(res)==3

您还可以通过连接(同样,由路由器返回)映射许多查询(利用内部队列):

withredis.map()asconn:results=[conn.incr(k)forkinkeys]

从0.5.0版开始,map()函数现在支持管道,包含的redis后端将管道命令 只要可能。

redis

nydus最初是作为一个工具包设计的,用于在disfs中扩展redis的使用。尽管它确实提供了 一个用于构建不是redis的集群的框架,大部分的支持都用于提供实用程序 用于在redis集群上路由和查询。

您可以通过指定连接的完整路径来配置redis客户端:

redis=create_cluster({'backend':'nydus.db.backends.redis.Redis','hosts':{0:{'db':0},},})

可用的主机选项有:

  • 主持人
  • 端口
  • 分贝
  • 超时
  • 密码
  • 标识符

redis客户端还通过map命令支持管道。这意味着所有命令最多都会命中服务器 从一次起:

withredis.map()asconn:conn.set('a',1)conn.incr('a')results=[conn.get('a'),conn.get('b')]results['a']==2results['b']==None

简单分区路由器

还有几个内置路由选项。最简单的是一个简单的分区路由器,它只是一个简单的 散列键:

redis=create_cluster({'backend':'nydus.db.backends.redis.Redis','router':'nydus.db.routers.keyvalue.PartitionRouter','hosts':{0:{'db':0},},})

一致哈希路由器

作为对哈希的改进,nydus提供了一个基于ketama的一致哈希路由器:

redis=create_cluster({'backend':'nydus.db.backends.redis.Redis','router':'nydus.db.routers.keyvalue.ConsistentHashingRouter','hosts':{0:{'db':0},},})

循环路由器

分发查询的另一个选项是循环路由器:

redis=create_cluster({'backend':'nydus.db.backends.redis.Redis','router':'nydus.db.routers.RoundRobinRouter','hosts':{0:{'db':0},},})

皮卡萨

支持pycassa(cassandra)集群的基本连接管理,但我们使用非标准语法 在这种情况下,将群集创建为路由行为和每个连接选项是不有用的:

pycassa=create_cluster({'backend':'nydus.db.backends.pycassa.Pycassa','hosts':['localhost'],'keyspace':'test',})

注意

pycassa在内部处理主机的路由,这意味着像map这样的东西没有影响。

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

推荐PyPI第三方库


热门话题
java连接usb到uart设备到安卓设备>3.1   可以强制Php中的web应用程序与Java中的桌面应用程序一起工作吗?   java为什么自定义系统类加载器不工作?   数组在Java中解析具有多个分隔符的字符串   PMD Java 8德米特定律   JavaSpringMVC表单验证不适用于嵌套的复杂类型   让Eclipse Java组织导入以使用Google checkstyle   java Appium:无法创建新会话   java如何在数组中声明新字段   java如何解决“无法初始化类org.apache.cassandra.config.DatabaseDescriptor”?   java AsyncTask创建socket   java向@CreatedBy添加更多信息   如何在ubuntu中运行包含大量jars依赖项的java文件   java如何使用<s:select>标记并在中休眠来填充下拉列表?   java获取错误:找不到符号变量“level”和“next_level_button”   javaweb应用中基于UI的ajax显示代码流   Java长到MySql   java JvisualVM:奇怪的应用程序行为   ubuntu将Java程序的输出结果保存到一个文件中