如何在 Aerospike KV 存储中插入浮点数?
How to insert floating point numbers in Aerospike KV store?
我正在使用 Aerospike 3.40。没有出现具有浮点值的 bin。我正在使用 python 客户端。请帮忙。
服务器本身不支持浮动。它支持整数、字符串、字节、列表和映射。不同的客户端以不同的方式处理不受支持的类型。例如,PHP 客户端将序列化其他类型(如布尔值和浮点数)并将它们存储在字节字段中,然后在读取时反序列化它们。 Python 客户端将从下一个版本 (>= 1.0.38) 开始这样做。
但是,这种方法的局限性在于,不同的客户端(例如 PHP 和 Python)很难读取此类序列化数据,因为它不是使用通用格式序列化的。
用浮点数解决这个问题的一种常见方法是将它们变成整数。例如,如果您有一个名为 'currency' 的 bin,您可以将浮点数乘以 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))
仅供参考,浮点数现在原生支持 作为 aerospike 服务器版本的两倍 >= 3.6.0. Most clients, such as the Python 和 PHP 一个支持将浮点数转换为 as_double.
浮点数可以分为两部分,小数点前和小数点后,将它们存储在两个容器中,并在应用程序代码中利用它们。
但是,在 Aerospike 中创建更多数量的 bin 会产生性能开销,因为每个 bin 将使用一个新的 malloc。
如果从Python切换到任何其他语言不是用例,最好使用更好的序列化机制并将其保存在单个bin中。这意味着每个浮点数只使用一个 bin,并且还会减少 Aerospike 中的数据大小。 Aerospike 中较少的数据量总是有助于提高网络 I/O 的速度,这是缓存的主要目标。
Aerospike 3.6 版本现已支持
我正在使用 Aerospike 3.40。没有出现具有浮点值的 bin。我正在使用 python 客户端。请帮忙。
服务器本身不支持浮动。它支持整数、字符串、字节、列表和映射。不同的客户端以不同的方式处理不受支持的类型。例如,PHP 客户端将序列化其他类型(如布尔值和浮点数)并将它们存储在字节字段中,然后在读取时反序列化它们。 Python 客户端将从下一个版本 (>= 1.0.38) 开始这样做。
但是,这种方法的局限性在于,不同的客户端(例如 PHP 和 Python)很难读取此类序列化数据,因为它不是使用通用格式序列化的。
用浮点数解决这个问题的一种常见方法是将它们变成整数。例如,如果您有一个名为 'currency' 的 bin,您可以将浮点数乘以 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))
仅供参考,浮点数现在原生支持 作为 aerospike 服务器版本的两倍 >= 3.6.0. Most clients, such as the Python 和 PHP 一个支持将浮点数转换为 as_double.
浮点数可以分为两部分,小数点前和小数点后,将它们存储在两个容器中,并在应用程序代码中利用它们。
但是,在 Aerospike 中创建更多数量的 bin 会产生性能开销,因为每个 bin 将使用一个新的 malloc。
如果从Python切换到任何其他语言不是用例,最好使用更好的序列化机制并将其保存在单个bin中。这意味着每个浮点数只使用一个 bin,并且还会减少 Aerospike 中的数据大小。 Aerospike 中较少的数据量总是有助于提高网络 I/O 的速度,这是缓存的主要目标。
Aerospike 3.6 版本现已支持