论图计算

泰坦球 自从机械计算开始以来,图形概念就已经存在,并且在纯数学领域已经存在了数十年。 由于数据库的黄金时代,图形在软件工程中变得越来越流行。 图形数据库提供了一种持久化和处理图形数据的方法。 但是,图形数据库并不是存储和分析图形的唯一方法。 图形计算在使用图形数据库之前已有一段历史,并且其未来不一定会与典型的数据库问题纠缠在一起。 有许多图形技术,每种技术都有其各自的优点和缺点。 有效的图形计算需要在正确的时间利用正确的技术。

结构:使用图对真实场景进行建模

顶点边缘

图 (或网络 )是一种数据结构。 它由顶点(点)和边缘(线)组成。 许多现实世界的场景可以建模为图形。 这不一定是现实的某些客观性质所固有的,而是主要基于这样一个事实,即人类根据客体(顶点)及其彼此之间的相互关系(边缘)来主观地解释世界(一种反对这一观点的论点 )。 图计算中常用的数据模型是属性图 。 以下示例说明了通过三种不同方案进行的图形建模。

软件图

Stephen是名为TinkerPop的面向图形的工程小组的成员 。 斯蒂芬为Rexster做出了贡献。 Rexster通过软件依赖关系与其他项目相关。 当用户在Rexster中发现错误时,他们会发出票证 。 可以通过图形方便地捕获对协作编码环境的描述。 顶点(或事物)是人员,组织,项目和票证。 边(或关系)例如是成员资格,依赖关系和问题。 可以使用点和线将图形可视化,下面描述了上述情况。

软件图

讨论图

Matthias对图感兴趣。 他是Aurelius的CTO和图形数据库Titan的项目负责人。 Aurelius有一个邮件列表 。 在此邮件列表上,人们讨论了图论和技术。 Matthias参与了讨论。 他的贡献越来越多。 邮件列表以递归方式显示为一棵树 。 此外,消息的非结构化文本引用了共享概念。

讨论图

概念图

图可以用来表示任意概念之间的关系,甚至是与有关的概念。 例如,请注意后面的句子中的概念(斜体)如何关联。 可以表示为邻接表 。 处理的一般方法是通过图遍历图形遍历有两种常规类型: 深度优先宽度优先图形可以保存在称为图形数据库的软件系统中。 图形数据库以不同于常见软件知识的关系数据库的方式组织信息。 在下图中,与有关的概念相互链接,表明概念关系形成了图。

概念图

多域图

前面的三个场景(软件,讨论和概念)是真实系统(例如GitHub , Google Groups和Wikipedia )的表示。 这些看似完全不同的模型可以通过共享顶点无缝集成到单个原子图结构中。 例如,在关联的图中, Gremlin是Titan的依赖项,Titan由Matthias开发,Matthias在Aurelius的邮件列表上写消息(软件与讨论合并)。 接下来, 蓝图是Titan的依赖项,Titan是带标签的 (软件与概念合并)。 虚线表示其他此类跨域链接,这些链接演示了如何在跨域共享顶点时如何创建通用模型。 集成的通用模型可以经受比任何单个模型单独提供的服务更丰富(也许更智能)的服务。

通用图

流程:通过遍历解决实际问题

顶点边缘遍历 到目前为止,已经提出了一组相互关联的域的单个图形模型。 模型只有在可以利用模型来解决问题的过程中才有用。 就像数据需要算法一样,图也需要遍历 。 遍历是一种算法/定向遍历图,以便确定路径(称为导数)或收集信息(称为统计信息)的过程。 即使是查看图形可视化的人类视觉系统,也是一个遍历引擎,利用声波运动来识别模式。 但是,随着图形的变大和问题需要精确的逻辑,可视化和人的内部计算器会崩溃。 接下来提供遍历示例的集合,这些示例解决了先前讨论的领域中的典型问题。

确定循环依赖

随着开源软件的增长以及将模块轻松集成到项目中的便利, 循环依赖项比比皆是,并可能导致软件工程中的问题。 当项目A依赖项目B,并且通过某种依赖路径,项目B依赖项目A时,就会发生循环依赖。 当以图形方式表示依存关系时,遍历可以轻松识别出这种圆形度(例如,在下图中, A-> B-> D-> G-> A是一个循环 )。

循环依赖

排名讨论贡献者

邮件列表由具有不同参与和能力水平的个人组成。 当邮件列表专注于通过讨论进行学习时,仅编写消息并不一定表示积极贡献。 如果产生了作者的消息答复,则可以解释为该作者正在贡献值得讨论的材料。 但是,如果作者的消息结束了对话,那么他们可能正在贡献非演讲者或无法使讨论蓬勃发展的信息。 在关联的图中,米色顶点是作者,而它们各自的编号是唯一的作者ID。

讨论贡献


讨论贡献等级 在邮件列表上对贡献者进行排名的一种方法是计算他们已发布的邮件数(作者对邮件列表中邮件的出奇程度 )。 但是,如果排名必须考虑到卓有成效的贡献,则可以根据其消息产生的讨论深度(作者消息的树深度)对作者进行排名。 最后,请注意,可以包含其他技术,例如情感和概念分析,以了解消息的含义和含义。

寻找相关概念

相关概念 斯蒂芬对图形的理解是在研究TinkerPop的图形技术堆栈时发展起来的。 如今,他对学习更多有关图的理论方面感兴趣。 通过网络浏览器,他访问了Wikipedia 图形页面。 Stephen以手动方式单击链接并阅读文章-深度优先,图形遍历,邻接表等。他意识到页面相互引用,并且由于Wikipedia的链接结构,一些概念与其他概念更相关。 可以使用图形遍历自动执行步行链接的手动过程。 遍历可以单击图形顶点而不是单击,而不是单击,可以向外发散,并报告最感动了哪些概念。 流动最多的概念是具有许多关系(即路径)的图形概念 (请参阅先验算法 )。 通过这种遍历,可以为Stephen提供图形相关概念的排名列表。 这种遍历类似于波在水体上扩散-尽管现实世界中的图形拓扑很少像二维平面那样简单(请参见晶格 )。

多域遍历

先前讨论的不同图形模型(即软件,讨论和概念)通过共享顶点被集成到单个世界模型中。 类似地,可以构成上述图遍历以产生对跨域问题的解决方案。 例如:

“向我推荐参与的项目,这些项目应保持适当的依赖关系结构,并请有贡献的参与者来促进空间发展,并且在概念上与我以前研究过的技术有关。”

当异构的物联网链接在一起并在其中有效移动时,这种类型的问题解决才有可能。 链接和移动的方法分别是图形和遍历。 总结本节,提供了其他有用的遍历示例。

“基于项目的数量和其依赖项的数量,以递归方式计算项目的'稳定性等级',以此类推。”

“根据项目之间的共享(或类似)概念进行集群项目。”

“建议一个开发人员团队开发一个即将使用X依赖项并且与Y概念相关的项目。”

“按每期提交者所贡献的项目数量来排名。”

图计算技术

计算的实践是在两个纠缠的量(空间和时间)之间划上一条细线。 在图计算领域,存在相同的权衡。 本节将讨论各种图形技术,以识别每种选择所获得和牺牲的内容。 此外,提出了一些示例技术。 注意,存在更多的技术,并且所提到的示例绝不是穷举性的。

内存中图形工具包

在记忆中 内存中图形工具包是面向图形分析和可视化的单用户系统。 它们通常提供图论和网络科学文献中定义的众多图算法的实现(请参阅Wikipedia的图算法列表)。 这些工具的局限性在于它们只能对可以存储在本地主存储器中的图形进行操作。 尽管这可能很大(数以百万计的边缘),但这并不总是足够的。 如果源图数据集太大而无法放入主存储器中,则通常使用此类内存中图工具包将子集隔离并进行处理。

示例 : JUNG , NetworkX , iGraph ,Fulgora(即将推出)

  • [+]丰富的图算法库
  • [+]丰富的图形可视化库
  • [+]不同空间/时间折衷的不同内存表示形式
  • [-]限于可以容纳到主内存中的图形
  • [-]交互通常非常繁琐

实时图形数据库

数据库

图形数据库也许是图形计算技术最流行的化身。 它们提供事务语义,例如ACID(本地数据库的典型值)和最终的一致性(分布式数据库的典型值)。 与内存中图形工具包不同,图形数据库利用磁盘来保留图形。 在合理的机器上,本地图数据库可以支持数十亿条边,而分布式系统则可以处理数千亿条边。 在如此规模的情况下,在多用户并发的情况下(随机访问磁盘和内存正在发挥作用),全局图算法是不可行的。 可行的是局部图算法/遍历。 而不是遍历整个图形,而是将某些顶点集用作遍历的源(或根)。

示例 : Neo4j , OrientDB , InfiniteGraph , DEX , Titan

  • [+]针对本地邻域分析(“以自我为中心”的遍历)进行了优化
  • [+]经过优化,可处理大量并发用户
  • [+]交互是通过面向图的查询/遍历语言进行的
  • [-]由于随机磁盘交互,全局图分析效率低下
  • [-]由于数据库功能(例如事务语义)而导致的大量计算开销

批处理图框架

批量

批处理图框架利用计算集群。 该领域中大多数流行的框架都将Hadoop用于存储(HDFS)和处理(MapReduce)。 这些系统面向全球分析。 也就是说,涉及整个图数据集的计算,在许多情况下,涉及遍及整个图多次的计算(迭代算法)。 此类分析不能实时运行。 但是,由于它们执行数据的全局扫描,因此可以利用从磁盘的顺序读取(请参阅《大数据病理学》 )。 最终,像内存系统一样,它们面向数据科学家,或者在生产环境中用于将结果反馈到实时图形数据库中。

示例 : Hama , Giraph , GraphLab , Faunus

  • [+]针对全局图分析进行了优化
  • [+]跨机器集群表示的流程图
  • [+]利用对磁盘的顺序访问来缩短读取时间
  • [-]不支持多个并发用户
  • [-]不是实时图形计算系统

本节介绍了不同的图形计算解决方案。 重要的是要注意,还存在诸如Convey的MX系列和Cray的YARC图形引擎之类的硬件解决方案。 讨论的每种技术都有一个重要的主题-它们专注于处理图形数据。 每个类别的权衡取决于现代硬件/软件以及理论计算机科学提出的限制。

结论

对于熟练的人来说,图计算不仅是一套技术,而且是一种根据图来思考世界以及根据遍历来思考世界的方法。 随着数据变得越来越可访问,建立更丰富的环境模型变得更加容易。 越来越困难的是以一种可以被不同的计算系统方便而有效地处理的形式存储数据。 在许多情况下,图是建模的自然基础。 当模型是图形时,可以将多种图形计算技术应用于该模型。

致谢

O'Reilly的Mike Loukides非常友好 ,可以审阅本文的多个版本,这样做可以使本文变得更好。

翻译自: https://www.javacodegeeks.com/2014/06/on-graph-computing.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/363612.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html 拼接onmouseout,HTML onmouseout事件用法及代码示例

将鼠标指针移出元素或其子元素时,将发生HTML DOM onmouseout事件。用法:在HTML中:在JavaScript中:object.onmouseout function(){myScript};在JavaScript中,使用addEventListener()方法:object.addEventListener(&quo…

7 selenium 模块

selenium 模块 一.简介 1.Python的一个第三方库,对外提供的接口可以操作浏览器,然后让浏览器完成自动化的操作。 2.自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题 selenium本质是通过驱动浏览器,完全…

针对新手的Java EE7和Maven项目-第3部分-定义ejb服务和jpa实体模块

从前面的部分恢复 第1部分 第2部分 我们在第三部分继续介绍,我们已经有一个父pom,并且已经为我们的war模块定义了pom。 在我们的原始设置中,我们定义了我们的应用程序将包含一个ejb jar形式的服务jar。 这是我们的Enterprise Java Bean&…

计算机本地网络如何共享,本地网络共享怎么实现

本地网络共享可以满足多台电脑同时联网,台式电脑实现网络共享可以使用路由器,笔记本电脑事项网络共享需要使用无线路由器或者无线网卡。那么本地网络共享又是如何实现的呢,下面为大家详细介绍一下。通过路由器实现本地网络共享:第…

Git初始化配置以及配置github

1,配置用户名和邮箱(这里是我github中配置的用户名和邮箱),执行下面命令后,在C:\Users\yaosq盘下会出现一个全局文件.gitconfig. git config --global user.name "这里换上你的用户名" git config --global…

数据知识栈

并发不适合胆小者 我们都知道并发编程很难正确实现。 这就是为什么在执行线程任务之后要进行大量的设计和代码审查会议。 您永远不会将并发问题分配给经验不足的开发人员。 仔细分析问题空间,提出设计,并记录和审查解决方案。 这就是通常处理线程相关任…

Spring Boot:快速启动MVC

我打算一年多以前写一篇关于Spring Boot的文章。 最后,我有时间和灵感。 因此,准备10到15分钟的高质量Spring教程。 我将用Gradle和嵌入式Tomcat演示Spring Boot的基础知识。 我使用Intellij IDEA而不是Eclipse,但是对于那些习惯Eclipse的人来…

布里斯托大学计算机科学专业排名,2021年布里斯托大学世界及专业排名 多个领域位居全英前十!...

它既是红砖大学的成员,也是罗素大学集团成员,在这所学校里共培养出了13位诺贝尔奖得主,这所学校就是布里斯托大学,该校的83%的研究成果都达到了世界领先水平,因此,越来越多的学生去布里斯托大学留学&#x…

Spring启动时的Spring社交示例,或者我如何不再担心和喜欢自动配置

对于Spring Boot 1.1.0.RC1,添加了自动配置和Spring Social的启动程序pom,这意味着我不必为pom添加一百个依赖关系,并且将为我处理许多毫无意义的Spring配置。 让我们来看一个例子。 我将实现一个两页的Web应用程序。 一个将显示给定用户的T…

Djang之cookie和session

一 会话跟踪 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应。例如你给10086打个电话,你就是客户端,而10086服务人员就是服务器了。从双方接通电话那一刻起&a…

ASP.NET技巧(收集)

1、有没有办法让JavaScript的注释在客户端不可见呢&#xff1f; 答案很简单&#xff0c;就是&#xff1a;JavaScript注释 服务器端注释&#xff01; 行注释写法&#xff1a; //<%-- 这里写行注释 --%> 块注释写法&#xff1a; /*<%-- 这里写注释语句块&a…

Windows堆栈区别[转]

堆和栈的区别 (转贴) 非本人作也!因非常经典,所以收归旗下,与众人阅之!原作者不祥! 堆和栈的区别一、预备知识—程序的内存分配一个由c/C编译的程序占用的内存分为以下几个部分1、栈区&#xff08;stack&#xff09;— 由编译器自动分配释放 &#xff0c;存放函数的参数值&…

Tomcat启用HTTPS协议配置过程

Article1较为简洁&#xff0c;Article2较为详细&#xff0c;测试可行。 Article1 概念简介 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和调试…

springboot配置idea 热部署

背景&#xff1a; 在开发中&#xff0c;当我们修改代码之后&#xff0c;每次都要重新启动&#xff0c;很是浪费时间&#xff0c;在springboot中就有一种热部署方式&#xff0c;可以实现想要修改不需要每次都重新启动&#xff0c;保存即可生效 用法&#xff1a; 一、maven 添加 …

10分钟看懂Docker和K8S

作者&#xff1a;鲜枣课堂链接&#xff1a;https://www.jianshu.com/p/f1f94c6968f5 2010年&#xff0c;几个搞IT的年轻人&#xff0c;在美国旧金山成立了一家名叫“dotCloud”的公司。 这家公司主要提供基于PaaS的云计算技术服务。具体来说&#xff0c;是和LXC有关的容器技术。…

计算机专业论文关于天气预报的,关于天气预报论文范文写作 天气预报相关论文写作资料...

天气预报,本文是一篇关于天气预报论文范文&#xff0c;可作为相关选题参考,和写作参考文献。天气预报论文参考文献&#xff1a;每天吃过晚饭,严惠语都会准时打开电视,收看黑龙江电视台和云南电视台的天气预报节目.自从女儿考上云南大学,为了能攒够女儿下学期的费用,老公背起行李…

【快报】基于K2 BPM的新一代协同办公门户实践交流会

2014年2月28日&#xff0c;“基于BPM的新一代协同办公门户”用户实践交流活动在深圳金茂JW万豪酒店3楼Meet Room IV举办。本次会议由K2携手微软共同举办&#xff0c;邀请到的参会企业都是K2 的BPM老客户或对BPM新一代协同办公门户非常感兴趣的新朋友&#xff0c;他们有&#xf…

80个让你笑爆肚皮的程序员段子,不好笑算我输!

阅读本文大概需要 12 分钟。 1、折磨 对程序员的一般折磨&#xff1a;离奇的需求&#xff0c;对程序员的超级折磨&#xff1a;改三次需求~~~ 2、开发时间 项目经理说&#xff1a;给你三个人&#xff0c;多久可以完成&#xff1f;程序员&#xff1a;3个月&#xff01;那五个人呢…

腾讯TBS X5 WebView的简单使用

工作中经常涉及H5网页的加载工作&#xff0c;最多使用的就是安卓系统控件WebView&#xff0c;但是当网页内容比较多的时候&#xff0c;需要等待很久才能加载完&#xff0c;加载完后用户才能看到网页中的内容&#xff0c;这样用户需要等很久&#xff0c;体验很差。 那能不能边加…

python 内置标准库socketserver模块的思考

socketserver模块简化了编写网络服务器的任务, 在很大程度上封装了一些操作, 你可以看成是事件驱动型的设计, 这很不错。它定义了两个最基本的类--服务器类 BaseServer, 请求处理类 BaseRequestHandler. BaseServer 基本服务器类封装了基本的一些socket操作, socket原语中对so…