私は現在、Aerospike Python Client を実装して、Redis 実装と一緒にベンチマークし、どちらが高速で安定しているかを確認しています。
私はまだ赤ちゃんの段階にあり、現在、ユニットテストの基本機能をテストしています。たとえば、セットにレコードを正しく追加した場合などです。そのため、それらをカウントする関数を作成したいと考えています。
Aerospike's Documentationで見たのは、次のことです。
「クエリで集計を実行するには、まずデータベースに UDF を登録する必要があります」。
これは、Aerospike で集計、カウント、およびその他のカスタム機能を実行する方法として推奨されているようです。
したがって、私が持っているセット内のレコードを数えるために、次のモジュールを作成しました。
# "counter.lua"
function count(s)
return s : map(function() return 1 end) : reduce (function(a,b) return a+b end)
end
aerospike python クライアントの関数を使用して UDF(User Defined Function) モジュールを登録しようとしています:
udf_put(ファイル名、udf_type、ポリシー)
私のコードは次のとおりです。
# aerospike_client.py:
# "udf_put" parameters
policy = {'timeout': 1000}
lua_module = os.path.join(os.path.dirname(os.path.realpath(__file__)), "counter.lua") #same folder
udf_type = aerospike.UDF_TYPE_LUA # equals to "0", which is for "Lua"
self.client.udf_put(lua_module, udf_type, policy) # Exception is thrown here
query = self.client.query(self.aero_namespace, self.aero_set)
query.select()
result = query.apply('counter', 'count')
例外がスローされます:
exceptions.Exception: (-2L, 'Filename should be a string', 'src/main/client/udf.c', 82)
- 私が行方不明または間違っていることはありますか?
- Cコードをコンパイルせずに「デバッグ」する方法はありますか?
- セット内のレコードを数えるための他の方法はありますか? または、Lua モジュールで問題ありませんか?