跳转到主要内容

连接工具

项目描述

通用数据库工具,包括连接集群和路由,让您像专业人士一样扩展。

以下示例创建了一个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 (28.2 kB 查看哈希值)

上传时间

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面