当前位置: 首页 > news >正文

git push 的符号笔有什么用_介绍Neo4j符号束 - push博客

为什么是图表?

不管你在哪里看,都没有什么信息是不相连的--人、事件、地点、事物、文件、应用程序和关于它们的信息都是紧密相连的。随着数据量的增长,其连接的数量和动态也随之增加。如果你过去尝试过在任何数据库中存储和查询高度连接的半结构化数据,你可能会遇到很多挑战。

本地图形数据库中的标记属性图

Neo4j它是为了准确地处理真实世界的信息而构建的,而不影响与实体相关的连接的数量和类型。它是一个开源的NoSQL数据库,它使用标有标签的属性图将域模型(图表)的实体存储为节点他们之间的联系关系每个属性都可以具有任意属性。

Neo4j不仅是另一个数据库之上的一个图形层,而且是一个成熟的、事务性(ACID)数据库,从管理磁盘上的记录页到提供可伸缩的、安全的集群。作为一个本地图形数据库,它使用专用的数据结构来高效地存储和查询高连接的数据。与其他数据库不同,(复杂的)连接查询不会在查询时重复计算。相反,实体之间的关系是直接存储的。在查询期间,数据库引擎可以使用直接记录指针进行固定时间查找。

开放CYPHER查询语言

这不仅扩展到建模或存储,甚至Neo4j附带的CYPHER图形查询语言也专注于图形模式,这一次表示为查询中的ASCII-art:

(dan:Person {name:"Dan"})-[:LOVES]->(ann:Person {name:"Ann"})

,这使得您的查询即使对于非开发人员也非常容易阅读,例如,下面是一个推荐查询(“像您这样的客户也购买了这个”):

MATCH (c:Customer)-[:BOUGHT]->(:Product)<-[:BOUGHT]-(o:Customer)-[:BOUGHT]->(reco:Product)

WHERE c.id = 123 AND NOT (c)-[:BOUGHT]->(reco)

RETURN reco.name, count(*) as frequency

ORDER BY frequency DESC LIMIT 10;

Symfony,PHP的快速开发框架

塞福尼是现代PHP框架的角色模型。该框架有一个组成部分的方法,过去11年来一直存在。从Symfony生态系统中,我们看到了一些项目,如Composer、Twig、Swiftmailer、Assetic、Monolog等等。由于采用了组件方法,其他项目和框架很容易重用Symfony中的代码。像Laravel,Silex,Sylius,Drupal,phpBB,ez这样的项目都使用Symfony组件。

Symfony成功的一个关键因素是框架的灵活性和易用性。Symfony的标准版本附带了Doctrine作为默认的数据库层抽象,它支持MySQL和MongoDB这样的主要数据库。但是,无论是数据库层还是理论,都不是Symfony的主要公民。它们很容易被别的东西取代。

介绍Symfony Neo4j丛

为了在Neo4j和Symfony之间提供一个平滑的集成,我们创建了SymfonyNeo4jBundle。它用Graphaware包装了优秀的PHP社区客户端,并创建了一个坚实的Symfony体验。由于WebProfiler集成,您将看到所有数据库调用、所有查询及其结果。您甚至可以查看与数据库交互时引发的任何异常。您还将获得关于每个数据库调用的详细统计信息。这使得调试应用程序变得更加容易。

包还将客户端事件与Symfony事件分派程序集成在一起。现在您可以创建事件订阅者,它可以监听与Neo4j的交互,例如,用于集成MonologBundle来记录所有数据库查询。

在如何使用Neo4j时,包并不是固执己见的。使用OGM是可选的。高级Neo4j用户将完全控制客户端和执行什么CYPHER。

类似API的原则

对于熟悉Doctrine的开发人员,他们将知道如何使用GraphAware的OGM(ObjectGraphMapper)。OGM有一个EntityManager实现Doctrine的ObjectManager接口,它为您提供“查找”、“删除”、“持久化”和“刷新”等功能。与Doctrine的MySQLEntityManager相比,开发人员将拥有与Neo4j OGM的模型完全相同的工作经验。

配置

与大多数现代框架一样,Symfony将配置与代码分开。这是Neo4jBundle坚持的良好软件实践。它提供了轻松配置多个连接、多个客户端和多个实体管理器的能力。对于每个连接,您可以决定是否要使用HTTP或新的二进制“螺栓”协议。

由于Symfony的配置组件,您可以使用YAML、XML或PHP来指定配置。默认配置将设置一个连接到

127.0.0.1:7474

默认用户名/密码。

开始使用Symfony-Neo4j-Bundle

后安装捆绑包你可以开始使用客户端

$client = $this->get('neo4j.client');

$results = $client->run('MATCH (n:Movie) RETURN n LIMIT 5');

foreach ($results->records() as $record) {

$node = $record->get('n');

echo $node->get('title'); // "The Matrix"

}

如果您习惯了原则,您可能需要使用OGM。您需要向您的模型添加注释,以便OGM能够正确地理解和映射这些属性。

use GraphAwareNeo4jOGMAnnotations as OGM;

/**

* @OGMNode(label="User")

*/

class User

{

/** @OGMGraphId() */

protected $id;

/** @OGMProperty(type="string") */

protected $name;

/** @OGMProperty(type="int") */

protected $age;

// Getters and setters

}

$em = $this->get('neo4j.entity_manager');

$bart = new User('Bart Johnson', 33);

$em->persist($bart);

$em->flush();

// Retrieve from database

$john = $em->getRepository(User::class)->findOneBy('name', 'John Doe');

echo $john->getAge();

下面是分析器可能是什么样子的示例:

关系与关系实体

与Doctrine和MySQL的主要区别在于,在Neo4j中,关系是一流的公民。它们和节点本身一样重要。若要在个人和电影之间创建简单关系,请使用

@OGMRelationship

注释

use GraphAwareNeo4jOGMAnnotations as OGM;

use GraphAwareNeo4jOGMCommonCollection;

/**

*

* @OGMNode(label="Person")

*/

class Person

{

/**

* @var int

*

* @OGMGraphId()

*/

protected $id;

// other code

/**

* @var Movie[]|Collection

*

* @OGMRelationship(type="ACTED_IN", direction="OUTGOING", collection=true, mappedBy="actors", targetEntity="Movie")

*/

protected $movies;

public function __construct()

{

$this->movies = new Collection();

}

// other code

/**

* @return Movie[]|Collection

*/

public function getMovies()

{

return $this->movies;

}

}

电影类有来自个人的新的关系。

use GraphAwareNeo4jOGMAnnotations as OGM;

use GraphAwareNeo4jOGMCommonCollection;

/**

*

* @OGMNode(label="Movie")

*/

class Movie

{

/**

* @var int

*

* @OGMGraphId()

*/

protected $id;

// other code

/**

* @var Person[]|Collection

*

* @OGMRelationship(type="ACTED_IN", direction="INCOMING", collection=true, mappedBy="movies", targetEntity="Person")

*/

protected $actors;

public function __construct()

{

$this->actors = new Collection();

}

// other code

/**

* @return Person[]|Collection

*/

public function getActors()

{

return $this->actors;

}

}

关系本身也可以具有属性。例如,如果用户对电影评分,那么这种关系可能会有分数。这可以通过关系实体来实现。在OGM文件.

示例项目

有一个示例项目,您可以使用它来测试包。使用以下步骤安装项目:

git clone git@github.com:neo4j-examples/movies-symfony-php-bolt.git

composer install

导入数据夹具(https://neo4j.com/developer/example-project/#_data_setup)

php bin/console server:run

相关文章:

  • linux中装ensp_eNSP配置静态路由
  • OpenGL 中的 Render To Texture
  • 异常重试_从零搭建后端框架——异常统一处理的三种方式
  • js截取视频第一帧_短视频如何截取生成GIF?干货分享,大神手把手教你制作GIF动图...
  • 回顾一年的工作历程_ABM2020回顾|我们做过什么(一)
  • 通过改变网络拓扑使用Sniffer Pro监控、分析协议的示意图
  • python locust api_Locust API 文档
  • 暴走后清醒(2006版)
  • sceneflow 数据集多少张图片_快速使用 Tensorflow 读取 7 万数据集!
  • Google Talk Java手机客户端
  • grafa导出数据图标_有这些图表美化工具,十分钟配出炫酷的数据可视化大屏
  • 书脊开胶了用什么胶粘_使用方便快捷的防水快干胶时,要注意些什么呢?
  • 8月22讲课记录
  • 使用智能指针错误导致内存泄漏_第24篇-戏说C++ 内存泄漏(B)
  • 不知多少Java程序员能解答这个问题!
  • Angular 4.x 动态创建组件
  • ES6核心特性
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • Java 网络编程(2):UDP 的使用
  • oldjun 检测网站的经验
  • SpiderData 2019年2月23日 DApp数据排行榜
  • VUE es6技巧写法(持续更新中~~~)
  • Vue官网教程学习过程中值得记录的一些事情
  • vue--为什么data属性必须是一个函数
  • Webpack 4 学习01(基础配置)
  • Yeoman_Bower_Grunt
  • 动态魔术使用DBMS_SQL
  • 开源地图数据可视化库——mapnik
  • 理解在java “”i=i++;”所发生的事情
  • 前嗅ForeSpider教程:创建模板
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 三分钟教你同步 Visual Studio Code 设置
  • 写给高年级小学生看的《Bash 指南》
  • 智能网联汽车信息安全
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • # 飞书APP集成平台-数字化落地
  • #微信小程序:微信小程序常见的配置传旨
  • (day 12)JavaScript学习笔记(数组3)
  • (Python) SOAP Web Service (HTTP POST)
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (强烈推荐)移动端音视频从零到上手(上)
  • (三)c52学习之旅-点亮LED灯
  • (十)T检验-第一部分
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .NET 5种线程安全集合
  • .net连接oracle数据库
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • .net中应用SQL缓存(实例使用)
  • /usr/bin/env: node: No such file or directory
  • @Autowired和@Resource装配
  • [ C++ ] STL---string类的模拟实现
  • [2016.7.test1] T2 偷天换日 [codevs 1163 访问艺术馆(类似)]
  • [Android] Upload package to device fails #2720