写点什么

嵌入式网络模型数据库 Neo4j

  • 2008-06-09
  • 本文字数:1537 字

    阅读完需:约 5 分钟

Neo4j 是一个基于网络数据库模型的嵌入式、高性能、轻量级的持久化解决方案,最近网络数据库模型受到了越来越多的关注:

Neo 是一个网络——面向网络数据库——也就是说,它是一个嵌入式的、基于磁盘的、具备完全的事务特性的 Java 持久化引擎,但是它将结构化数据存储在网络上而不是表中。网络(从数学角度叫做图)是一个灵活的数据结构,可以应用更加敏捷和快速的开发模式。
你可以把 Neo 看作是一个高性能的图引擎,该引擎具有成熟和健壮的数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。

由于使用了“面向网络的数据库”,人们对 Neo 充满了好奇。在该模型中,以“节点空间”来表达领域数据——相对于传统的模型表、行和列来说,节点空间是很多节点、关系和属性(键值对)构成的网络。关系是第一级对象,可以由属性来注解,而属性则表明了节点交互的上下文。网络模型完美的匹配了本质上就是继承关系的问题域,例如语义 Web 应用。Neo 的创建者发现继承和结构化数据并不适合传统的关系数据库模型:

  1. 对象关系的不匹配使得把面向对象的“圆的对象”挤到面向关系的“方的表”中是那么的困难和费劲,而这一切是可以避免的。
  2. 关系模型静态、刚性、不灵活的本质使得改变 schemas 以满足不断变化的业务需求是非常困难的。由于同样的原因,当开发小组想应用敏捷软件开发时,数据库经常拖后腿。
  3. 关系模型很不适合表达半结构化的数据——而业界的分析家和研究者都认为半结构化数据是信息管理中的下一个重头戏。
  4. 网络是一种非常高效的数据存储结构。人脑是一个巨大的网络,万维网也同样构造成网状,这些都不是巧合。关系模型可以表达面向网络的数据,但是在遍历网络并抽取信息的能力上关系模型是非常弱的。

虽然 Neo 是一个比较新的开源项目,但它已经在具有 1 亿多个节点、关系和属性的产品中得到了应用,并且能满足企业的健壮性和性能的需求:

完全支持 JTA 和 JTS、2PC 分布式 ACID 事务、可配置的隔离级别和大规模、可测试的事务恢复。这些不仅仅是口头上的承诺:Neo 已经应用在高请求的 24/7 环境下超过 3 年了。它是成熟、健壮的,完全达到了部署的门槛。

Java API 包含 12 个类。以下是创建一个节点的代码,非常简单明了:

Transaction tx = Transaction.begin();
EmbeddedNeo neo = … // Get factory
// Create Thomas ’Neo’ Anderson
Node mrAnderson = neo.createNode();
mrAnderson.setProperty( ”name”, ”Thomas Anderson” );
mrAnderson.setProperty( ”age”, 29 );
// Create Morpheus
Node morpheus = neo.createNode();
morpheus.setProperty( ”name”, ”Morpheus” );
morpheus.setProperty( ”rank”, ”Captain” );
morpheus.setProperty( ”occupation”, ”Total bad ass” );
// Create a relationship representing that they know each other
mrAnderson.createRelationshipTo( morpheus,
MatrixRelationshipTypes.KNOWS );
// Create Trinity, Cypher, Agent Smith, Architect similarly

tx.commit();

通过一个“traverser”框架来搜索网络中的节点:

// Instantiate a traverser that returns all mrAnderson’s friends
Traverser friendsTraverser = mrAnderson.traverse(
Traverser.Order.BREADTH_FIRST,
StopEvaluator.END_OF_NETWORK,
ReturnableEvaluator.ALL_BUT_START_NODE,
MatrixRelationshipTypes.KNOWS,
Direction.OUTGOING);

Neo4j 有一个双重的许可模型:免费的( GPL )和商业的(尽管其主页上没有提到价格)。当前版本为 1.0 beta 6,下一个版本将是 Release Candidate 1。对 Neo4j 的 Ruby 和 Python 包装现在也在开发中。

查看英文原文: Neo4j - an Embedded, Network Database

2008-06-09 20:401875
用户头像

发布了 88 篇内容, 共 273.3 次阅读, 收获喜欢 9 次。

关注

评论

发布
暂无评论
发现更多内容

当Nginx遇上Tomcat集群,又是一场负载均衡的爱恨情仇

小Q

nginx tomcat 学习 架构 面试

浅谈程序员的“内卷化”

数据社

腾讯WeMap,一颗“孢子”的数智化之旅

脑极体

双“11”搞促销?本文教你用贪心算法来盘他!

Java架构师迁哥

要求自愿降薪,员工内心普遍满意:“服从”是如何发生的?

脑极体

技术干货:Apache Pulsar 在移动云上的应用

Apache Pulsar

大数据 开源 云原生 Apache Pulsar

阿里突遭断网断电!双11最惊险一幕刚刚曝光

Java架构师迁哥

Pulsar Summit Asia 2020 | 场景案例论坛(下):多行业,多场景

Apache Pulsar

大数据 开源 Apache Pulsar

阿里首发MySQL“完美日记”,基础+优化+事务+集群+锁+主从复制+安全备份

Java架构追梦

Java MySQL 数据库 架构 面试

LeetCode题解:剑指 Offer 22. 链表中倒数第k个节点,使用栈,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

【概念篇】你真正了解越来越火的“数据驱动” 吗?

Java架构师迁哥

【Mycat】Mycat核心开发者带你看尽Mycat三大核心配置文件!!

冰河

分布式数据库 中间件 mycat

年末十家手机银行数字化升级大盘点:谁家开发更全面?谁家建设更到位?

CECBC

疫情 银行 手机银行

面试官问我redis数据类型,我回答了8种

数据库 学习 面试

SpringBoot启动原理

编程门槛 框架设计 spring Boot Starter】

当Tomcat遇上Netty,我这一系列神操作,同事看了拍手叫绝

小Q

Java 学习 程序员 架构 面试

Java动态修改LOGGER日志级别

Zhendong

Java Arthas

践行新基建,共建城市智能体,为数字经济发展提供新动能

CECBC

云计算 大数据

MySQL 的 join 功能弱爆了?

程序员历小冰

MySQL postgres 多表join

11.11 程序员的 1111 种死法

京东科技开发者

程序员 程序人生

iptables 端口转发

田振宇

搞微服务用阿里开源的 Nacos 真香啊!

阿里巴巴 开源 编程

腾讯云直播全解析,双11怎么买才不亏?

腾讯云音视频

腾讯云 阿里云 云直播 直播 视频

重拳出击!平台经济反垄断,互联网巨头市值蒸发千亿

CECBC

小额贷款 反垄断

《我想进大厂》之Java基础夺命连环16问

艾小仙

Java 面试 编程语言

第七周作业

Geek_4c1353

极客大学架构师训练营

架构训练营-week8-数据结构与算法,网络,IO

于成龙

极客大学架构师训练营 架构训练营

对比一下,你的简历是不是也写成了这样,能拿高薪才怪了

小Q

Java 学习 架构 面试 简历

「架构师训练营」第 4 周作业

小黄鱼

极客大学架构师训练营

Java批量导入去除重复数据并返回结果,我差点就被放倒了

小Q

Java 学习 程序员 架构

面试蚂蚁金服,首战被MySQL惨虐,熬夜啃透这份阿里面经复盘一个月再战拿下P7offer

比伯

Java 程序员 架构 面试 阿里

嵌入式网络模型数据库Neo4j_Java_Gavin Terrill_InfoQ精选文章