异步分布式连接
AsyncDistributedConnection 类允许应用程序在多个数据库分片上异步执行多个 SQL 语句。execute() 方法接受多个 SQL 语句以及参数或参数值。通过调用 exdb.connect() 方法并传入参数 nodes、async=True 以及可选参数 nWorkers(用于指定执行语句的独立进程数量)来创建 AsyncDistributedConnection 实例。例如:
nodes = ("localhost:5001", "localhost:5002")
conn = self.exdb.connect(nodes=nodes, async=True, nWorkers=2)
现在,该连接可用于执行返回单个结果集的单个查询,或者执行返回受影响行数的 SQL 插入、更新或删除语句。
或者连接可以并行异步地执行多个语句以生成多个结果集。
例如,以下代码片段演示了如何使用 AsyncDistributedConnection 执行单个 SQL 查询:
nodes = ("localhost:5001", "localhost:5002")
conn = self.exdb.connect(nodes=nodes, async=True, nWorkers=2)
r = conn.execute("SELECT 1,2")
print "len(r)=", len(r)
for k in range(len(r)):
pprint.pprint(r[k])
r = conn.execute("SELECT 1,2,?", (3, ))
print "len(r)=", len(r)
for k in range(len(r)):
pprint.pprint(r[k])
以下代码片段演示了如何使用 AsyncDistributedConnection 异步执行多个 SQL 语句:
nodes = ("localhost:5001", "localhost:5002")
nWorkers = 2
conn = self.exdb.connect(nodes=nodes, async=True, nWorkers=nWorkers)
q = ["INSERT INTO MyTable(pk, value, u2, i1, i2, i4, i8, flt, dbl)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)"] * nWorkers
args = []
for i in xrange(nWorkers):
args.append((i*100, 'str%s' % i, i, i, i, i, i, i*100, i*100.9))
r = conn.execute(q, args)
print "len(r)=", len(r)
for k in range(len(r)):
pprint.pprint(r[k])
q = [
"SELECT COUNT(*) FROM MyTable",
"SELECT SUM(pk) FROM MyTable",
"SELECT SUM(i1) FROM MyTable",
"SELECT SUM(i2) FROM MyTable"
]
r = conn.execute(q, None)
print "len(r)=", len(r)
for k in range(len(r)):
pprint.pprint(r[k])