- 浏览: 1598417 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
jsrgzhangzhiyong:
关于null值的转换还是感觉不太友好,就像 mapstruct ...
我也造了个轮子:BeanMapping(属性拷贝) -
he037:
a417930422 写道引用使用EPHEMERAL会引出一个 ...
基于zookeeper的分布式lock实现 -
seancheer:
qianshangding 写道首先节点启动后,尝试读取本地的 ...
zookeeper学习记录三(session,watcher,persit机制) -
雪夜归人:
您好,我想咨询一下,开源的canal都能支持mysql的哪些版 ...
Canal BinlogChange(mysql5.6) -
zhoudengyun:
copy 一份做记录,后续学习,请知悉
阿里巴巴开源项目: 基于mysql数据库binlog的增量订阅&消费
背景
最近在一些论坛或者新闻里看到了neo4j,一种擅长处理图形的数据库。 据说非常适合做一些join关系型的查询,所以抽空也看了下相关文档,给自己做个技术储备。
过程
深入学习之前,先在网上找了一下别人的一个学习文档总结,踩在别人的肩膀上总是最快,最有效的学习。
针对图中的一些基本概念:
- node : 节点
- relationships : 关系,也就是图中的边,注意是有向边
- properties : 属性,针对node/relationship都可以设置property
- Traversal : 图遍历工具
- Indexes : 索引
node(节点)
- 每个节点可以和多个节点之间建立多个关系(relationship)
- 单个节点可以设置多个(Key,Value)的properties属性的键值对
relationships(关系)
- 每个关系都会包含一个startNode和endNode
- 每个关系可以设置多个(Key,Value)的properties属性的键值对
- 可以为关系定义对应的关系类型(RelationshipType)
* DynamicRelationshipType 动态关系类型
* XXXRelationshipType 静态关系类型(实现了RelationshipType接口)
Traversal(遍历)
traverser : http://wiki.neo4j.org/content/Traversal
一个例子:
Traverser trav = swedenNode.traverse(Order.DEPTH_FIRST, StopEvaluator.END_OF_GRAPH,
new ReturnableEvaluator()
{
public boolean isReturnableNode( TraversalPosition pos )
{
return !pos.isStartNode() && pos.lastRelationshipTraversed().isType( CUSTOMER_TO_ORDER );
}
},
LIVES_IN, Direction.INCOMING,
CUSTOMER_TO_ORDER, Direction.OUTGOING );
// iterate over traverser...
Order : 对应的图的遍历算法
- DEPTH_FIRST : 深度优先搜索,就是找到第一个节点,递归的一直往下找,直到找不到合适的节点后,才进行回溯
- BREADTH_FIRST : 广度优先搜索
- OUTGOING : 出边
- INCOMING : 入边
- BOTH : 顾明思议
- DEPTH_ONE : 深度超过1后停止
- END_OF_GRAPH : 无合适结果和停止
- ALL_BUT_START_NODE : 排除初始节点
- ALL : 返回所有节点
- 上一个节点信息
- 上一个进入的Relationship信息
- 搜索深度
- 目前为止满足条件的节点数
Indexs(索引)
neo4j中针对每个node/relationship/property都是进行独立存储,都是按照自然的顺序。为了支持一些场景,比如针对关系型数据库的根据主键name查询对应的person node,普通的Traversal很难满足这样的需求,而且人家也不是用来解决这个事的。所以neo4j就引出了一个index的概念。
早期的版本的index是采用了IndexService(http://wiki.neo4j.org/content/Indexing_with_IndexService)
一个例子:
GraphDatabaseService graphDb = new EmbeddedGraphDatabase( "path/to/neo4j-db" ); IndexService index = new LuceneIndexService( graphDb ); Node andy = graphDb.createNode(); Node larry = graphDb.createNode(); andy.setProperty( "name", "Andy Wachowski" ); andy.setProperty( "title", "Director" ); larry.setProperty( "name", "Larry Wachowski" ); larry.setProperty( "title", "Director" ); index.index( andy, "name", andy.getProperty( "name" ) ); index.index( andy, "title", andy.getProperty( "title" ) ); index.index( larry, "name", larry.getProperty( "name" ) ); index.index( larry, "title", larry.getProperty( "title" ) );
IndexService是做为外部的component进行扩展定义。
现在官方文档中是建议使用Integrated Index Framework
- 官方文档: http://docs.neo4j.org/chunked/stable/indexing.html
- 迁移方案: http://wiki.neo4j.org/content/Transitioning_To_Index_Framework
IndexManager index = graphDb.index(); Index<Node> actors = index.forNodes( "actors" ); Index<Node> movies = index.forNodes( "movies" ); RelationshipIndex roles = index.forRelationships( "roles" );
查询语法(Cyphe Query Language)
neo4j自己基于图论的搜索算法,实现了一套查询语言解析,提供了一些常见的聚合函数(max,sum,min,count等)。
语法例子:
Join查询: start n=(1) match (n)-[:BLOCKS]->(x) return x Where条件: start n=(2, 1) where (n.age < 30 and n.name = "Tobias") or not(n.name = "Tobias") return n 聚合函数: start n=(2,3,4) return avg(n.property) Order: start n=(1,2,3) return n order by n.name DESC 分页: start n=(1,2,3,4,5) return n order by n.name skip 1 limit 2
调用例子:
db = new ImpermanentGraphDatabase(); engine = new ExecutionEngine( db ); CypherParser parser = new CypherParser(); ExecutionEngine engine = new ExecutionEngine(db); Query query = parser.parse( "start n=(0) where 1=1 return n" ); ExecutionResult result = engine.execute( query ); assertThat( result.columns(), hasItem( "n" ) ); Iterator<Node> n_column = result.columnAs( "n" ); assertThat( asIterable( n_column ), hasItem(db.getNodeById(0)) ); assertThat( result.toString(), containsString("Node[0]") );
其他
扩展性
暂时未看到有相应的扩展性方案
可用性(HA机制)
目前neo4j支持简单的ha机制,是通过zookeeper进行管理。
它的工作机制还是挺简单的,就是由zookeeper负责neo4j server的心跳检测。
1. 发现master挂了后,会发起一个选举(没看过源码,估摸着选举的实现也会很简单,根据对应的serverid,取最小的id做为新的master)。
2. 将新的master广播给所有的slave,此时在选举过程中,不接受对应的write请求(全都是返回异常)
3. 新机器加入集群后,会做为slave于master进行通讯,同步两者的数据内容(如果当前slave的tid比master新,会产生一个数据冲突此时需要进行手工干预)
存在的问题:
1. zookeeper心跳检测的及时性,默认为3分钟延迟(因为会有包重试)
2. master选举期间,write请求不可处理,直接返回异常(虽然master的选举时间会相对比较端,但对客户端不够友好)
可以改进的点:
1. 提供客户端的api,提供一种failover重试的机制控制。
Console页面
neo4j支持嵌入式和独立部署的两种模式,部署了一下neo4j独立部署server,效果图如下:
图形管理后台,可以方面查看节点之间的relationships
rest接口的api,提供了图形和纯数据的几种方式:
其他文档
- http://wiki.neo4j.org/content/FAQ
- http://wiki.neo4j.org/content/Getting_Started_With_Neo4j_Server
- neo4j-manual-stable.pdf
评论
GraphDatabaseService xdb = new GraphDatabaseFactory().newEmbeddedDatabase("/tmp/3/xdb4");
这样只是创建一个内置的数据库
还有个问题想请教,就是使用rest接口create比较慢,我就想使用java连接服务器上的graph.db,但不可以,想请教下您,这个用java连接远程的neo4j服务器除了restAPI 是否有更好的方法?
即可进入。
http://www.neo4j.org.cn/2012/07/28/tools-webadmin/
你直接下载一个standalone server,部署运行即可
发表评论
-
yugong QuickStart
2016-03-05 01:52 0几点说明 a. 数据迁移的方案可参见设计文档,oracl ... -
阿里巴巴开源项目: 阿里巴巴去Oracle数据迁移同步工具
2016-03-05 18:29 6554背景 08年左右,阿里巴巴开始尝试MySQL的相关 ... -
愚公performance
2016-03-02 17:29 0性能测试 全量测试 场景1 (单主键, ... -
yugong AdminGuide
2016-03-02 16:40 0环境要求 操作系统 数据库 迁移方案 部署 ... -
Tddl_hint
2014-01-27 13:52 0背景 工作原理 Hint格式 direct模 ... -
tddl5分库规则
2014-01-26 14:41 0背景 工作原理 构建语法树 元数据 基于 ... -
tddl5优化器
2014-01-22 15:12 0背景 工作原理 构建语法树 元数据 抽象语 ... -
Canal BinlogChange(mariadb5/10)
2014-01-20 17:25 4638背景 先前开源了一个 ... -
asynload quickstart
2013-10-08 22:49 0几点说明: 1. asyncload是做为一个j ... -
映射规则配置
2013-09-26 11:25 0背景 因为alibaba的特殊业务,比如: 同 ... -
网友文档贡献
2013-09-18 15:50 01. Otter源代码解析系列 链接:http://e ... -
Manager配置介绍
2013-09-16 13:00 0通道配置说明 多种同步方式配置 a. 单向同步 ... -
canal&otter FAQ
2013-09-05 17:30 0常见问题 1. canal和 ... -
阿里巴巴开源项目:分布式数据库同步系统otter(解决中美异地机房)
2013-08-22 16:48 40484项目背景 阿里巴巴B2B公司,因为业务的特性 ... -
Otter AdminGuide
2013-08-19 11:06 0几点说明 otter系统自带了manager,所以简化了一 ... -
Otter高可用性
2013-08-17 23:41 0基本需求 网络不可靠,异地机房尤为明显. man ... -
Otter数据一致性
2013-08-17 23:39 0技术选型分析 需要处理一致性的业务场景: 多地修改 ( ... -
Otter扩展性
2013-08-17 22:20 0扩展性定义 按照实现不同,可分为两类: 数据处理自定 ... -
Otter双向回环控制
2013-08-17 21:37 0基本需求 支持mysql/oracle的异构数据库的双 ... -
Otter调度模型
2013-08-17 20:13 0背景 在介绍调度模型之前,首先了解一下otter系统要解 ...
相关推荐
在“Neo4j学习-Neo4j入门-Neo4j文档”这个主题中,我们将深入探讨Neo4j的基本概念、安装与配置、查询语言Cypher以及在实际应用中的优势。 首先,让我们了解一下什么是NOSQL数据库。NOSQL(Not Only SQL)是一种非...
### Neo4j 学习及 Cypher 基本操作详解 #### 一、知识图谱概述 知识图谱是一种基于图的数据结构,由节点(Point)和边(Edge)构成。节点通常代表实体,拥有一个全局唯一的ID,而边则表示实体之间的关系或属性。在...
文档还提供了一个简单的示例,展示了如何在Neo4j中查询特定节点的邻居。例如,查找Thomas Anderson的所有朋友,即所有与他有`KNOWS`关系的节点。这通常涉及到图数据库的遍历算法,通过遍历与特定节点相连的所有关系...
这篇入门学习资料旨在帮助初学者快速掌握Neo4j的基础知识。 1. **图数据库基本概念**: - **节点(Node)**:图数据库中的基本单位,可以代表人、地点、事件等实体。 - **边(Edge)**:连接节点的线,表示节点间的...
标题“Neo4j 1.8 windows交流版”表明我们讨论的是Neo4j的1.8版本,特别适用于Windows操作系统,是开发者和爱好者进行交流和学习的工具。 图数据库的核心理念是将数据以节点、边和属性的形式存储,这样的结构非常...
Neo4j由于其数据模型的特性,对于图形遍历和关系查询速度极快,但在处理大量重复数据或简单查询时可能不如MySQL。 扩展性方面,MySQL可以通过主从复制、分区等技术实现水平扩展,但配置和管理相对复杂。Neo4j支持...
Java项目集成Neo4j是一个将图数据库技术引入到传统Java应用程序中的实践过程。Neo4j是一种高性能、无模式的图...通过学习和运行这个示例,你可以掌握图数据库的基本用法,并为进一步深入探索Neo4j的高级特性打下基础。
6. `slf4j-api-1.7.30.jar`:简单日志门面(SLF4J)API,提供一个通用的日志接口,允许最终用户在部署时插入所需的日志实现。 7. `neo4j-common-4.4.25.jar`:包含了Neo4j的公共核心类库,提供基本的数据操作和管理...
社区版是Neo4j的免费开源版本,提供给开发者和爱好者用于个人学习、实验以及非商业项目。"neo4j-community-4.2.4-windows"是Neo4j社区版在Windows操作系统上的4.2.4版本,它包含了运行和管理图形数据库所需的所有...
- Neo4j是图形数据库领域的领导者,支持ACID事务,提供高性能的Cypher查询语言,使得查询和操作图数据变得简单直观。 - 社区版是Neo4j的免费版本,适用于学习、开发和小型项目,而企业版则提供了更多高级功能和...
描述中的“neo4j-community-3.5.5”进一步确认了这是Neo4j的开源社区版,这个版本提供了基础的功能,适合开发人员进行测试、学习和构建原型。社区版通常包含最新稳定的功能,但可能缺少企业版的一些高级特性和服务。...
安装Neo4j非常简单,可以通过官方网站下载相应版本的社区版或企业版。配置文件`neo4j.conf`允许调整内存分配、端口设置等。 **6. 数据导入与导出** Neo4j支持多种方式导入和导出数据,包括使用LOAD CSV命令从CSV...
2. **Cypher查询语言**:Neo4j的声明式查询语言,类似于SQL,但专为图形数据设计,使得查询和操作图形数据变得简单直观。 **二、安装与配置** 1. **安装过程**:涵盖了不同操作系统下的安装步骤,包括Windows、...
在"Neo4j4.2实例视频"中,我们可以期待学习到关于这个特定版本的许多关键概念和操作。 首先,让我们从安装部署开始。在Neo4j4.2的安装过程中,你需要了解如何下载最新版本的软件包,区分不同操作系统(如Windows、...
Cypher是Neo4j的查询语言,它被设计得既简单又强大,目的是让开发者和运维人员都能轻松地进行复杂的数据库查询操作。Cypher的语法结构借鉴了SQL语言,而模式匹配则借鉴了SPARQL语言的表达方式,部分列表语义则来自...
《Neo4j开发手册》是针对图数据库管理系统Neo4j的...《Neo4j开发手册》详尽地涵盖了以上各个知识点,是开发者学习和掌握Neo4j的重要资源。通过深入学习和实践,开发者可以充分利用图数据库的优势,解决复杂的数据挑战。
**正文** Neo4j是世界上最先进的图形数据库管理系统之一,尤其在处理复杂关系和网络数据时表现出卓越性能。本文将深入探讨Neo4j 1.8中文版的...学习和掌握这些知识,将有助于在实际项目中充分利用Neo4j的强大功能。
部署Neo4j社区版在Linux服务器上相当简单。下载并解压“neo4j-community-3.4.9”压缩包后,你需要配置`conf/neo4j.conf`文件,根据实际需求调整内存设置、端口绑定和其他选项。启动数据库服务可以通过执行`bin/neo4j...
Neo4j是一个强大的图形数据库系统,专为处理复杂的...总结,Neo4j 3.4说明文档是学习和掌握这个先进图形数据库的重要资源。通过深入理解和实践,你将能够有效地处理和分析复杂的网络数据,为各种应用场景提供强大支持。
- **语法简单**: 语法简单且易于理解,便于学习和使用。 - **支持多种子句**: 如 WHERE、ORDER BY 等,可以编写复杂的查询。 ##### 2. CQL 命令与子句 - **常用命令**: - `CREATE`: 创建节点或关系。 - `MATCH`:...