Redis 是一个 NoSQL 数据库,它允许用户以多种数据结构存储各种数据。我们看到客户需要创建高度连接的数据,并通过使用图技术从中获取洞察。最初于 2018 年发布,RedisGraph 是这项努力的成果。
RedisGraph 基于一种独特的方法和架构,它将 Cypher 查询语言转换为在基于 GraphBLAS 的引擎上执行的矩阵操作。通过使用稀疏矩阵表示图,并利用 GraphBLAS 的能力来处理它们,RedisGraph 提供了一种快速高效的方式来管理和处理图数据,在某些应用中已证明比其他方法具有显著优势。
自 RedisGraph 1.0 版本发布以来,该项目已在 GitHub 上获得 1,000 多个 star,Docker 拉取量超过 100,000 次。在此期间,我们一直在努力构建下一个版本,我们很高兴宣布推出 RedisGraph 2.0,旨在客户最重视的领域实现 RedisGraph 1.0 的承诺。图数据库可以支持广泛的用例,从资源管理到医疗保健。我们一直努力支持资源管理、欺诈预防、图辅助搜索和知识图谱等一系列应用所需的查询。
自 RedisGraph 1.0 版本以来,RedisGraph 增强功能太多,无法在此一一列出。我们将通过改进 Cypher 支持、全图响应以及集成RediSearch进行图上的全文搜索的示例来概述这些增强功能。我们还将详细介绍RedisInsight对图的支持增强,并介绍两个 RedisGraph 合作伙伴:Linkurious 和 Graphileon。
要了解有关 RedisGraph 2.0 显著性能增强的更多信息,并获取有关基准测试过程的更多详情,请查看RedisGraph 2.0 性能基准测试。
RediSearch 1.6 的发布引入了一种新的低级 API,允许其他模块使用 RediSearch 进行二级索引和全文搜索。RedisGraph 2.0 是第一个充分利用此能力的通用模块。在此发布之前,RedisGraph 通过跳跃列表具有索引功能,性能相当不错,但仅限于精确匹配,不支持前缀或模糊匹配。此外,也无法将给定标签上的两个独立索引用作复合索引。
RedisGraph 2.0 支持对属性值进行全文搜索。可以为特定的节点和属性组合创建索引:
CALL db.idx.fulltext.createNodeIndex('Person','name')
然后可以通过 Cypher 进行查询,示例如下
CALL db.idx.fulltext.queryNodes('Person','Bob')
YIELD node AS p
RETURN p.name
紧跟在 CALL 表达式后面的可以是各种 Cypher 表达式。返回的节点可以与 match 表达式结合使用,以进一步限定搜索结果。通过图的连接来丰富搜索结果被称为图辅助搜索。
图辅助搜索的一个例子是查找通过一定程度的隔阂与某个个体连接的人。一个常见的例子是 LinkedIn 中的搜索功能,与您联系更紧密的人员会列在搜索匹配项的顶部。
以下查询演示了如何实现这一点
CALL db.idx.fulltext.queryNodes('Person','%yif%') YIELD node
MATCH p=(node)-[:CONNECTED*1..3]->(:Person {name:'Pieter'})
RETURN p.name, p.title, length(p) AS connectedness
ORDER BY connectedness ASC LIMIT 20
RedisGraph 2.0 现在可以返回节点、关系及其他数据类型,而不仅仅是属性值的表格结果。例如,以前您只能返回表格结果(例如,属性值)
MATCH (me:Person)-->(friend:Person)-->(fof:Person)
WHERE me.name='Pieter'
RETURN friend.name, fof.name
借助全图响应,您可以直接返回节点和关系。例如,之前的查询可以返回朋友、朋友的朋友以及他们之间的关系:
MATCH (me:Person)-->(friend:Person)-[f:FRIEND]->(fof:Person)
WHERE me.name='Pieter'
RETURN friend, f, fof
这项新功能支持对象图映射 (OGM)、子图查询以及可视化等用途,接收应用程序需要所有节点及其关系。
为了展示全图响应的强大功能,我们想展示一些与 RedisInsight 的集成以及此功能促成的与 Linkurious 和 Graphilean 的合作。
RedisInsight 中的 RedisGraph
一个这样的应用是RedisInsight,用户现在可以输入查询并接收可视化结果(如上所示)。全图响应允许 RedisInsight 呈现可视化结果,并允许检查查询返回的所有节点和边的属性,而无需提前知道这些属性。
RedisInsight 1.2 直接支持探索和查询存储在 Redis 中的图。对全图响应的新支持允许 RedisInsight 将查询子图直接可视化呈现给用户。随后,用户可以单击图中的节点和边来检查属性值或进一步扩展图。
Linkurious
Redis 与法国软件开发商Linkurious建立了合作关系,该公司提供企业级平台Linkurious Enterprise,通过图分析提供欺诈、洗钱和网络威胁防护。Linkurious 开发了OGMA 库,为 RedisInsight 中的可视化提供支持。该库允许用户与存储在 RedisGraph 中的图进行可视化交互。
此外,RedisGraph 2.0 中现已提供的全图响应支持与 Linkurious 的图可视化和分析平台集成。我们期待未来实现更深度的集成。
此外,RedisGraph 2.0 中现已提供的全图响应支持与 Linkurious 的图可视化和分析平台集成。我们期待未来实现更深度的集成。
Graphileon
2020 年 1 月 27 日,Redis 与荷兰软件公司Graphileon宣布建立合作关系,允许 RedisGraph 用户在 Graphileon 的高级图工具中管理数据和构建应用。RedisGraph 和 Graphileon 的结合使我们的客户能够享受快速便捷的数据管理,并利用 Cypher 查询语言的强大功能查询和分析数据,同时充分利用 RedisGraph 的特定优势。
RedisGraph 2.0 中添加的 Cypher 增强功能列表非常长。值得注意的添加包括各种运算符和函数、对简单 case 语句的支持、增强的合并支持、聚合计数、路径命名支持以及模式匹配中实体重用。无法在一篇博文中解释所有新增功能,因此我们来看一个三元闭包的例子,以突出其中一些最有趣的功能。
对合并、路径和运算符的改进支持使得图操作获得了新的支持。我们可以追踪两个不相关节点之间某个共同的共享关系,从而推断出新的关系。例如,如果两个人认识同一个共同的人,社交媒体服务可能会建议引荐。类似地,如果两个人由同一个人管理,则他们在组织中是同事。计算这些新关系就是三元闭包的例子。
考虑下面的两个图。左边的图显示了“朋友”关系(即谁认识谁)。右边的图显示了组织结构(即谁管理谁)。在这两个图中,“B”和“C”节点之间的关系在图中均不存在。
我们可以通过追踪“KNOWS”关系,在左边的图中查询建议的引荐
MATCH (b:Person)-[:KNOWS]->(a:Person)-[:KNOWS]->(c:Person)
WHERE NOT (b)-[:KNOWS]-(c) AND b <> c
RETURN b, c
该查询通过节点 A 追踪从节点 B 到节点 C 的“KNOWS”关系,但通过“WHERE NOT”子句限定了我们想要没有现有关系(或循环)的节点。
在右边的图中,我们可以通过找到两个由同一个人管理但没有现有同事关系的人之间的路径,来创建同事关系(通过 MERGE)
MATCH (b:Person)<-[:MANAGES]-(a:Person)-[:MANAGES]->(c:Person)
WHERE NOT (b)-[:PEER]-(c) AND b <> c
MERGE (b)-[:PEER]-(c)
我们可以通过向边添加角色和方向来进一步限定关系
MATCH (b:Person)<-[:MANAGES]-(a:Person)-[:MANAGES]->(c:Person)
WHERE NOT (b)-[:PEER]-(c) AND b <> c
WITH b, c,
CASE b.level
WHEN 'Director' THEN 'mentor'
ELSE 'peer'
END AS role
MERGE (b)-[:PEER {role:role}]->(c)
请继续关注 Redis 博客,以便在接下来的几个月中获取更多关于 RedisGraph 2.0 新功能的详细示例。我们也在努力进一步提升 RedisGraph 性能,扩展 Cypher 支持范围(例如 OPTIONAL MATCH),并在未来的版本中通过开源LAgraph 算法集合为 GraphBLAS 添加图算法。
RedisGraph 2.0 现已通过Docker、Redis Enterprise Software (RS) 5.4.14 和Redis Cloud Pro 提供。如果您曾试用 RedisGraph 1.0,请查看最新版本,了解新增和改进的功能。如果您对图数据库感兴趣,可以考虑深入了解 RedisGraph 2.0 的强大功能。如果您是 Redis 用户但对图数据库不熟悉,现在是了解 RedisGraph 对您现有应用有何作用的好时机。