引入

在之前的学习中,大致明白了 Neo4j 的基本操作、程序开发、数据库管理等操作,对于一些基本的操作已经足够,而现在则是通过一些高级的使用来探索其他功能的启发。

Read more »

简介

集群技术是一项在较低成本下能有效提高系统整体性能、可靠性、灵活性和可扩展性,并广泛应用于生产系统的必备技术,同样 Neo4j 企业版也提供了集群技术,主要分为:高可用性集群(High Availablity, HA)和因果集群(Causal Clustering)。

Read more »

TRUNCATE 函数

说明

TRUNCATE(X, D) 函数是 MySQL 自带的一个系统函数。其中 X 是数值,而 D 是保留小数的位数。其作用就是按照小数位数,进行数值截取(此处的截取是按保留位数直接进行截取,没有四舍五入)。

Read more »

HTTP API

Neo4j HTTP API 是专门针对跨平台操作开发出来的一套与开发平台、开发语言无关的 API,因为可以使用任何编程语言来调用 Neo4j HTTP API

Read more »

驱动包开发模式

Neo4j 驱动程序也为其他的语言开发了访问途径,编写使用驱动程序的应用程序实例就可以与数据库基于事务的会话。在会话中事务可以运行创建和查询数据的相关命令,也可以定义数据库模式以及监视和管理数据库。当 Neo4j 部署在因果集群中时,驱动程序可以处理读取和写入操作的路由。使用因果集群驱动程序还提供书签,用于保证因果一致性,也就是说应用程序可以在集群的不同成员上运行多个查询,同时保持数据的一致。

Neo4j 驱动程序使用 Bolt 协议进行通信,因果集群提供了使用驱动程序获取集群拓扑的功能,驱动程序必须具有集群感知能力才能提供路由和负载均衡。(Bolt 在多个版本中提供兼容)

Read more »

Neo4j 正式支持 .NetJavaJavaScriptRubyPHPPython 的二进制 Bolt 协议驱动程序。这些开发平台通过引入相应的驱动程序包便可与 Neo4j 相互集成,然后就可以对 Neo4j 进行数据操作。

入门

目前 Neo4j 支持三种开发模式,分别为:

  • Java 嵌入式开发模式。Neo4j 是基于 Java 语言开发的,所以他能与 Java 开发天然结合,完全可以在代码中调用 Neo4jAPI,并将对 Neo4j 数据库的操作嵌入在 Java 代码中。
  • 驱动包开发模式。通过 HTTPHTTP API 的驱动包让非基于 JVM 的开发平台、编程语言也能够操作 Neo4j 数据库。
Read more »

部署

部署主要包括:容量规划、单实例或集群安装及安装后的相关处理。

系统需求

运行一个 Neo4j 数据库实例所需的系统需求清单:

  • CPU:通常性能受限于内存容量和磁盘 I/O 容量。推荐配置:Intel Core i7, IBM POWER8
  • 内存:图越大则所需内存越多。推荐配置:16~32GB 或更多。
  • 磁盘:磁盘性能是最重要的指标。推荐配置:SSD w/ SATA
  • 文件系统:由于普通 Linux / UNIX 系统中存在的缓冲区高速缓存或页面高速缓存,大多数磁盘都是经过缓存进行的。因此当系统发生故障时,这种延迟可能会造成文件更新内容的丢失。推荐配置:ext4 / ZFS
  • 软件:Neo4j 需要一个 Java 虚拟机,因此 Neo4j 中都会提前预装 JVM
Read more »

查询调优

Neo4j 会尽可能地执行查询,然而利用行业的专业知识重新组织语句以获取更好的性能是很有用处的。然而手动优化的总目标是只从图中检索必要的数据,不必要的数据尽可能早地被过滤掉,以减少查询后期需要处理的数据量。同时也要避免返回整个节点和关系,尽量返回节点和关系中需要的数据。

Cypher 执行引擎会将每一个 Cypher 查询都转为一个执行计划。为了减少使用的资源,应尽可能地使用参数代替字面值,这会使得 Cypher 重用查询,而不必解析并构造新的执行计划。

Read more »

问题复现

年后又是一波需求狂潮,在经历了上一周的痛苦上班时间之后,这周一又开始了新的需求,新的 Code 生活也伴随而来重新开始。

首先我先简略描述一下本次的需求,我这边负责的后台向服务端的接口推送一条信息,然后服务端会把接收到的信息处理后,同步推送到我们的另一个接口。
而在上一步的推送信息之后,我们这边会启动一个异步的任务会在特定的时间段内处理服务端返回的信息。
那么问题就来了,在这个异步任务中实时去查询 SQL,但是查询回来的结果是空的

Read more »