决定公司下一步时最困难的工作之一就是决策。我们一生中至少面临一次艰难的决定。在权衡了利弊之后,以及决策的结果将如何影响我们的未来,我们为我们和周围的每个人都选择了最佳选择。
在公司级别上,做出决策时可能会有更多的危险,因为它们会影响数十或数百人,资产,组件或软件系统。选择合适的选项需要通过仔细的分析来最大化利润并采取最佳步骤来保护人们和产品的环境。
为了帮助做出决策,公司执行影响分析或情况。基于对所提供数据的仔细分析,权衡了某些决策的结果,并做出了最佳分辨率。
但是真的很容易吗?
以下文章将展示一个使用Memgraph和Memgraph Lab的影响分析的实践示例,以及网络上的决策如何轻松而高效!
影响分析与如果情况有什么区别?
在我与客户的经验中,我经常听到领导职位的人的影响分析,而数据科学家则更喜欢“如果情况”。那么真的有什么区别吗?
这是文学对如果情况的看法:
在方案计划中,如果存在因素的可变性,则情况提供了一种考虑对计划,项目或时间表的影响的方法。与其假设过程的每个部分都会遵守某种理想,而是涉及检查结果,如果某些事情花费或多或少的时间,需要或多或少的资金,导致意外后果等等。
>对于影响分析,定义如下:
的影响分析(也称为变更影响分析)是确定业务决策的潜在积极和负面后果的分步过程。公司还可以进行影响分析,以确定他们将如何应对计划外的破坏性事件,例如数据丢失,供应链中的崩溃或自然灾害。
我认为,您的任何术语都不会遥不可及,因为一件事是可以肯定的 - 两者的目标是预测决定的结果。
在处理网络中的影响分析时遇到困难
重要事件平台处理影响分析需要处理的是网络上的更新和分析。
在化学工业中,数据科学家可能会通过添加新反应器来改变化学植物的拓扑结构,以查看拓扑是否产生更好的流量。在云计算中,云工程师可能希望更改配置资源的数量,以查看系统是否以相同的性能达到最低成本。供应链公司可能会增加另一种生产线,并查看它是否最大化其生产。
步骤不同的行业采取什么样的情况:
- 在网络上进行多个更新。
- 执行分析。
- 如果结果令人满意,请继续更新或删除更新。
- 如果结果不满意,请继续更新或删除更新。
既可以更新图形又删除更新,这是一个选项,因为尽管结果可能很棒,但这个想法可能处于实验阶段,或者员工可能希望通过同一网络探索更多方案。
数据库理论告诉我们,交易可以通过可选的回滚或提交产生更新,因此对网络的纯粹修改不应该是一个问题。真正的问题实际上是,需要执行哪种分析,并且数据库系统是否能够执行此类分析?
数据库系统如今已与不同类型的数据进行了各种集成。乘车行业可能会使用空间数据和空间索引来优化城市中出租车司机的位置。录制传感器数据是时间序列数据库的好用例。现在,大多数关系数据库都具有有效与文本数据有效工作的功能。但是,当涉及到网络时,all except graph databases fail to model any kind of efficient traversals or graph analytics in the network。
由于数据库级别的工具不足,只有两个可能的解决方法:
- 克隆网络并在克隆上进行更新,然后将其删除。
- 将网络加载到内存中,在代码中执行更新和分析。
无论哪种方式,都需要单独和谨慎地进行更改。第一个解决方法听起来可以通过,因为数据保持一致,但是在大型网络的情况下,它可以使内存增加一倍,并且是一个大问题。
第二个解决方案依赖于数据处理库的性能,例如NetworkX,iGraph等。尽管其中一些人确实是表演者,例如IGRAPH,但它们仍然需要将拓扑加载到记忆中并与之合作。不仅如此,如果情况下的结果不令人满意,还需要有一种方法来恢复到以前的拓扑结构,以再次尝试新的修改,并且数据库系统并非旨在保持交易的持续性。外部处理。
解决方案:如果您将memgraph用于何种情况,该怎么办?
如果只有一种封装存储和数据处理的方法。在同一交易中执行更新将极大地缓解生活。
幸运的是,Memgraph提供了一个称为查询模块的概念 - 查询中复杂分析过程的执行。让我看下面的示例
MATCH (n)
CALL my_awesome_module.my_awesome_procedure(n)
YIELD result
RETURN result;
此查询还执行包含程序化代码的过程,该过程允许在数据库级别上直接表达更好的表达。从简单的聚合到复杂的图形算法(例如社区检测),您可以用Cypher表达的所有内容都可以作为查询模块实现。
此外,Memgraph开发了Memgraph Mage,这是一个图形算法库,其中包含所有典型的流媒体甚至机器学习算法。诸如Pagerank或中心算法之类的分析不再需要在应用程序代码中实现,因为它们都包含在一个平台中-Memgraph。
如果您不需要的算法不在库中,或者它太定制了,那么您可以随时写自己的算法。 Memgraph支持C,C ++,Python和Rust作为编写查询模块和开发自定义分析的可能接口。
查询模块如何更改如何工作流程?让我们看以下查询:
BEGIN; // start of the transaction
// update 1
// update 2
CALL my_awesome_module.my_awesome_algorithm(...)
YIELD result
RETURN result;
ROLLBACK; // reverting updates
上面的流程可确保由于测试网络拓扑的实验阶段而不会更新该图,但是它仍然产生有用的分析。如果结果令人满意,则可以通过使用COMMIT
而不是ROLLBACK
将更新应用于网络。
此工作流解决了几个问题:
- 图形未进行更改而更新。
- 执行自定义分析以显示决策结果。
- 更改可以更新图形。
- 更改可以回滚。
- 数据始终保持一致
- 通过运行试用实验而无需破坏数据 ,可以有效地最大程度地减少风险。
让我们查看一个如果场景实现的实践示例。
带有Memgraph Lab的展示示例
以下示例涉及虚构的化学植物。目标是优化拓扑以产生通过工厂的最大流量。所有查询均在Memgraph的可视化工具Memgraph Lab中运行,该工具提供自定义样式,可在网络上最大程度地可见性。以下查询检索化学植物的初始拓扑。
MATCH (n)-[r]->(m) RETURN n, r, m;
每个化学植物组件均使用字母的字母命名,连接组件的关系象征着管道,允许图片上的数字显示一定数量的流量。
第一个交易查询将通过添加额外的工厂组件并显示拓扑更改,然后回滚更改,因此更改实际上是数据中的不可见。
BEGIN;
MATCH (i:I) MERGE (i)-[:CONNECTED_TO {flow: 1}]->(:J);
MATCH (n)-[r]->(m) RETURN n, r, m;
ROLLBACK;
由于变化被回滚,因此原始拓扑与其初始状态相同。
MATCH (n)-[r]->(m) RETURN n, r, m;
这就是使用交易的查询如何运行。现在,让我们进行影响分析或如果情况。
在下面的示例中,我们将分析网络中一个点的流量。用于计算流量的更熟悉的图形算法之一称为MaxFlow。下面查询中的MaxFlow算法将返回从组件A
到组件F
的最大资源流。
MATCH (a:A), (f:F)
CALL max_flow.get_flow(a, f, “flow”) YIELD max_flow
RETURN max_flow;
如果您想了解有关MaxFlow算法的更多信息,则可以在Mage Graph Algorithm库中与many other graph algorithms一起找到here。
让我们查看网络的来源,即组件A
。它有2个传出的流量为13和11,理想情况下,最大流量为24。
算法计算出的当前最大流量为23。当然,我们可以更好地将流量增加到24。但是,这不是一个直接的工作,可能需要试用和错误,直到我们正确正确。
在检查网络后,我们通过对组件E
和F
之间的关系进行升级,为问题提供了潜在的解决方案。我们将将这些节点之间的流量增加1,因此Node F
的总输入等于24(17来自Node E
+ 7的Node C
)。
BEGIN;
MATCH (e:E)-[r:CONNECTED_TO]->(f:F)
SET r.flow = 17;
MATCH (a:A), (f:F)
CALL max_flow.get_flow(a, f, “flow”) YIELD max_flow
RETURN max_flow;
ROLLBACK;
一旦升级了组件E
和F
之间的流量,最大流量就增加到24,即来自源的全流!因为此升级解决了问题,所以查询再次运行,但是这次进行了更新,并将利益相关者告知对工厂这一部分的积极影响。
BEGIN;
MATCH (e:E)-[r:CONNECTED_TO]->(f:F)
SET r.flow = 17;
MATCH (a:A), (f:F)
CALL max_flow.get_flow(a, f, “flow”) YIELD max_flow
RETURN max_flow;
COMMIT;
让我们升级组件A
和D
之间的关系,以最大程度地提高流程。
BEGIN;
MATCH (a:A)-[r:CONNECTED_TO]->(d:D)
SET r.flow = 20;
MATCH (a:A), (f:F)
CALL max_flow.get_flow(a, f, “flow”) YIELD max_flow
RETURN max_flow;
ROLLBACK;
但是,流量保持不变。因此,此升级实际上并没有产生更好的结果,并且没有理由提交它,因为网络中需要不同或更多更新以最大化流程。
注意到试验并回滚拓扑后,数据准备好进行更多示例和实验,直到我们获得成功的拓扑结构,然后实际上更新现场的工厂。
基本上就是这样!有了几个命令,关于数据库交易的知识以及存储与处理能力相结合,我们能够执行复杂的影响分析和如果方案,而不必担心会丢失或破坏数据。那有多酷?
结论
尽管graph databases are the right tool用于进行影响分析和网络上的情况,但通常使工作很困难的是将分析和存储放在不同的存储桶中。 Memgraph作为平台包括有关图形存储的自定义分析,通过快速有效的网络分析来最大程度地降低风险。
查看Memgraph还可以如何帮助real-time analysis,以更快地决策。对于任何其他问题,请随时使用join our Discord server,我们很乐意与您讨论进一步分析您的网络到optimize it,减轻更多风险并改善您的业务。