如何在Aerospike KV存储中插入浮点数字



我正在使用Aerospike 3.40。不显示具有浮点值的Bin。我使用的是python客户端。请帮忙。

Aerospike 3.6版本现在支持它

服务器本机不支持浮点。它支持整数、字符串、字节、列表和映射。不同的客户端以不同的方式处理不支持的类型。例如,PHP客户端将序列化其他类型,如boolean和float,并将它们存储在字节字段中,然后在读取时对它们进行反序列化。Python客户端将从下一个版本(>=1.0.38)开始执行此操作

然而,这种方法的局限性在于,不同的客户端(例如PHP和Python)很难读取这样的序列化数据,因为它不是使用通用格式序列化的。

使用浮点运算解决这一问题的一种常见方法是将它们转换为整数。例如,如果你有一个名为"currency"的bin,你可以将float乘以100,去掉尾数,并将其存储为整数。在离开的路上,你只需除以100。类似的方法是将有效数字存储在一个bin中,将尾数存储在另一个bin,两者都是整数类型,并在读取时重新组合。因此123.456789被存储为v_sig和v_mantissa。

(v_sig, v_mantissa) = str(123.456789).split('.')

在阅读时,你会将两个结合起来

v = float(v_sig)+float("0."+str(v_mantissa))

仅供参考,浮动现在在Aeropike服务器版本>=3.6.0上被本机支持。大多数客户端(如Python和PHP)都支持将浮点转换为as_double。

浮点数可以分为两部分,小数点之前和小数点之后,将它们存储在两个存储箱中,并在应用程序代码中利用它们。

然而,在Aerospike中,创建更多数量的bin会带来性能开销,因为每个bin将使用一个新的malloc。

如果从Python切换到任何其他语言都不是用例,那么最好使用更好的序列化机制并将其保存在单个bin中。这意味着每个浮点数只使用一个bin,也将减少Aerospike中的数据大小。Aerospike中较少的数据量总是有助于提高网络I/O的速度,而网络I/O是缓存的主要目标。

最新更新