You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效存储图节点一二度连接的嵌套列表数据以降低内存占用?

高压缩率存储方案推荐

方案1:使用Parquet格式存储(优先推荐)

Parquet是列式压缩二进制格式,原生支持Python嵌套列表/数组结构,相比pickle有3-10倍的压缩率,读写速度也更快,pandas可以直接调用:

# 存储
nodes.to_parquet("graph_nodes.parquet", compression="zstd")
# 读取
nodes = pd.read_parquet("graph_nodes.parquet")
  • 优势:不需要改动现有DataFrame结构,不用处理嵌套列表的转换,zstd压缩比高且速度快,是结构化嵌套数据存储的首选。
  • 优化技巧:如果节点ID都是整数,可以先把Zero、First、Second列里的数值根据ID范围转成int32甚至int16类型,可进一步降低存储体积。

方案2:拆分为扁平边表存储(极致压缩推荐)

当前用嵌套列表预存连接关系的结构有大量冗余,把结构拆成两张扁平表,存储体积可以降低一个数量级:

  • 节点表:仅存储所有唯一节点ID,不存关联关系
  • 边表:仅存两列(source_node, target_node),所有一度连接都用边表表示
# 示例边表结构
edges = pd.DataFrame([
    [1,2], [1,5], [2,3], [2,4], [5,6]
], columns=["source", "target"])
  • 优势:完全没有嵌套结构的额外开销,空连接天然不需要存储,不需要单独预存二度关系,需要时可以通过边表join一次直接计算,比预存二度关系节省至少50%以上的空间。
  • 适用场景:二度关系不需要高频读取、可接受临时计算的场景。

方案3:使用HDF5格式存储(适合超大规模分块读取)

如果DataFrame体量超过内存上限,可以用HDF5格式支持分块读写:

# 存储
nodes.to_hdf("graph_nodes.h5", key="nodes", mode="w", complevel=9, complib="blosc")
# 读取
nodes = pd.read_hdf("graph_nodes.h5", key="nodes")
  • 优势:支持按需读取部分数据,不需要全量加载进内存,适合TB级数据的存储。

内容的提问来源于stack exchange,提问作者Patrick Nasser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 06:15:07