连接工具
项目描述
通用数据库工具,包括连接集群和路由,让您像专业人士一样扩展。
以下示例创建了一个Redis连接集群,它将根据哈希键的简单模数查找来分配读和写操作
from nydus.db import create_cluster
redis = 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')
assert res == 1
nydus.db.create_cluster
create_cluster函数是一个简单的助手,用于根据简单的字典配置配置基于Cluster。
有两个必需的关键字参数
backend:后端类的完整路径,它应该扩展nydus.db.backends.BaseConnection。
hosts:一个字典,键是一个有序的数值,结果是连接选项的字典。
(键是数值,只是为了在配置中提高可读性)
defaults:所有主机继承的默认设置字典。
可选地,您还可以指定router的值,它是路由类的完整路径,它必须扩展nydus.db.routers.BaseRouter。
分布式查询
在某些情况下,您可能需要在多个节点上(并行)执行查询。当任何路由函数返回节点集群时,Nydus 内置了对这一功能的支持。
from nydus.db import create_cluster
>>>
# by not specifying a router all queries are executed on all hosts
redis = 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 router
res = redis.incr('foo')
>>>
assert type(res) == list
assert len(res) == 3
您还可以通过内部队列映射多个查询到连接上(再次,由路由器返回)。
with redis.map() as conn:
results = [conn.incr(k) for k in keys]
从版本 0.5.0 开始,map() 函数现在支持管道,并包含的 Redis 后端将在可能的情况下使用管道命令。
Redis
Nydus 最初被设计为一个工具包,用于扩展在 DISQUS 中 Redis 的使用。虽然它提供了一个用于构建非 Redis 集群的框架,但大部分支持都集中在提供对 Redis 集群进行路由和查询的实用工具上。
您可以通过指定其完整路径来配置 Redis 客户端的连接。
redis = create_cluster({
'backend': 'nydus.db.backends.redis.Redis',
'hosts': {
0: {'db': 0},
},
})
可用的主机选项包括
主机
端口
数据库
超时
密码
标识符
Redis 客户端还支持通过 map 命令使用管道。这意味着所有命令最多只会击中服务器一次。
with redis.map() as conn:
conn.set('a', 1)
conn.incr('a')
results = [conn.get('a'), conn.get('b')]
results['a'] == 2
results['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
支持 pycassa(Cassandra)集群的基本连接管理,但我们使用非标准语法来创建集群,因为在这种情况下路由行为和每个连接的选项都不太有用。
pycassa = create_cluster({
'backend': 'nydus.db.backends.pycassa.Pycassa',
'hosts': ['localhost'],
'keyspace': 'test',
})
项目详情
nydus-0.11.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e7d12023160ec829a4394592a24162c96fe6ab1ea6c38a1543279595ae39cd45 |
|
MD5 | d7a69e5afd9f7606a61168791484d4c3 |
|
BLAKE2b-256 | 452c15635d5e23cc920a2880cb0e0301ab1b57d92559c41b07b250137cb3b08c |