一文带你了解不一样的SQL,惊喜多多( 五 )


目前,MariaDB(OQGRAPH)、Oracle、Microsoft SQL Server 等关系型数据库都提供了图结构存储支持 。上图是 Oracle 中一个金融交易系统的图形数据库示例,其中 Account、Person 和 Company 是顶点,ownerOf、worksFor 和 transaction 是边;另外,name 和 number 是顶点的属性,amount 是边的属性 。它们可以使用以下数据表进行存储:

一文带你了解不一样的SQL,惊喜多多

文章插图
 
基于这些表可以创建以下属性图形:
CREATE PROPERTY GRAPH financial_transactions  VERTEX TABLES (    Accounts LABEL Account,    Persons LABEL Person PROPERTIES ( name ),    Companies LABEL Company PROPERTIES ( name )  )  EDGE TABLES (    Transactions      SOURCE KEY ( from_account ) REFERENCES Accounts      DESTINATION KEY ( to_account ) REFERENCES Accounts      LABEL ( transaction ) PROPERTIES ( amount ),    PersonOwnerOfAccount      SOURCE Persons      DESTINATION Accounts      LABEL ownerOf NO PROPERTIES,    CompanyOwnerOfAccount      SOURCE Companies      DESTINATION Accounts      LABEL ownerOf NO PROPERTIES,    PersonWorksForCompany      SOURCE Persons      DESTINATION Companies      LABEL worksFor NO PROPERTIES  );接下来我们就可以直接使用 SQL 语句查询图结构,例如以下语句查找所有和名叫 Nikita 的人有过交易的人员和信息:
 SELECT owner.name AS account_holder, SUM(t.amount) AS total_transacted_with_Nikita    FROM MATCH (p:Person) -[:ownerOf]-> (account1:Account)       , MATCH (account1) -[t:transaction]- (account2) /* match both incoming and outgoing transactions */       , MATCH (account2:Account) <-[:ownerOf]- (owner:Person|Company)   WHERE p.name = 'Nikita'GROUP BY owner其中,MATCH 子句用于遍历图形结构并返回匹配的模式,语法和 Neo4j 的 Cypher 查询语言中的 MATCH 子句非常类似 。以上查询返回的结果如下:
+----------------+------------------------------+| account_holder | total_transacted_with_Nikita |+----------------+------------------------------|| Camille        | 1000.00                      || Oracle         | 4501.00                      |+----------------+------------------------------+随着 SQL 标准第 16 部分(SQL/PGQ)即将出现,我们可以在关系数据库中直接存储属性图结构数据,并且在 SQL 中进行属性图模式匹配,例如最短路径查找和最佳路径查找;SQL/PGQ 的另一个优势就是可以支持分组(GROUP BY)、聚合(AVG、SUM、COUNT 等)、排序(ORDER BY)以及许多其他的 SQL 功能 。
五.SQL 与流数据处理
流数据是一组顺序、大量、快速、连续到达的数据序列,一般情况下可被视为一个随时间延续而无限增长的动态数据集合 。常见的流数据包括应用程序日志文件、网购数据、游戏玩家互动数据、社交网站信息、金融交易实时数据或地理空间服务,以及来自数据中心内所连接设备或仪器的遥测数据等 。
目前,常用的大数据流处理平台 Spark Streaming、Storm、Flink、ksqlDB 等都提供了 SQL 流数据处理功能;同时,一个关于流数据处理的 SQL 标准部分正在准备中 。
其中,ksqlDB 是一个基于 Apache Kafka 的事件流数据库,提供了轻量级的 SQL 语句,大大降低了构建流处理应用程序所需的操作复杂性 。
一文带你了解不一样的SQL,惊喜多多

文章插图
 
客户端应用程序可以采用拉取查询(pull query)和推送查询(push query)两种方式查看和订阅数据流变化 。


推荐阅读