写点什么

嵌入式网络模型数据库 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:401838
用户头像

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

关注

评论

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

为什么 Serverless 将推动边缘计算的革命

公众号:云原生Serverless

Serverless 边缘计算

专访声网首席资深iOS研发工程师龚宇华:从自学计算机到高级架构师

程序员潘Sir

专访

哭了!“日志注入”为什么跟想象中的不一样

华为云开发者联盟

Java 参数 日志注入 log4j2框架 异常堆栈

【Knative系列】看完这篇还不懂 Knative Serving,你来打我~(史上最详细)

公众号:云原生Serverless

Serverless 云原生 Knative

“湘”遇区块链 赋能新业态

CECBC

聪明人的训练(二十一)

Changing Lin

4月日更

别再问我 2050 可以干什么,Make a Movie in a Day!

阿里云CloudImagine

电影

Golang 并发

escray

学习 极客时间 Go 语言 4月日更

存储成本降低80%!US3在海量数据归档存储下的成本优化技术实践

UCloud技术

存储 海量数据 存储成本

禁止算法识别性别,能消解歧视吗?

脑极体

NumPy之:NumPy简介教程

程序那些事

Python 数据分析 Python3 Numpy 程序那些事

使用 SpringBoot 的 CommandLineRunner 遇到的坑

Java小咖秀

容器 开发 springboot CommandLineRunner ApplicationRunner

专访吴翰清 || 如何用网络安全保障个人隐私

Bob

网络安全 个人隐私 调查采访能力考核

炫彩无界,性能怪兽,M1 扛鼎未来 —— 2021 年 Apple 春季新品发布会全记录

清秋

产品 苹果 硬件 新闻

【LeetCode】解码方法Java题解

Albert

算法 LeetCode 4月日更

ES 终于可以搜到“悟空哥”了!

悟空聊架构

中文分词 elasticsearch 分词 ES ik

张超 - 机锋网联合创始人 - 采访提纲:那些 3 个月就上线的产品,如何去做技术规划?

梦想橡皮擦

签约计划

《专访彩食鲜CTO乔新亮:体系的重要性》(采访提纲)

花花

调查采访能力考核

没有自信的人,才会在意别人的评价

小天同学

心理 日常思考 个人感悟 4月日更 自信

白皮书:区块链将成隐私计算产品必选项,提供三方面助力

CECBC

区块链

区块链电子证据的司法应用现状与展望

CECBC

读《乌克兰拖拉机简史》有感

箭上有毒

读书笔记 4月日更

分库分表笔记

luojiahu

分库分表

Ansible 配置

耳东@Erdong

4月日更

应用区块链技术打通各自为战形成的壁垒

CECBC

Semaphore自白:限流器用我就对了!

王磊

Java 多线程 Semaphore

Zookeeper基础原理&应用场景详解

leonsh

zookeeper 中间件 ZooKeeper原理

浅谈Javascript中的forEach和map之间的区别

devpoint

遍历 foreach map reduce

架构实战营 模块2作业

CR

实体经济与数字经济加速融合 中国经济新动能快速成长

CECBC

数字经济

网络安全传奇吴翰清采访提纲 |调查采访能力考核

清秋

网络安全 签约计划 调查采访能力考核

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