• Neo4j介绍与使用


    Neo4j简介

    Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。

    Neo4j因其嵌入式、高性能、轻量级等优势,越来越受到关注。

    图形数据结构

    在一个图中包含两种基本的数据类型:Nodes(节点) 和 Relationships(关系)。Nodes 和 Relationships 包含key/value形式的属性。Nodes通过Relationships所定义的关系相连起来,形成关系型网络结构。

    网络结构图

    Neo4j安装

    Neo4j可以被安装成一个独立运行的服务端程序,客户端程序通过REST API进行访问。也可以嵌入式安装,即安装为编程语言的第三方类库,目前只支持java和python语言。

    因Neo4j是用java语言开发的,所以确保将要安装的机器上已安装了jre或者jdk

    安装为服务

    此种安装方式简单,各平台安装过程基本一样

    1. http://neo4j.org/download上下载最新的版本,根据安装的平台选择适当的版本。
    2. 解压安装包,解压后运行终端,进入解压后文件夹中的bin文件夹。
    3. 在终端中运行命令完成安装

      Linux/MacOS系统 neo4j install
      Windows系统 Neo4j.bat install

    4. 在终端中运行命令开启服务

      Linux/MacOS系统 service neo4j-service start
      Windows系统 Neo4j.bat start

    通过stop命令可以关闭服务,status命令查看运行状态

    支持python嵌入式安装

    第一步:安装Jpype

    http://sourceforge.net/projects/jpype/files/JPype/ 下载最新版本,windows有exe格式的直接安装程序,linux平台要下载源码包,解压后运行sudo python setup.py install完成安装

    第二步:安装 neo4j-embedded

    如果安装了python的包管理工具 pip 或者 easy_install 可直接运行

    Pip install neo4j-embedded  
    easy_install neo4j-embedded
    

    也可以从http://pypi.python.org/pypi/neo4j-embedded/下载相应的安装包完成安装。

    Neo4j使用实例

    有如下所示的用户关注关系所形成的关系网络

    关系网络图

    现在利用图形数据库进行数据的储存,并获得user1 的粉丝,并为user4 推荐好友

    示例代码:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    #
    # Neo4j图形数据库示例
    # 
    from neo4j import GraphDatabase, INCOMING
    
    # 创建或连接数据库
    db = GraphDatabase('neodb')
    # 在一个事务内完成写或读操作
    with db.transaction:
        #创建用户组节点
        users = db.node()
        # 连接到参考节点,方便查找
        db.reference_node.USERS(users)
    
        # 为用户组建立索引,便于快速查找
        user_idx = db.node.indexes.create('users')
    
    #创建用户节点
    def create_user(name):
        with db.transaction:
            user = db.node(name=name)
            user.INSTANCE_OF(users)
            #  建立基于用户name的索引
            user_idx['name'][name] = user
        return user
    
     #根据用户名获得用户节点
    def get_user(name):
        return user_idx['name'][name].single
    
    #建立节点
    for name in ['user1', 'user2','user3','user4']:
       create_user(name)
    
    #为节点间添加关注关系(FOLLOWS)
    with db.transaction:
        get_user('user2').FOLLOWS(get_user('user1'))
        get_user('user3').FOLLOWS(get_user('user1'))
        get_user('user4').FOLLOWS(get_user('user3'))
    
    # 获得用户1的粉丝
    for relationship in get_user('user1').FOLLOWS.incoming:
        u = relationship.start
        print u['name']
    #输出结果:user2,user3
    
    #为用户4推荐好友,即该用户关注的用户所关注的用户
    nid = get_user('user4').id
    #设置查询语句
    query = "START n=node({id}) MATCH n-[:FOLLOWS]->m-[:FOLLOWS]->fof RETURN n,m,fof"
    
    for row in db.query(query,id=nid):
        node = row['fof']
        print node['name'] 
    #输出结果:user1
    

      

    作者:Ljhero
    出处:http://ljhero.cnblogs.com/
    本作品采用署名-非商业性使用 3.0协议进行许可。欢迎转载,演绎,但是必须保留本文的署名Ljhero,且不能用于商业目的。

  • 相关阅读:
    剑指offer--26.顺时针打印矩阵
    剑指offer--25.二叉树的镜像
    剑指offer--24.树的子结构
    剑指offer--23.合并两个排序的链表
    剑指offer--22.反转链表
    剑指offer--21.链表中倒数第k个结点
    剑指offer--20.矩形覆盖
    剑指offer--19.重建二叉树
    剑指offer--18.从尾到头打印链表
    剑指offer--17.第一个只出现一次的字符
  • 原文地址:https://www.cnblogs.com/ljhero/p/2498039.html
Copyright © 2020-2023  润新知