写点什么

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

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

关注

评论

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

iOS开发·备战2022金三银四-runtime原理与实践: 消息转发详解篇

iOSer

ios runtime iOS面试 ios开发 金三银四跳槽

电商直播选品该怎么做?有没有好用的工具?

优秀

带货 直播 低代码开发

玉米可流转数字仓单标准的落地 将加速行业的资产数字化进程

CECBC

Kotlin语法手册(一)

寻找生命中的美好

android kotin

Linux系统编程-Shell脚本基本使用(变量、运算符、语句等)

DS小龙哥

shell脚本编写 2月月更

DC系列靶机知识点总结

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 安全漏洞

在线ASCII Banner艺术字生成工具

入门小站

工具

项目遇到突发问题,如何给上级做汇报?

石云升

项目管理 项目经理 2月月更

一手实录!朱广权的AI手语搭档是怎样“养成”的?

百度开发者中心

百度智能云 百度AI

基于云开发的健身房预约小程序平台

CC同学

裁员,降薪,大牛出走:AI大退却的始末缘由

脑极体

区块链+体育发展提速 区块链球员数据系统预计上半年投入使用

CECBC

Linux系统编程-(pthread)线程通信(自旋锁)

DS小龙哥

自旋锁 2月月更

第十节:SpringBoot中的日志管理

入门小站

spring-boot

Web Components 系列—— 详解 Slots

CRMEB

【架构训练营模块二作业】分析一下微信朋友圈的高性能复杂度

yhjhero

#架构训练营

阿里云张献涛:自主最强DPU神龙的秘诀

阿里云弹性计算

阿里云 神龙架构 DPU

Apache APISIX 存在改写 X-REAL-IP header 的风险公告(CVE-2022-24112)

API7.ai 技术团队

IP 漏洞 Apache APISIX APISIX 网关

区块链通证经济:通往未来十年财富分配的新格局

CECBC

基于 Kyma 的企业级云原生应用的扩展案例分享 | 社区征文

汪子熙

Kubernetes 云原生 新春征文 2月月更 Kyma

关于 docker-compose stop 和 docker-compose start 的误解

liuzhen007

容器 云服务 2月月更

浅谈AI机器学习及实践总结 | 社区征文

张浩_house

机器学习 数据工程 机器学习算法 新春征文

RTE2021 回顾丨实践中的摸爬滚打,AI OPS 落地之路

RTE开发者社区

人工智能 算法 Ops

浅析PHP伪协议在CTF的应用

喀拉峻

网络安全

验收测试驱动开发后记

Bruce Talk

敏捷 Agile User Story

实战领域驱动设计开篇

worry

领域驱动设计 DDD 领域驱动 Domain Driven Design

Linux系统编程-(pthread)线程通信(信号量)

DS小龙哥

信号量 2月月更

网络安全kali渗透学习 web渗透入门 如何进行基于ping命令的探测

学神来啦

Web Components 系列(五)—— 关于 Templates

编程三昧

前端 组件化 2月月更

欧拉的奇异之旅·风暴来临与欧拉初诞

脑极体

模块八作业

Geek_e6f7f6

架构实战营

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