任务管理可能非常艰巨。对于管理者而言,监控分散且彼此断开连接的任务仍然是他们职业中的常态和痛苦。能够立即了解项目的进展情况,而无需浪费时间挖掘这些信息,对于任何管理者来说都是一项宝贵的资产。
拥有一个能够清晰地可视化每个任务进度的项目管理系统将节省时间、减少错误,并使管理者能够更精确地计划他们的下一步行动。
这样的应用程序需要一个强大的数据库来有效地向用户显示图表和资源,这就是为什么此 Launchpad 应用程序使用 Redis 来创建自己的项目管理应用程序。
RedisGraph 是此应用程序的起点,因为它能够简化高度连接数据的遍历并提供上下文见解。
让我们来看看他们是如何将这个项目变为现实的。但在我们深入研究之前,请务必查看我们在 Launchpad 上的一系列令人兴奋的应用程序。
你将构建一个强大的可视化项目管理应用程序,它将帮助用户可视化和分类任务,同时使用 Redis 突出显示它们之间的不同关系。任务可以是一个想法、目标、史诗级功能、简单任务或错误。
从头到尾,此应用程序的核心目标是使监控任务集群变得简单容易。下面我们将带你了解每个步骤,以及所需的组件及其功能。
安装以下软件
首先,确保你有一个可用的 Docker 环境。拉取镜像并启动容器:
docker-compose up -d
code-red % docker-compose up -d
[+] Running 5/5
⠿ Network code-red_default Created 0.1s
⠿ Container code-red_postgres_1 Started 1.6s
⠿ Container code-red_redis_1 Started 1.6s
⠿ Container code-red_reset_1 Started 3.3s
⠿ Container code-red_app_1 Started
docker-compose run --rm app bin/webpack
docker-compose exec app rails db:setup
创建数据库“codered_development”和“codered_test”。
设置好之后,将示例数据加载到 PostgreSQL 和 Redis 数据库中
docker-compose exec app rails database:seed
docker-compose exec app rails database:seed
== Creating users ==
== Creating projects ==
== Creating tasks ==
该应用程序现在应该可以在 http://localhost:3000 上使用。
首先单击屏幕左上角的加号以创建新任务。然后你将看到下面的图片。在顶部,你可以为任务创建一个标题,并在下面的文本框中添加描述。
在标题的正下方,你将看到一个下拉菜单面板。在最左边,你可以决定任务的性质。在中间,你可以设置任务完成的截止日期,在最右边,你可以将任务分配给特定的人。
此应用程序的一个核心好处是能够看到不同任务之间的关系,正如你将从以下图像中看到的那样。
要实现此目的,首先单击一个任务以访问其核心菜单。从这里,你将在底部看到一个名为“添加关系”的下拉菜单(参见下图),你可以在其中决定此任务将与其他任务建立什么关系。
在此栏的右侧,你可以选择要与哪个任务共享关系。
作为用户,你将需要查看任务。一个弹出窗口应显示标题、描述、截止日期、状态、类型和分配任务的人员。
你可以修改任务的标题、描述、截止日期、状态、类型和分配人员。这样做很容易。单击一个任务,你将拥有
要删除任务,只需单击任务菜单右下角的垃圾桶图标。 在删除任务之前,应显示一个确认模态框。
作为用户,你将需要创建两个任务之间的关系。关系应具有以下类型
blocks`/`blocked_by`,`parent_of`/`child_of
或
related
在某个时候,你可能想要删除一个关系。在删除任务之前,不应显示确认模态框。
项目以关系方式存储在 PostgreSQL 中。一个项目具有以下属性
id: 用户标识符
user: 项目的所有者
name: 项目的人类可读名称
该项目链接到一个图形(使用 id 作为图形名称)一个图形有很多任务。
任务作为节点存储在 Redis Graph 中。任务是一个图形节点,具有以下属性
一个任务可以通过关系链接到许多其他任务。
关系作为边存储在 Redis Graph 中。关系是有向图的边,具有以下属性
from: 源节点
type: 之一
Blocked By
Child Of
Related To
to: 目标节点
关系存储为有向边,但在界面中会呈现两个方向。例如,如果任务 A 被任务 B 阻止,则任务 B 将显示为“阻止任务 A”。也可以在两个方向上添加关系。
一个图形有很多任务,这些任务使用以下 Redis Graph 查询获取
"GRAPH.QUERY" "055616f0-a130-42b1-a3fd-81b7c8a3ef1b" "MATCH (n:Task) RETURN n" "--compact"
使用以下查询创建和更新具有所有属性的任务
"GRAPH.QUERY" "055616f0-a130-42b1-a3fd-81b7c8a3ef1b" "MERGE (n:Task {id: 'f5ec1f25-0cee-49d0-9a85-1043f04ea845'}) SET n.created_at = '2021-05-15 10:20:28 UTC', n.updated_at = '2021-05-15 10:20:28 UTC', n.graph = '#<Graph name=055616f0-a130-42b1-a3fd-81b7c8a3ef1b>', n.id = 'f5ec1f25-0cee-49d0-9a85-1043f04ea845', n.title = 'Submit hackathon app', n.description = '<p>Description of my task</p>', n.deadline = '2021-05-15', n.status = 'todo', n.type = 'task', n.user_id = '25714246-be92-4d96-b1ce-cbb57aaf4747'" "--compact"
使用以下查询删除任务
"GRAPH.QUERY" "055616f0-a130-42b1-a3fd-81b7c8a3ef1b" "MATCH (n:Task {id: 'f5ec1f25-0cee-49d0-9a85-1043f04ea845'}) DELETE n" "--compact"
任务的相关节点始终基于关系类型进行查询。使用以下查询获取相关任务
"GRAPH.QUERY" "055616f0-a130-42b1-a3fd-81b7c8a3ef1b" "MATCH (n:Task {id: 'c9bc52a0-c436-499c-954c-da40e82f50b2'}) -[r:blocked_by]-> (m:Task) RETURN n, m, type(r) AS t" "--compact"
使用以下查询将两个任务链接在一起
"GRAPH.QUERY" "055616f0-a130-42b1-a3fd-81b7c8a3ef1b" "MATCH (n:Task {id: '1ad21814-69d7-47d0-a7bb-de678b86c653'}), (m:Task {id: '07427e6b-7bba-44e4-b967-8fb5ca098053'}) MERGE (n) -[r:blocked_by]-> (m)" "--compact"
使用以下查询将两个任务彼此取消链接
"GRAPH.QUERY" "055616f0-a130-42b1-a3fd-81b7c8a3ef1b" "MATCH (n:Task {id: '1ad21814-69d7-47d0-a7bb-de678b86c653'}) -[r:related_to]-> (m:Task) DELETE r" "--compact"
构建了一个 DSL 来适应和简化图的持久性。 它的功能是提供一个小的但强大的接口,让习惯于 Active Record API 的开发人员感到熟悉。 实现此构造的主要类可以在 app/graph/dsl.rb 中找到。
这是一个查询的示例
query = graph
.match(:n, from.class.name, id: from.id)
.to(:r, type)
.match(:m, to.class.name)
.delete(:r)
query.to_cypher
# => "MATCH (n:Task {id: 'c9bc52a0-c436-499c-954c-da40e82f50b2'}) -[r:blocked_by]-> (m:Task) DELETE r"
query.execute
# => []
对于任何希望最大化效率并超越竞争对手的组织来说,断开连接和隐藏的任务都是一种威胁。
能够利用应用程序清晰地可视化任务分配及其关系的管理者可以更井井有条地进行线性思考,并在高压情况下更快地做出决策。
RedisGraph 是一个至关重要的组件,因为它允许高效地传输数据,同时投射每个任务及其关系的可视化效果。
如果您想了解有关此应用程序的更多信息,您可以访问 Redis Launchpad。 并且当您在那里时,请务必探索我们为您提供的所有其他创新应用程序。
Florian Dejonckheere
Florian 是一位经验丰富的 Ruby on Rails 开发人员,在 NephroFlow 担任软件工程师。