胡海华分享 http://blog.sciencenet.cn/u/jgshuhaihua

博文

NetworkX实现2:超大网络数据处理变通

已有 9479 次阅读 2010-10-15 15:00 |个人分类:NetworkX学习笔记|系统分类:科研笔记

昨天晚上突发奇想,想用networkX来跑一下超大节点的网络,看看效果如何。我是这样设置的,有1000000个nodes 每个节点有600条edges。跑了一下,提示数据溢出。算了一下,假设一个节点4 bytes,加上边的数据就是4 + 600 * 4 = 2404 bytes x 1,000,000 超过了 2.4GB,而我实验室的内存才512M,哈哈,不溢出才怪呢。

后来想到一个变通的方法,只有应用cPickle模块把所有的数据存在硬盘里,用的时候再来调用:
import os.path
import cPickle
class LazyGraph:
    def __init__(self,folder):
        self.folder = folder

    def get_node(self,id):
        f = open(os.path.join(self.folder,str(id)),'rb')
        node = cPickle.load(f)
        f.close() # just being paranoid
        return node

    def set_node(self,id,node):
        f = open(os.path.join(self.folder,str(id)),'wb')
        cPickle.dump(node,f,-1) # use highest protocol
        f.close() # just being paranoid

但是这样处理的速度好慢好慢,真的就是龟速
后来在网上查了一下,建议说最好用数据库来处理,唉,看来有空的时候又要学一门数据库语言了,苦啊!!!

https://wap.sciencenet.cn/blog-243747-373577.html

上一篇:NetworkX 实现1:寻找三元组
下一篇:NetworkX:关于边的权重及其画图
收藏 IP: .*| 热度|

1 唐常杰

发表评论 评论 (2 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-20 05:01

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部