绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
关于neo4j图数据库笔记三-初见成效
2020-02-19 09:57:09

前两个部分尝试了一下neo4j和py2neo的基本语法,证实了图库在运维实体中实现的可行性,先对数据结构做了一下调整,在服务器节点上增加了label,主要用来区别数据库还是应用服务器,在访问关系中也增加了源和目标的label值,主要是考虑到数据库和应用还是有很大区别的,数据库可以是多个业务系统的数据库,数据库本省也存在RAC、Dataguard、VIP、物理IP、ScanIP等多个概念,目前还没完全构思好,暂且只是简单分一下类。

另外一个是在图库需要进行数据初始化,在这个过程中引入了csv文件读取,以及通过DictReader实现数据和标题的字典化,再根据实际需要,按照节点和关系的要求,对数据进行初始化操作,当然通过这种方式进行数据初始化效率是比较低的,快的还是通过neo4j的导入功能来实现。

以下为调整后的数据结构

以下为在笔记二系列基础上增加的初始化脚本,并修改了main执行函数

import csv    def initnode(self,filename):

        #初始化节点
        with open(filename, 'r', encoding="utf-8"as f:
            dict_reader = csv.DictReader(f)
            for row in dict_reader:
                propertys = {}
                for k, v in row.items():
                    #单独处理节点的label值
                    if k == 'label': labelname=v
                    propertys[k] = v
                #调用创建节点类
                self.createNode(label=labelname, properties=propertys)

    def initrelation(self,filename):
        #初始化关系节点
        with open(filename, 'r', encoding="utf-8"as f:
            dict_reader = csv.DictReader(f)
            for row in dict_reader:
                relationpropertys = {}
                #label是match中必须要加的,节点name是的,关系属性也单独解析
                for k, v in row.items():
                    if k == 'sourcetype':
                        sourcenodetype=v
                    elif k == 'soure':
                        startnodename = v
                    elif k == 'desttype':
                        destnodetype=v
                    elif k == 'dest':
                        endnodename=v
                    elif k == 'nettype':
                        nettype=v
                    else:
                        relationpropertys[k] = v
                #通过label和name属性分别查找开始节点和结束节点
                startnode = self.findOneNode(node_type=sourcenodetype, properties={'name': startnodename})
                endnode = self.findOneNode(node_type=destnodetype, properties={'name': endnodename})
                #调用createRelationship创建关系
                dao.createRelationship(start_node=startnode, relation_type=nettype,end_node=endnode, relation_properties=relationpropertys)

if __name__ == '__main__':
    dao = Neo4jDao(username='neo4j', password='Wbq197711')
    dao.deleteall()
    dao.initnode('nodes.csv')
    nodes = dao.findAllNode(node_type='app')
    print(nodes)
    nodes = dao.findAllNode(node_type='db')
    print(nodes)
    dao.initrelation('relations.csv')
    relations = dao.findAllRelationship()
    print(relations)

后通过neo4j进行结果展示,实际上是两个独立的测试系统,以及在生产系统中两个业务系统去访问同一个数据库。




分享好友

分享这个小栈给你的朋友们,一起进步吧。

追梦IT人
创建时间:2020-02-12 11:47:47
20年IT工作经验,曾在华为、HP、移动、电网等国内外知名IT企业任职;关注领域包括证券、航空、制造、电信、电网等。在数据库开发和优化、数据仓库、系统架构、大中型项目管理、部门管理、数据挖掘和分析、数据治理、大数据方面有一定研究。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • bq_wang
    栈主

小栈成员

查看更多
  • 栈栈
  • 小雨滴
  • 我没
  • 飘絮絮絮丶
戳我,来吐槽~