我沉迷于使用Python和NetworkX来分析图表,随着我了解的越来越多,我想使用越来越多的数据(我想我正在成为一个数据迷:-)。最终,我认为我的NetworkX图(存储为dict的dict)将超出系统内存。我知道我可以添加更多的内存,但我想知道是否有办法将NetworkX与Hbase或类似的解决方案集成?
我环顾四周,找不到任何东西,但也找不到任何与允许简单的MySQL后端相关的东西。
这可能吗?是否存在允许连接到某种持久性存储的任何东西?
谢谢!
更新:我记得在“初创企业社交网络分析”中看到过这个主题,作者谈到了其他存储方法(包括hbase、s3等),但没有说明如何做到这一点,或者如果可能的话。
有一个名为Cloudlight的SQLlite3支持的NetworkX实现。 https://www.assembla.com/spaces/cloudlight/wiki/Tutorial
我想看看使用硬盘的最佳方式。在过去,我制作了多个图形,并将它们保存为.dot文件。然后在记忆中混合了一些。但不是最好的解决办法。
存储图形的容器通常有两种类型:
真正的图形数据库:例如,Neo4J,agamennon,GraphDB和AllegroGraph;它们不仅存储图形,而且还理解图形是,因此,例如,您可以查询这些 数据库,例如从 节点X和节点Y?
静态图形容器:Twitter的MySQL-adapted FlockDB是这里最著名的示例。这些数据库可以存储和检索 图表很好;但是要查询图表本身,必须首先 从数据库中检索图形,然后使用库(例如Python的 优秀的网络x)来查询图形本身。
下面我讨论的基于redis的图形容器属于第二类,不过显然redis也非常适合第一类的容器,正如redis-graph所证明的,这是一个非常小的python包,用于在redis中实现图形数据库。
redis在这里工作得很好。
Redis是一个适合生产使用的重载、持久的数据存储,但它也足够简单,可以用于命令行分析。
Redis与其他数据库的不同之处在于它有多种数据结构类型;这里我建议使用hash数据类型。使用这个redis数据结构,您可以非常接近地模拟“字典列表”,这是一种用于存储图形的传统模式,其中列表中的每个项都是一个键控到这些边起源的节点的边字典。
您需要首先安装redis和python客户机。DeGizmo Blog有一个极好的“启动和运行”教程,其中包括一个关于安装两者的逐步指南。
安装redis及其python客户端后,启动redis服务器,您可以这样做:
cd到安装redis的目录(/usr/local/binon'nix,如果通过make install安装);下一步
在shell提示下键入redis server,然后输入
现在您应该在shell窗口中看到服务器日志文件的尾部
在下面的代码片段中,我存储了一个四节点图;下面的每一行调用redis客户端上的hmset,并存储了一个节点和连接到该节点的边(“0”=>;无边,“1”=>;边”)。(实际上,当然,您可以在函数中抽象这些重复调用;这里我将显示每个调用,因为这样可能更容易理解。)
现在该图已被持久化,从redis DB中检索它作为NetworkX图。
有很多方法可以做到这一点,下面的步骤是:
将redis数据库中的数据提取到邻接矩阵, 实现为2D NumPy数组;然后
使用NetworkX将其直接转换为NetworkX图形 内置功能:
简化为代码,这两个步骤是:
当您结束redis会话时,可以从客户端关闭服务器,如下所示:
redis在关闭之前保存到磁盘,因此这是确保所有写操作都被持久化的好方法。
那么redis数据库在哪里?它以默认文件名存储在默认位置,即主目录上的dump.rdb。
要更改此设置,请编辑redis.conf文件(包含在redis源发行版中);转到以以下开头的行:
将dump.rdb更改为您希望的任何内容,但保留.rdb扩展名。
接下来,要更改文件路径,请在redis.conf中找到这一行:
下面的行是redis数据库的目录位置。编辑它以便指定所需的位置。保存修订并重命名此文件,但保留.conf扩展名。您可以将此配置文件存储在任何地方,只要在启动redis服务器时在同一行提供此自定义配置文件的完整路径和名称即可:
因此,下次启动redis服务器时,必须这样做(从shell提示符:
最后,Python Package Index列出了一个专门用于在redis中实现图形数据库的包。这个包名为redis-graph,我没有使用过它。
相关问题 更多 >
编程相关推荐