在 MySQL 中存储非常大的整数
Storing really huge ints in MySQL
是否可以在 MySQL 中有效地存储大整数?不像 bigint
那样大,更像是第 1000 个 Catalan number 左右,而且至少有数百个。更有可能,成千上万。存储和加载值的速度是一个优先事项。
这些数字是使用 gmpy2、Python 的 GMP 包装器创建的。所以如果存储的数字能够以相同的格式访问,那就太好了,但如果不能,我总是可以写一个转换器。
我会将 mpz
整数转换为 Python 字符串(对于 v2)或字节(对于 v3),并将其保存为 mysql 中的 BLOB 实体。以下是使用 Python 2.
的相关 gmpy2
命令
>>> import gmpy2
>>> gmpy2.mpz(1234)
mpz(1234)
>>> gmpy2.to_binary(mpz(1234))
'\x01\x01\xd2\x04'
>>> gmpy2.from_binary('\x01\x01\xd2\x04')
mpz(1234)
>>>
gmpy2.to_binary
将任意 gmpy2
对象转换为二进制字符串。 gmpy2.from_binary
会将二进制字符串转换回 gmpy2
对象。对象的类型被编码到二进制字符串中,因此您无需跟踪对象的类型。
免责声明:我维护 gmpy2。
是否可以在 MySQL 中有效地存储大整数?不像 bigint
那样大,更像是第 1000 个 Catalan number 左右,而且至少有数百个。更有可能,成千上万。存储和加载值的速度是一个优先事项。
这些数字是使用 gmpy2、Python 的 GMP 包装器创建的。所以如果存储的数字能够以相同的格式访问,那就太好了,但如果不能,我总是可以写一个转换器。
我会将 mpz
整数转换为 Python 字符串(对于 v2)或字节(对于 v3),并将其保存为 mysql 中的 BLOB 实体。以下是使用 Python 2.
gmpy2
命令
>>> import gmpy2
>>> gmpy2.mpz(1234)
mpz(1234)
>>> gmpy2.to_binary(mpz(1234))
'\x01\x01\xd2\x04'
>>> gmpy2.from_binary('\x01\x01\xd2\x04')
mpz(1234)
>>>
gmpy2.to_binary
将任意 gmpy2
对象转换为二进制字符串。 gmpy2.from_binary
会将二进制字符串转换回 gmpy2
对象。对象的类型被编码到二进制字符串中,因此您无需跟踪对象的类型。
免责声明:我维护 gmpy2。