连接实用程序

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操作数组上的字符串   java JAXB内容未实例化   图形在Java中如何绘制垂直居中的字符串?   java Apache Ant:使用Junit时出现NoClassDefFoundError   java无法从服务器上运行perl脚本   如何在java中沿树进行预排序遍历,并打印0和1以对应每个节点上的特定字符?   java如何创建。p12文件?   java线程访问无效   java只匹配命名空间中的XML节点,而不知道NS前缀   从java获取2d arraylist元素   数组Java动态集合对象   java Xpath通过通配符或布尔运算查找以相同名称开头的节点?   java注释元素类型   java在中看不到Super()。反编译后的类文件