Hash Aerospike对UDF模块使用哪种哈希函数?
Aerospike允许列出已加载的UDF模块。下面是一个aql-示例():Hash Aerospike对UDF模块使用哪种哈希函数?,hash,user-defined-functions,aerospike,nosql,Hash,User Defined Functions,Aerospike,Nosql,Aerospike允许列出已加载的UDF模块。下面是一个aql-示例(): 显示模块 结果包含hash字段: aql> show modules +---------------------------+-------+------------------------+ | module | type | hash | +---------------------------+-------+----------
显示模块
结果包含hash
字段:
aql> show modules
+---------------------------+-------+------------------------+
| module | type | hash |
+---------------------------+-------+------------------------+
| "example1.lua" | "lua" | "033671e05067888fce09" |
| "example2.lua" | "lua" | "07b42082cca8e73a96b2" |
+---------------------------+-------+------------------------+
2 rows in set (0.000 secs)
我的问题(1):我有example1.lua
文件(UDF模块的源),如何计算(并检查)它的散列
我的假设:
因此,备选问题(2)是:如何检查已注册UDF模块的版本?它是以下3个字段的20字节sha1哈希,表示为json文档。json文档是字符串表示,没有任何换行符或EOF字符
"content64" : base64 encoding of whole file
"type" : LUA
"name" : filename
例如:
{"content64": "ZnVuY3Rpb24gcHJpbnRfbWV0YShyZWMpCgoJaWYgbm90IGFlcm9zcGlrZTpleGlzdHMocmVjKSB0aGVuCgkJcmV0dXJuICJub3JlYyIKCWVuZAoKCWluZm8ocmVjb3JkLnR0bChyZWMpKQoJaW5mbyhyZWNvcmQubGFzdF91cGRhdGVfdGltZShyZWMpKQoJcmV0dXJuIHJlY29yZC5sYXN0X3VwZGF0ZV90aW1lKHJlYykKZW5kCg==", "type": "LUA", "name": "lut.lua"}
交叉检查:(忽略为echo命令而添加的“”转义字符)
除了@sunil答案之外 Python示例 此例程使用AeroSpike的UDF计算LUA模块的哈希值,该UDF是用python 3编写的
导入base64
导入hashlib
#您可以传递一个参数-完整路径,然后提取
#名字。但这里我们只有这种幼稚的实现
def udf_module_get_hash(module_PATH,module_NAME_,不带DIR_,带EXT):
打开(模块_路径,'rb')作为f:
content=f.read()
b64=base64.b64编码(内容)
meta='{“content64”:“{0}”,“type”:“LUA”,“name”:“{1}”}”。格式(
b64.解码('ascii'),
模块名称不带目录,带扩展
)
sha1=hashlib.sha1()
sha1.update(meta.encode())
h=sha1.hexdigest()
#h类似于“052ac7359e46d1c6c97a5bf1a9854739cd9e481a”
返回h
我在模块源snd上尝试了sha1,但它不匹配。我应该在计算散列之前加入文件名和模块内容吗?对不起,我之前的回答跳过了很多细节。请看更新的。
$ echo -n {\"content64\": \"ZnVuY3Rpb24gcHJpbnRfbWV0YShyZWMpCgoJaWYgbm90IGFlcm9zcGlrZTpleGlzdHMocmVjKSB0aGVuCgkJcmV0dXJuICJub3JlYyIKCWVuZAoKCWluZm8ocmVjb3JkLnR0bChyZWMpKQoJaW5mbyhyZWNvcmQubGFzdF91cGRhdGVfdGltZShyZWMpKQoJcmV0dXJuIHJlY29yZC5sYXN0X3VwZGF0ZV90aW1lKHJlYykKZW5kCg==\", \"type\": \"LUA\", \"name\": \"lut.lua\"} | sha1sum
998354a59337b229e2dd777a3288e8e8f33568a5 -
$ asinfo -v "udf-list"
filename=lut.lua,hash=998354a59337b229e2dd777a3288e8e8f33568a5,type=LUA;