如何在Memgraph中存储30位超大整数?
在Memgraph中存储30位超大整数的可行方案
以下是几种无需丢失精度的存储方案,可根据你的业务需求选择:
字符串存储
这是最直接的方案,将30位超大整数转换为字符串类型存储,完全避免精度丢失。- 注意:若需要对该数值进行运算,需在应用层(如Python、Java)将字符串转换为对应大整数类型(Python的
int、Java的BigInteger)处理后,再将结果转回字符串存入Memgraph;Cypher查询本身无法直接对字符串形式的大整数执行数值运算。 - 示例Cypher语句:
CREATE (n:LargeNumber {value: "123456789012345678901234567890"})
- 注意:若需要对该数值进行运算,需在应用层(如Python、Java)将字符串转换为对应大整数类型(Python的
拆分片段存储
将30位大整数拆分为多个可被64位整数容纳的片段(比如按高位、低位拆分,或按每15位拆分),分别存储为不同的属性。- 优势:若仅需在Memgraph内部做大小比较,可通过先比较高位片段、再比较低位片段的逻辑实现;复杂运算仍需在应用层拼接片段后处理。
- 示例:将
123456789012345678901234567890拆分为高位123456789012345和低位678901234567890,存储语句:CREATE (n:LargeNumber {high_segment: 123456789012345, low_segment: 678901234567890})
二进制序列化存储
利用Memgraph的blob类型,在应用层将超大整数序列化为二进制字节数组后存储,读取时再反序列化为大整数。- 优势:相比字符串更节省存储空间,适合对存储效率有要求的场景;同样,数值运算需在应用层完成。
- 示例(Python端逻辑):
large_num = 123456789012345678901234567890 # 序列化为字节数组 num_blob = large_num.to_bytes((large_num.bit_length() + 7) // 8, byteorder='big') # 传入Memgraph执行存储 query = "CREATE (n:LargeNumber {value: $blob})" memgraph_client.execute(query, parameters={"blob": num_blob})
内容的提问来源于stack exchange,提问作者ShymPi1999
相关产品推荐
相关产品推荐

