图数据库
图数据库是一种根据节点和边存储数据的数据库。数据以非常灵活的方式存储,无需遵循预定义的模型。该图形成了两个节点之间的关系,这种关系可以是有向的也可以是无向的。这些数据库旨在处理数据/节点之间的复杂关系。
节点用于存储数据。每个节点都包含一组属性,这些属性提供有关节点本身的信息。
Edge存储两个节点或实体之间的关系。边总是有起始节点和终止节点。
图数据库如何工作?
与依赖表和列的传统关系数据库不同,图形数据库使用无模式结构。这意味着没有预定义的表或列,可以以灵活、可扩展且高效的方式存储数据。
图数据库使用各种类型的数据模型,包括属性图和 RDF(资源描述框架)图。在属性图中,每个节点和边都可以有多个属性,这些属性是描述节点或边的属性的键值对。在 RDF 图中,节点和边表示为 URI(统一资源标识符),实体之间的关系使用三元组(主语、谓语、宾语)表示。
图数据库通常使用查询语言(例如 Cypher 或 Gremlin)来遍历图、查询数据和更新数据。这些查询语言被设计为用户友好的,使工程师可以轻松地使用图形数据库。
何时使用图形数据库?
当涉及复杂数据时,使用图形数据库。它们对于需要能够建模和查询实体之间关系的应用程序特别有用,例如社交网络、推荐引擎和欺诈检测系统。
社交网络
正如我们所知,社交网络非常复杂且高度关联。它们遵循非常复杂的数据结构。它们遵循用户的帖子、评论和其他实体之间的关系。图数据库允许用户轻松地遍历图并在实体之间进行发现。
以下是如何在社交网络中使用图形数据库的示例:
from py2neo import Graph, Node
# set up graph connection
graph = Graph()
# create user node with attributes
user = Node("User", name="John Doe", age=25, location="New York", interests=["programming", "video games"])
# add user node to graph
graph.create(user)
上面的代码创建了一个具有姓名、年龄、位置和兴趣等属性的用户节点,并将其添加到图数据库中。
推荐引擎
推荐引擎是机器学习算法,用于根据用户之前的操作、偏好和行为向用户推荐项目。它们通常用于电子商务网站、流媒体平台和社交媒体网站,为用户提供个性化推荐。
图形数据库可用于推荐引擎,以更有效地表示和处理数据。图数据库旨在存储和查询实体之间的关系,这是推荐引擎的一个基本方面。以下是如何在推荐引擎中使用图形数据库的示例:
假设我们要构建一个电影推荐引擎。我们可以将电影和用户表示为图中的节点,并使用边来表示电影评级和用户偏好等关系。
每个电影节点都可以具有标题、流派、导演和演员等属性。每个用户节点都可以具有年龄、性别和位置等属性。节点之间的边可以表示不同类型的关系。例如,“已观看”边可以将用户节点连接到电影节点,评级属性表示用户对电影的评级。
通过使用图数据库,我们可以轻松地查询图来为特定用户提出建议。例如,我们可以找到相似用户评价高的电影,或者找到与用户评价高的电影相关的电影。
以下是如何使用 Python 包将电影节点添加到图形数据库的示例py2neo
:
from py2neo import Graph, Node
# set up graph connection
graph = Graph()
# create movie node with attributes
movie = Node("Movie", title="The Matrix", genre="Science Fiction", director="Lana Wachowski", actors=["Keanu Reeves", "Carrie-Anne Moss"])
# add movie node to graph
graph.create(movie)
上面的代码创建了一个具有标题、流派、导演和演员等属性的电影节点,并使用包将其添加到图形数据库中py2neo
。您可以将更多节点添加到同一个图中。
欺诈检测系统
FDS 需要能够通过各种类型的模式识别可疑行为。图形数据库在欺诈检测中非常有用,因为它们可以分析关系并识别可能表明存在欺诈的行为。
下面是 Cypher 中的一个示例,它从不同商家检索涉及同一张信用卡的所有交易:
MATCH (c:CreditCard)-[:USED_FOR]->(t:Transaction)-[:AT_MERCHANT]->(m:Merchant)
WITH c, m, COUNT(t) AS tx_count
WHERE tx_count > 1
RETURN c.number, m.name, tx_count
该查询的作用是匹配在不同商户处用于交易的所有信用卡,并返回信用卡号、商户名称以及涉及该信用卡在商户处的交易次数。这可能有助于识别骗局。
如何使用图数据库?
现在您知道什么是图形数据库、它们的工作原理以及何时可以使用它们。现在问题出现了“好吧,这很酷,但我该如何使用它呢?” 使用图形数据库需要遵循几个步骤-
选择图形数据库软件
首先,您需要选择一个特定的图形数据库平台来使用,例如Neo4j、OrientDB、JanusGraph、Arangodb或Amazon Neptune。选择平台后,您就可以开始使用该平台的查询语言处理图形数据。
规划你的图形模型
选择数据库软件后,定义实体以及它们之间的关系。您可以使用纸笔或绘图工具来创建图形模型的可视化表示。
创建图数据库
完成图形模型后,在图形数据库软件中创建一个新的数据库实例。根据软件的不同,您可以使用命令行或 GUI 创建新的数据库实例。
定义架构
在向图数据库添加节点和边之前,定义架构。架构定义实体和关系类型、属性及其数据类型。大多数图形数据库软件都支持动态模式更新。(我知道我说过“这是一个无模式结构”,但最好定义一个概览结构)
添加节点和边
节点代表图数据库中的实体,边代表实体之间的关系。您可以使用软件的特定语言(例如 Cypher)添加节点和边
CREATE (user:User {name: 'Jatin'})
CREATE (article:Article {title: 'Graph Databases vs. Relational Databases'})
CREATE (user)-[:WROTE]->(article)
上面的代码创建了两个节点,一个带有标签“User”,一个带有标签“Article”,然后使用 WROTE 关系类型在两个节点之间创建关系。
查询数据
要查询数据,可以使用MATCH
Cypher 中的子句。例如,要查找 Jatin 撰写的所有文章,您可以使用以下代码:
MATCH (user:User {name: 'Jatin'})-[:WROTE]->(article:Article)
RETURN article.title
更新数据
要更新数据,您可以使用SET
Cypher 中的子句。例如,要将 ID 为 47 的文章标题更新为“Graph Databases”,您可以使用以下代码:
MATCH (article:Article {id: 47})
SET article.title = 'Graph Databases'
删除数据
要删除数据,可以使用DELETE
Cypher 中的子句。例如,要删除带有 id 的文章节点47
以及连接到该节点的任何关系,您可以使用以下代码:
MATCH (article:Article {id: 47})
DETACH DELETE article
此代码首先匹配文章节点,然后在删除节点本身之前分离连接到该节点的所有关系。
优点
- 它们非常灵活地处理复杂的数据和关系。
- 他们使用图形遍历来浏览大量相互关联的数据。
- 它们还可以水平扩展,这意味着添加更多机器来处理越来越多的数据。
- 图数据库可以对大数据或小数据进行实时更新,同时支持查询。
缺点
- 对于完全适合表格和行的结构化数据,它们可能效率不高。
- 它们更复杂,可能需要比关系数据库更多的知识。