Aerospike:如何对 PK 执行 IN 查询
Aerospike: How to perform IN query on PK
如何在 aerospike 中执行(sql 类似)IN 查询。
为此我们需要一个 UDF 吗?
像这样:Select * from ns.set where PK in (1,2,3)
如果这需要一个 UDF 如何处理它,因为 UDF 是在一个键上执行的:
EXECUTE <module>.<function>(<args>) ON <ns>[.<set>] WHERE PK = <key>
在 Ver 3.12.1+ 中,如果您将主键存储在一个 bin 中,然后 运行 在该 bin 上进行谓词过滤,则可以 运行 这样的查询。参见 http://www.aerospike.com/docs/guide/predicate.html
默认情况下,Aerospike 不会在您分配时以原始字符串或数字形式存储 PK。它存储 PK+Set 名称的 RIPEMD160 哈希。
您基本上是在查看通过键列表检索记录。这是 Aerospike 中的批量读取操作。 Aerospike 的每个语言客户端都应该具有此功能。
例如,在 Python 客户端中,这是 Client.get_many 方法:
from __future__ import print_function
import aerospike
from aerospike.exception import AerospikeError
import sys
config = { 'hosts': [('127.0.0.1', 3000)] }
client = aerospike.client(config).connect()
try:
# assume the fourth key has no matching record
keys = [
('test', 'demo', '1'),
('test', 'demo', '2'),
('test', 'demo', '3'),
('test', 'demo', '4')
]
records = client.get_many(keys)
print records
except AerospikeError as e:
print("Error: {0} [{1}]".format(e.msg, e.code))
sys.exit(1)
finally:
client.close()
类似地,在 Java 客户端中,AerospikeClient.get() 方法可以获取键列表。
如何在 aerospike 中执行(sql 类似)IN 查询。 为此我们需要一个 UDF 吗?
像这样:Select * from ns.set where PK in (1,2,3)
如果这需要一个 UDF 如何处理它,因为 UDF 是在一个键上执行的:
EXECUTE <module>.<function>(<args>) ON <ns>[.<set>] WHERE PK = <key>
在 Ver 3.12.1+ 中,如果您将主键存储在一个 bin 中,然后 运行 在该 bin 上进行谓词过滤,则可以 运行 这样的查询。参见 http://www.aerospike.com/docs/guide/predicate.html
默认情况下,Aerospike 不会在您分配时以原始字符串或数字形式存储 PK。它存储 PK+Set 名称的 RIPEMD160 哈希。
您基本上是在查看通过键列表检索记录。这是 Aerospike 中的批量读取操作。 Aerospike 的每个语言客户端都应该具有此功能。
例如,在 Python 客户端中,这是 Client.get_many 方法:
from __future__ import print_function
import aerospike
from aerospike.exception import AerospikeError
import sys
config = { 'hosts': [('127.0.0.1', 3000)] }
client = aerospike.client(config).connect()
try:
# assume the fourth key has no matching record
keys = [
('test', 'demo', '1'),
('test', 'demo', '2'),
('test', 'demo', '3'),
('test', 'demo', '4')
]
records = client.get_many(keys)
print records
except AerospikeError as e:
print("Error: {0} [{1}]".format(e.msg, e.code))
sys.exit(1)
finally:
client.close()
类似地,在 Java 客户端中,AerospikeClient.get() 方法可以获取键列表。