2017-05-15 14 views
3

aerospikeでINクエリを実行する方法(sqlのような)。 これにはUDFが必要ですか?このようなAerospike:PKでINクエリを実行する方法

何か:Select * from ns.set where PK in (1,2,3)

これはUDFは、キー上で実行されるよう、それについて移動する方法UDFを必要とする場合:版3.12.1+で

EXECUTE <module>.<function>(<args>) ON <ns>[.<set>] WHERE PK = <key> 

答えて

2

基本的には、キーのリストでレコードを取得します。これは、Aerospikeのバッチ読み取り操作です。 Aerospikeのすべての言語クライアントは、この機能を備えている必要があります。

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()方法は、キーのリストを取ることができます。

は例えば、Pythonクライアントでは、これはClient.get_many方法です。

+0

私は完全に疑問を誤解しました!しかし、別の問題として、abc:123、abc:456、abc:234 ... xyz:123、xyz:456 ..などの複合キーを持っていて、abc:*キービンにキーを格納していれば、ver 3.12.1+で述語フィルタリングを使用できるようになりました。右? – pgupta

+0

述語フィルタリングは、ビン情報をイントロスペクトして、一致するレコードをすばやく見つけるのに最適です。 –

2

、あなたがそのように実行することができます主キーをビンに格納してからそのビンで述語フィルタリングを実行するかどうかを問い合わせます。 http://www.aerospike.com/docs/guide/predicate.html

Aerospikeはデフォルトで、PKを生の文字列または数値形式で保存しません。 PK +セット名のRIPEMD160ハッシュを格納します。

関連する問題