写点什么

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

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

关注

评论

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

python DataFrame数据分组统计groupby()函数,值得推荐

程序媛可鸥

Python 程序员 面试

Python 中的八个“无代码”特性,这原因我服了

程序媛可鸥

Python 程序员 面试

架构实战营模块六作业

刘洋

#架构实战营 「架构实战营」

Python 金融量化 随机指标交易策略,闭关60天学懂NDK+Flutter

程序媛可鸥

Python 程序员 面试

Python爬取淘宝商品数据,价值千元的爬虫外包项目,最新美团点评Python团队面试题

程序媛可鸥

Python 程序员 面试

NFS服务器原理、搭建、配置,Python面试题选择题

程序媛可鸥

Python 程序员 面试

OBV指标交易策略(累积能量潮与移动能量潮,成交量多空比率净额及相关应用原则)

程序媛可鸥

Python 程序员 面试

Python 中进程和线程的用法基本一样,跪了

程序媛可鸥

Python 程序员 面试

Python实现Singleton模式的几种方式,正在准备面试

程序媛可鸥

Python 程序员 面试

Python数据类型——字典,一次哔哩哔哩面试经历

程序媛可鸥

Python 程序员 面试

Python爬取51job招聘信息,全网独家首发

程序媛可鸥

Python 程序员 面试

Python两个内置函数locals 和globals,Python项目开发如何设计整体架构

程序媛可鸥

Python 程序员 面试

Matlab初级学习者,15个经典面试问题及回答思路

程序媛可鸥

Python 程序员 面试

百度一线工程师浅谈日新月异的云原生

百度Geek说

云原生 后端

复盘归因,提高交付质量的秘诀

老张

软件测试 交付质量 复盘归因

详解《send》源码中NodeJs静态文件托管服务实现原理

CRMEB

Python文字转换语音,让你的文字会「说话,Python面试项目包装

程序媛可鸥

Python 程序员 面试

Apache Flink 在斗鱼的应用与实践

Apache Flink

大数据 flink 开源 编程 实时计算

Python 蜻蜓fm有声书批量下载 支持账号登录 原创源码,斩获offer

程序媛可鸥

Python 程序员 面试

Python3通过函数名调用函数的几种场景实现,贼厉害

程序媛可鸥

Python 程序员 面试

python中函数作用域,高级Python开发面试解答之线程篇

程序媛可鸥

Python 程序员 面试

Python爬取高质量电脑壁纸,还是很好看的,面试总结

程序媛可鸥

Python 程序员 面试

Python爬虫入门教程15:音乐网站数据的爬取,我了解到的面试的一些小内幕

程序媛可鸥

Python 程序员 面试

Red Hat:疫情促使企业拥抱开源

BeeWorks

Python 中的文本分类,2021Python面试真题精选干货整理

程序媛可鸥

Python 程序员 面试

python中strip(),lstrip(),rstrip()函数的使用讲解,Python开发知识点

程序媛可鸥

Python 程序员 面试

想了解 spring-cloud-kubernetes,那就先来实战一把官方demo

华为云开发者联盟

spring Kubernetes Spring Cloud Spring Boot

Newton迭代法开方(Python),最详细的docker中安装并配置redis

程序媛可鸥

Python 程序员 面试

Python 下载的9种方法,如何才能通过一线互联网公司面试

程序媛可鸥

Python 程序员 面试

Python数据分析 之 制作酷炫的可视化大屏,特简单,我把所有Python框架整理成了PDF

程序媛可鸥

Python 程序员 面试

Python数据结构与算法(2,阿里一线架构师技术图谱

程序媛可鸥

程序员 面试

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