我正在使用Aerospike 3.40。具有浮点值的Bin不会出现。我正在使用python客户端。请帮忙。
答案 0 :(得分:6)
现在支持Aerospike 3.6版
答案 1 :(得分:5)
服务器本身不支持浮点数。它支持整数,字符串,字节,列表和映射。不同的客户端以不同的方式处理不支持的类型。例如,PHP客户端将序列化其他类型(如boolean和float)并将它们存储在bytes字段中,然后在读取时对它们进行反序列化。 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))
仅供参考,花车现在原本支持,因为在空气动力学服务器版本> = 3.6.0上翻倍。大多数客户端(例如Python和PHP 1)都支持将浮点数转换为as_double。
答案 2 :(得分:1)
浮点数可以分为两部分,在小数点之前和之后,并将它们存储在两个箱中并在应用程序代码中利用它们。
但是,在Aerospike中创建更多数量的垃圾箱会产生性能开销,因为每个垃圾箱将使用新的malloc。
如果从Python切换到任何其他语言不是用例,最好使用更好的序列化机制并将其保存在单个bin中。这意味着每个浮动数字只使用一个bin,并且还会减少Aerospike中的数据大小。 Aerospike中的少量数据总是有助于提高网络I / O的速度,而网络I / O是缓存的主要目标。