Graph Query Language(GQL,图形查询语言) 是由同时维护 SQL
标准的国际工作组开发和维护的一种新语言。

SQL历史

EF
Codd博士在1970年6月在计算机机械协会(ACM)杂志“ACM通讯”上发表了“大型共
享数据库数据关系模型”
。Codd的模型现在被接受为关系数据库管理系统(RDBMS)的终极模型。这种结构化英语查询语言(SEQUEL)由IBM公司开发,从而使用Codd的模
型。SEQUEL后来成为SQL(仍然发音为“sequel”)。1979年,Relational
Software,Inc.
(现在的Oracle)推出了第一个商业上可用的SQL实现。今天,SQL被接受为标准的
RDBMS语言。

最近在抓取一些社交网站的数据,抓下来的数据用MySql存储。问我为什么用MySql,那自然是入门简单,并且我当时只熟悉MySql。可是,随着数据量越来越大,有一个问题始终困扰着我,那就是社交关系的存储

GQL 很大程度上借鉴了现有的语言,主要的灵感来自 Cypher(现在实现版本有 10
多个,包括 6 个商业产品)、Oracle 的 PGQL 和 SQL 本身。GQL 项目是自 SQL
之后的第一个 ISO/IEC 国际标准数据库语言项目。

SQL标准

Oracle努力遵守行业接受的标准,并积极参与SQL标准委员会。
业界认可的委员会是美国国家标准协会(ANSI)和国际标准化组织(ISO),隶属于国际电工委员会(IEC)。
ANSI和ISO / IEC均接受SQ​​L作为关系数据库的标准语言。
当这些组织同时发布新的SQL标准时,标准的名称符合组织使用的惯例,但标准在技术上是相同的。

2008年7月采用最新的SQL标准,通常称为SQL:2008。
本标准的正式名称为:

ANSI / ISO / IEC 9075:2008“数据库语言SQL”,第1部分(“SQL /
Framework”),2(“SQL / Foundation”),3(“SQL / CLI” ),9(“SQL /
MED”),10(“SQL / OLB”),11(“SQL / Schemata”),13(“SQL /
JRT”)和ANSI / ISO / IEC 9075-14: “数据库语言SQL”第14部分(“SQL /
XML”)

澳门新葡萄京官网注册,ISO / IEC 9075:2008“数据库语言SQL”,第1部分(“SQL /
Framework”),2(“SQL / Foundation”),3(“SQL / CLI”), 9(“SQL /
MED”),10(“SQL / OLB”),11(“SQL / Schemata”),13(“SQL /
JRT”)和ISO / IEC 9075-14:2008,“数据库语言SQL “,第14部分(”SQL /
XML“)

就以新浪微博举例,一个大V少则十几万,多则几千万的粉丝,这些关注关系要怎么存呢?在MySql中,一条关注关系(大V
id,大V的一个粉丝
id)存为一条数据,那么当用户数量上来的时候,关注关系轻松破亿,破十亿,甚至上百亿,并且为了保证每条数据的唯一性,还需要设置联合索引,MySql就有些力不从心了。那么有人要说了:分表呀。嗯,没错,分表的确可以在插入端和读取端提升一些速度。比如我们可以根据id哈希到100张表中。查询一个用户有哪些粉丝是快了,但是查询一个用户关注了哪些人时仍然需要遍历全表。好,这时候我们还可以以(id,其关注的一个用户的id)再构造100张表,于是两种查询都快了。然而,后面那100张表是冗余数据,看着就不爽…并且生成一张子图也不方便(需要多次写SQL查表)。

今年 6 月,隶属 ISO/IEC 联合技术委员会 1(负责定制 IT
标准)的全球诸多国家性标准机构开始就 GQL
项目提案进行表决,有七个国家派出专家参与这项为期四年的项目。在本周投票结束,提案获得通过。

SQL如何工作

SQL的优势为所有类型的用户(包括应用程序员,数据库管理员,管理员和最终用户)提供了优势。从技术上讲,SQL是一种数据子语言。SQL的目的是为关系数据库(如Oracle数据库)提供一个接口,所有SQL语句都是指向数据库的指令。在这个SQL中与C和BASIC等通用编程语言不同。SQL的功能如下:

  • 它将数据集合作为组而不是作为单个单元进行处理。

  • 它提供对数据的自动导航。

  • 它使用单独复杂和强大的语句,因此独立。流控制语句最初不是SQL的一部分,但它们可以在SQL,ISO
    / IEC
    9075-5:1996最近被接受的可选部分中找到。流控制语句通常被称为“持久存储模块”(PSM)并且Oracle
    SQL的PL / SQL扩展与PSM类似。

SQL允许您在逻辑级别处理数据。只有当您想要操作数据时,才需要关心实现细节。例如,要从表中检索一组行,您可以定义用于过滤行的条件。满足条件的所有行都在单个步骤中检索,并且可以作为单位传递给用户,另一个SQL语句或应用程序。您不必一一处理这些行,也不必担心物理存储或检索的方式。所有SQL语句都使用优化器,Oracle数据库的一部分决定访问指定数据的最有效手段。Oracle还提供了可以使优化器更好地执行其工作的技术。

SQL为各种任务提供语句,包括:

查询数据

  • 插入,更新和删除表中的行
  • 创建,替换,更改和删除对象
  • 控制对数据库及其对象的访问
  • 保证数据库的一致性和完整性
  • SQL将所有前述任务统一为一致的语言。

于是,在搜索更好的方案时无意间发现了图形数据库,查阅一番资料后感觉确实是个不错的选择,毕竟业界的一些大佬,如twitter,Adobe等也在用。

澳门新葡萄京官网注册 1

所有关系数据库的通用语言

所有主要的关系数据库管理系统都支持SQL,因此您可以将SQL获得的所有技能从一个数据库传输到另一个数据库。另外,用SQL编写的所有程序都是可移植的。他们经常可以从一个数据库移动到另一个数据库,修改很少。

那么,什么是图形数据库呢?在这里我贴上较为官方的定义:a database
that uses graph structures for semantic queries with nodes, edges and
properties to represent and store data – independent of the way the data
is stored internally. It’s really the model and the implemented
algorithms that
matter.
注意,这里只是说数据模型是图结构的,没有说数据的存储也一定要是图结构的。其数据模型如下图澳门新葡萄京官网注册 2

共有十个国家投出了赞成票,其中包括中国、韩国、瑞典、美国、德国、英国、荷兰、丹麦、哈萨克斯坦、加拿大和芬兰。另外有五个国家选择弃权,其理由是缺乏对该提案作出判断或发表评论的专门知识。

使用企业管理器

可以使用SQL语法完成许多操作,可以使用Enterprise
Manager轻松完成。有关更多信息,请参阅Oracle Enterprise
Manager文档集,Oracle数据库2 Day DBA或任何Oracle数据库2 Day +书。


只有日本投了反对票,它列举了两个理由:

词汇约定

用于发出SQL语句的以下词汇约定专门适用于SQL的Oracle数据库实现,但在其他SQL实现中通常可以接受。

当您发出SQL语句时,可以在语句定义中的任何位置的任何位置包含一个或多个选项卡,回车符,空格或注释。
因此,Oracle数据库以相同的方式评估以下两个语句:

SELECT last_name,salary * 12,MONTHS_BETWEEN(SYSDATE,hire_date)

FROM employees

where_id = 30

ORDER BY last_name;

SELECT last_name,

salary * 12,,

MONTHS_BETWEEN(SYSDATE,hire_date)

FROM employees

where_id = 30

ORDER BY last_name;

保留字,关键字,标识符和参数中的情况是微不足道的。然而,案例在文本文字和引用的名称中是重要的。

进入今天的主题,我将以Neo4j为例,说明为什么选择图形数据库

  • 现有的语言已经能实现这类需求
  • 具体来说,SQL/Property Graph Query 扩展以及 SQL
    标准的其余部分可以满足需求

工具支持

Oracle提供了许多实用程序来方便您的SQL开发过程:

  • Oracle SQL
    Developer是一种图形工具,可让您浏览,创建,编辑和删除(删除)数据库对象,编辑和调试PL
    /
    SQL代码,运行SQL语句和脚本,操作和导出数据以及创建和查看报表。使用SQL
    Developer,您可以使用标准Oracle数据库身份验证连接到任何目标Oracle数据库模式。连接后,可以对数据库中的对象执行操作。您还可以连接到所选第三方(非Oracle)数据库(如MySQL,Microsoft
    SQL Server和Microsoft
    Access)的模式,查看这些数据库中的元数据和数据,并将这些数据库迁移到Oracle。

  • SQL *
    Plus是与每个Oracle数据库服务器或客户端安装一起安装的交互式和批处理查询工具。它具有命令行用户界面和名为iSQL *
    Plus 的基于Web的用户界面。

  • Oracle
    JDeveloper是一个支持Java,Web服务和SQL的完整生命周期的多平台集成开发环境。它提供了一个图形界面,用于执行和调整SQL语句和可视化架构图(数据库建模器)。它还支持编辑,编译和调试PL
    / SQL应用程序。

  • Oracle Application
    Express是用于开发和部署数据库相关Web应用程序的托管环境。
    SQL Workshop是Oracle Application
    Express的一个组件,可让您从Web浏览器查看和管理数据库对象。SQL
    Workshop可以快速访问SQL命令处理器和SQL脚本存储库。

Oracle调用接口和Oracle预编译器可让您在过程编程语言中嵌入标准SQL语句。

Oracle调用接口(OCI)允许您在C程序中嵌入SQL语句。

Oracle预编译器Pro * C / C ++和Pro *
COBOL解释了嵌入式SQL语句,并将它们转换为C / C
++和COBOL编译器可以理解的语句。
大多数(但不是全部)Oracle工也支持Oracle SQL的所有功能。

首先,先简要介绍一下Neo4j。Neo4j是由Java和Scala写成的一个NoSql数据库,专门用于网络图的存储。更详细的内容可见官网。作为一个图形数据库,Neo4j有以下优点:

为什么我们需要一种特定于图形的查询语言?

许多供应商、研究人员和用户一致认为,可以使用非关系型“图形原生”存储和运行时模型来开发图形数据库。例如
Neo4j 的行业领先的图形数据库平台和新的 Redis Labs 图形产品。

但是,他们也需要一种类似 Cypher 的语言来支持数据的插入和维护,而不仅仅是数据查询。对于以图行为中心的语言来说,SQL
不太可能是一个合适的模型,所需的语言是能够将图形作为查询输入,然后输出一个图,就像
SQL 可以读取表,并生成实为新表的结果集。

  • 更快的数据库操作。当然,有一个前提条件,那就是数据量较大,在MySql中存储的话需要许多表,并且表之间联系较多(即有不少的操作需要join表)。
  • 数据更直观,相应的SQL语句也更好写(Neo4j使用Cypher语言,与传统SQL有很大不同)。
  • 更灵活。不管有什么新的数据需要存储,都是一律的节点和边,只需要考虑节点属性和边属性。而MySql中即意味着新的表,还要考虑和其他表的关系。
  • 数据库操作的速度并不会随着数据库的增大有明显的降低。这得益于Neo4j特殊的数据存储结构和专门优化的图算法。

GQL 和 SQL 如何协同工作?

许多支持 GQL 提案的公司和国家标准机构并不认为 GQL 和 SQL
是竞争对手,而是通过共享的基础和互操作来相互补充。(其中指的是核心数据类型和表达式的形成方式,以及共享的概念,如目录中持有的模式对象,以及与用户/角色相关的会话)。

SQL/PgQ 查询实际上是一个围绕着一段“proto-gql”的 SQL
子查询。下面有一个示例查询,在今年
SIGMOD 大会接近尾声时,Oracle 的Oskarvanrest 为今年 7
月在阿姆斯特丹举行的链接数据库基准理事会(Link Database Benchmark
Council,LDBC)会议提出的。

澳门新葡萄京官网注册 3

以关键字 MATCH 开头的红色部分是模式匹配查询的一个片段,该查询非常类似用
Cypher 或 PGQL 编写的查询。你可能会注意到,它用于引入标签(如在 Creator
IS
Person 中),以及用于引入主机参数或变量。但是,你也可以在标签表达式中使用冒号(如果
SQL
引擎的解析器是智能的),那么与先前存在的“输入”属性图查询语言的相似性就会更加明显。

PgQ 查询的其他部分(黑色和绿色)将这个 Proto-GQL 连接到一个 SQL SELECT
语句中。表格结果通过 Columns 子句流到常规 SQL
查询中。它们只对与图形查询交互的 SQL 引擎来说是需要注意的,GQL
本身不会涉及到这种 SQL“外部函数接口”。


SQL 生成表,GQL 生成图

SQL 在一个关键方面与
Cypher 语言大不相同,Cypher 让用户在不知道将返回哪些类型的数据的情况下探索其数据图的结构。它可以让你进行真正的图形查询,其中值得注意不仅仅是值,还包括数据子集的形状,与匹配图模式的元素的值有关。换句话说,图查询针对在一个或多个输入图上计算的子图或投射图。

然而,SQL/PGQ、Cypher 和 PGQL
只允许你从图中提取一个表。这是必须保留的重要特性,因为否则就不可能获取存储在图元素上的实际数据值。但是将结果仅限于表意味着你无法轻松创建图转换链,也无法针对多个输入图执行集合操作。你也无法生成和存储快照图,无法定义图投射视图。

GQL 将建立在 openCypher
Morpheus 的基础上(它将 Cypher
引入到 Apache Spark),并结合来自 LDBC 的 G-CORE
的灵感,为用户提供了一种组合图查询语言,支持所有那些功能,这将使 GQL
在概念上等同于 SQL。

更普遍地说,GQL 是一种比 SQL 更现代的语言,它具有更结构化的类型系统。

GQL 项目的工作将于本月晚些时候在坦桑尼亚阿鲁沙召开的 SQL/GQL 标准委员会
ISO/IEC JTC 1 SC 32/WG3 的下一次会议上全面开始。

目前还无法确定 GQL 的第一个可实现版本,但很有可能在 2020
年下半年之前制定某个相当完整的草案。

来源:linkedin

接着,试着从更深一些的层次看图形数据库。我将从Neo4j的数据存储和数据读写两方面来说明为什么选它。

  1. 数据存储
    Neo4j对于图的存储自然是经过特别优化的。不像传统数据库的一条记录一条数据的存储方式,Neo4j的存储方式是:节点的类别,属性,边的类别,属性等都是分开存储的,这将大大有助于提高图形数据库的性能。如下图:澳门新葡萄京官网注册 4

  2. 数据读写
    在Neo4j中,存储节点时使用了”index-free
    adjacency”,即每个节点都有指向其邻居节点的指针,可以让我们在(O(1))的时间内找到邻居节点。另外,按照官方的说法,在Neo4j中边是最重要的,是”first-class
    entities”,所以单独存储,这有利于在图遍历的时候提高速度,也可以很方便地以任何方向进行遍历。澳门新葡萄京官网注册 5

更多的资料可以看参考资料第一条。


关于为什么选图形数据库就说到这。如今可供选择的图形数据库也不少,为什么就选择了Neo4j呢?我简要归结为以下几点:

  • 作为较早的一批图形数据库之一,文档和各种技术博客较多。
  • 最开始曾尝试过flockdb(据说操作简单+轻量级),但是败于安装过程…,依赖太多。
  • 网上经常有人将orientdb,arangodb与neo4j做对比,我当然也考虑过orientdb和arangodb。从易用性来说都差不多。速度上的话看过一些评测,arangodb应该是相对最快的,因为其使用了混合索引。但是从稳定性来说,neo4j是最好的。

时间有限,我并没有通读Neo4j的官方文档。但作为一个数据库使用者,能大概地了解为什么要选这个数据库就已经足够了。

最后做个总结吧。图形数据库是这几年兴起的,整体还不是很完善,而且适用面也是比较窄的。只有在明确自己的需求之后,才能确定是否选择图形数据库。

转载请注明出处:


参考资料

  1. Graph Databases for Beginners: Native vs. Non-Native Graph
    Technology
  2. neo4j是怎么pk掉orientdb和titan的
  3. arangodb官方文档,讲为什么arangodb比neo4j快