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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM