蚂蚁高性能图数据库TuGraph-DB的技术思考与实践

技术解读 | TuGraph图分析引擎技术剖析 借助TuGraph的 C++ 图分析引擎 API ,用户可以对不同数据来源的图数据快速导出一个待处理的复杂子图,然后在该子图上运行诸如BFS、PageRank、LPA、WCC等迭代式图算法,最后根据运行结果做出相应的对策。参数模块作用于分析引擎中的Standalone模式,用于对图的一般信息(如数据来源,算法名称,数据输入、输出路径,顶点个数等)以及根据不同数据来源、不同算法所配置的不同信息参数进行接受和整理,传输给图算法及各个模块,同时将最终结果模块化展示。一般分为预处理、算法过程、结果分析三个阶段。 阅读详情

在近日举行的 DTCC 2022 第十三届中国数据库技术大会-图数据技术与应用创新专场,蚂蚁集团图数据库负责人洪春涛博士分享了蚂蚁高性能图数据库TuGraph-DB的技术思考和实践,以下为演讲内容要点回顾。

图计算的优势

图计算是一种高效的抽象计算方法,可以方便地处理复杂的多维数据。我们将员工和公司之间的关系画成图,这样可以快速查询员工的信息,例如员工的工作情况、与其他员工的关系以及与哪些公司有联系。相比之下,在关系数据库中,我们需要分别建立员工信息表、公司信息表以及员工和公司之间的关系表。这就把整个数据切成了很多张二维表,在实际应用系统中经常能够看到几百上千张表。这样会使得系统变得更加复杂,需要基于多张表去做推断,对人或机器来说都会带来挑战。

 

对比来看什么是简单查询和复杂查询:

图中表格的前两行属于比较简单的查询,比如某个员工的工龄,直接找到对应的那一行然后取出来就可以;比如找出所有的雇员数大于5的公司,可能在雇佣关系表中就能找出来,在关系数据库里这些都属于常规的操作。

但如果查询再复杂一点,我想知道员工A和员工C之间有什么关系,不一定是一跳的关系,可能包含在同一家公司工作,也可能包含参与了同一个项目,甚至还包含他们有一个共同好友,这些关系就是多种多样的,想用SQL列举所有可能的关系其实就没有那么容易了。如果确定知道这里可能有几种关系,还能靠SQL穷举出来,但随着表越来越多,里面的关系可能有几百上千的时候,再想去穷举就非常难了。

最后还有一种更复杂的查询,比如想找员工A和员工E的所有关系,可能包括A认识B,B认识C,C认识E,相当于在做一个不定长跳数的查询,在SQL里面就非常难写了,相信绝大多数人都难以写出这种查询。

业界有句话,所谓的关系数据库实际上并不擅长处理关系。例如,员工A和E之间的所有关系实际上就是我们要查询的关系,但在关系数据库中处理这种关系查询实际上是不够友好的。这是图数据库的优势所在,它们更擅长处理复杂的关系数据。我们发现,大部分浅显的数据信息都可以比较容易地挖掘出来,但要想更深入地利用数据产生更多的价值,就必须挖掘更深层次的信息,这时就一定会遇到这些复杂的关系,这也是为什么图数据库越来越受欢迎的原因。

为什么图数据库开始流行

图数据库的概念最早出现在七八十年代初期,但当时为什么人们没有选择使用图数据库,而是选择了关系数据库呢?我认为主要原因是,当时的计算机并不那么强大,使用二维表格形式的关系数据库对计算机来说更友好。我们知道,计算机最擅长的事情就是重复的劳动,重复的任务。如果我们要在一张二维表中找一行数据,我们可以一行一行查找,或者使用二分查找(如果数据是树状有序的)。每一层都是重复的算法在运行,这对计算机来说是一个非常规整的数据,容易处理。但如果把数据抽象成一张图,那么难度就会大很多,对计算机来说会更难处理。

举个例子,一个员工可能与其他人有各种不同的关系,比如朋友关系、雇佣关系、参与项目关系,每种关系的类型都不同,对应的数据也都不同。此外,一个点上的边数也非常不规律,有的人可能只有几个好友,而在微博上,一个普通人可能有两三百个粉丝,而大V账号可能有数百万甚至上亿的粉丝。这样一来,存储数据时,普通人和大V之间的差距就非常大了,对计算机来说,处理这两种数据的差异也会很大。

我们知道,在七八十年代,计算机相对来说很弱,如果那个时候使用图来表示数据,整个处理和查询的难度就会大很多。所以,人们选择使用关系数据表的形式表示数据。事实上,那个时候有人做过图数据库,但并没有流行起来,原因就是性能相对关系数据库来说差得太多了。

 

我们知道,所有的事物,尤其是电脑,一直在不断进步。这包括硬件和软件方面的改进。如今的硬件和几十年前的硬件完全不是一个概念,而现在的软件优化也大不相同。随着这些改进,我们会发现对当前的电脑和计算机系统来说,使用图数据库带来的额外开销可能不是很大的问题。

举个例子,我们会发现,过去人们都使用低级编程语言编写程序,但随着时间的推移,有了高级语言。比如最开始、最原始的电脑可能是用纸袋和机器码写程序,后来有了汇编,再后来有C语言、C++,现在很多人都直接写Python。虽然 Python 程序的执行速度可能较慢,但是写的很快,而用用C++或者汇编去写得写半天,对于编写程序到最终得出结果的整个过程来说,使用 Python 会更方便。

 

计算机编程语言的发展是从低级向高级演变的,数据抽象也是一样。我们认为,未来的数据抽象一定会对人更友好一些,而不是专注于对机器更友好。如图所示,编程语言的发展是从低级语言向高级语言转变的,我们也认为数据抽象层次也会慢慢从低层次表格抽象向高层次图表抽象发展。

图计算在蚂蚁的应用

自2015年开始,蚂蚁实际上投入了大量资源来研究图计算,研究如何在蚂蚁的业务中使用图计算。例如数据血缘应用。在对业务的处理过程中,我们需要较好地追踪这些数据的流转路径,如果修改了一份源数据会对下游数据产生什么影响,会对最终业务产生什么影响。为了更好地追踪,我们使用图数据库来存储数据。

 

另一个比较有趣的应用场景就是程序分析。相信几乎所有互联网公司内部都有大量的程序,因此,我们需要管理这些程序,并在每次提交代码时了解将会对哪些内容产生影响。为此,蚂蚁负责程序分析的团队会分析这里的图数据。例如,定义一个变量A,然后使用变量A,“定义”与“使用”之间就会有一条边,使用关系会存储在图数据库中。目前我们的图中已经有超过200亿条边,这是一个非常大的数据量。我们需要对这些数据进行存储、查询和分析,这是蚂蚁公司内部非常多的图数据场景之一。

举个例子来说明优惠券反套现的场景:满额返券是一种比较常见的促销方式,比如购物满2000元就可以享受100元的优惠。这种情况下,如果正常消费,用户花费2000元,通过返券省下100元。但是有些人会想办法注册假商铺,进行虚假交易,目的是把平台补贴的优惠券套出来。因此当用户去买东西,平台要去付补贴的过程,我们需要去实时检测一下会不会有可疑的资金交易情况。

蚂蚁有很多业务需要研究图计算系统和图数据库等技术来满足需求,因为这些业务需要对大量的点边进行分析,数据量超过了100TB,基本上已经达到了PB级别。我们需要对这些图进行实时查询,吞吐率大约在百万级别。由于需要对用户的付款进行实时判断,所以需要比较低的延迟,大约在20毫秒的级别。如果延迟太长,会导致用户体验很差,比如付款需要等待5秒才能完成,这样就会非常麻烦。

图计算系统建设中的问题与挑战

在建立蚂蚁图计算系统的过程中,我们遇到了各种各样的问题。为了解决这些问题,我们与学术界和许多研究界的同事一起合作,并发表了许多相关的学术论文,包括EuroSys等。然而,我们在建立系统的过程中发现,目前的图计算仍处于较早期的阶段,因此许多标准尚未成形。这对我们来说是一个棘手的问题。例如,在关系型数据库中,查询语言基本上就是SQL,但在图数据库中,仅查询语言就有许多种,包括Gremlin、G-SQL等等。这导致了市场的碎片化,人们学习和使用的成本也很高。

在建立图计算系统的过程中,我们也遇到了许多挑战。为了分担较大的通信量,需要将图数据分布到多台机器上,但这会导致边的信息在不同机器之间传递,造成大量的通信。此外,单次查询所涉及的数据量也比较大,例如五跳查询涉及的点数就已达到10的五次方,图中还存在一些非常大的点。同时,用户对图计算系统的需求也十分多样,既有快速查询的需求,也有对复杂算法(如社区发现)的需求,单一系统很难满足这些不同的需求。

 

TuGraph技术优势

蚂蚁自己开发了一套图计算系统TuGraph,既能解决图数据的存储问题,也能解决流式计算、离线计算和图学习的问题。目前,超过100个业务线和300多个场景都在使用这套系统。这套系统在2021年获得了世界互联网大会领先科技成果奖。

在TuGraph中,性能是一个重要的因素,因为图数据集的体积很大,如果性能不佳就会浪费机器资源,导致许多情况下无法完成任务。比如,希望业务的查询能在几十毫秒内返回结果,但是如果做的性能不好,几秒钟才能返回结果,就无法作为在线查询使用。因此,我们是非常对性能是很重视的,其中在 LDBC-SNB 标准测试中(类似于数据库领域性能标准测试TPC-C),TuGraph仍然是世界纪录的保持者。

TuGraph 的整个图存储是建立在完美哈希的基础上的,这是我们与其他图系统的一个重要区别。目前,大多数图系统使用的是基于数的存储,但数的问题在于永远存在一个 LogN 的查找操作。然而,在图中可以看到,不同的顶点之间实际上是无序的,不需要有顺序,所以顶点这个级别实际上是基于哈希的,理论上,顶点的读取是最优的。

此外,TuGraph 还参与了许多标准的定制,整个系统在尽量往标准化的方向去做。

 

除了为内部提供服务,我们还向外提供服务,主要是因为,作为一个系统,如果只为有限的客户提供服务,就很容易构建成一个专有系统。我们希望这是一个标准化、开放的系统,所以我们也在对外提供图计算系统的产品和服务。目前,我们也有很多外部客户,包括金融、工业、互联网以及政企领域。

开源开放,共建发展

整个图计算系统目前仍处于较早期的阶段,我们认为还有很多工作要做,包括提升应用性、性能和降低成本。所有的系统都会有这些问题。但是,如果希望普及,我们认为最重要的是有健康的生态,来推动图计算系统的发展,需要有更多的用户和更多的场景使用这个系统。

所有的计算机系统都需要去有一个更开放、更大的生态才能促进发展。蚂蚁有一句话叫做“成熟一个、开放一个”,一个系统成熟以后,我们就会试着开放出去,让更多的人去用。今年9月,我们已经在GitHub上开源了TuGraph中的单机版图数据库,以及一个离线图分析引擎TuGraph Compute。分布式图数据库和流式图计算现在已经包含在我们的商业化版本中,包括一站式图研发平台。我们计划在未来迭代更多更丰富的系统功能,希望能做得更好。

 

TuGraph开源版特色

为什么要去开源单机版而不是分布式版本?主要是考虑到它的部署和使用成本比分布式版本要低得多,同时功能也很完整、独立。我们希望这样可以让许多刚开始使用图数据库或有使用图数据库解决问题的想法的人,可以先尝试用我们的单机版图数据库。因为它的部署非常简单,如果跑起来没有问题,那么再考虑是否需要分布式版本。如果确实需要,我们可以再跟进这个问题。

我们的单机版图数据库已经能够支持TB级别的数据,我们内部也有很多情况使用单机版图数据库。在单台机器上,我们最大的数据量也达到了2TB多,在线上运行,能够处理百亿级别的点边。事实上,大多数用户使用单机版图数据库都是足够的。由于单机版的图数据库很容易优化,我们对它进行了极致的优化,因此单机版图数据库在性能上可以满足绝大多数场景的需求。此外,它的系统特性也很全面,包括高可用性、多图支持、权限管理、日志记录等,它可以被看作是一个成熟、易用的图数据库,类似于MySQL。

 

图中所列出的开源版TuGraph几个特性包括:

  • 单机版图数据库能够处理数据量几个TB的数据,前提是磁盘足够大。

  • 成本很低,因为是单机版,部署和运维都很容易。

  • 性能很好,我们对其进行了大量优化。TuGraph的LDBC-SNB测试目前是世界第一,大家可以在GitHub上获取测试SNB的条款并进行测试。

  • 单机版图数据库是一个非常易用的完整系统,我们提供了导入导出工具和查询语言。此外,还提供了底层API,用户可以使用它来编写复杂的程序。

我们的开源版本的目标主要有三点:

首先,我们希望提供一个免费的图数据库产品,能够让更多的人使用图数据库,尝试用它来解决问题。

其次,我们希望促进图数据库标准的成形。目前图数据库的差异太大,每个数据库都有所不同,我们希望通过提供一个参考答案来帮助大家达成趋同。这样大家就可以根据我们提供的设计来判断哪些特征合理,如果觉得合理就可以遵循这个设计,慢慢地大家就会逐渐靠近。假如所有产品在主要特征上保持一致,这样所有人的学习成本就会降低。

最后,基础研究性问题可以不断优化发展,包括存储方面的问题,例如哈希可能是理论上最优的,但是是否还有其他需要调整的东西?目前没有一个很好的研究性平台让大家去进行这些尝试和研究,我们希望提供的开源TuGraph-DB能成为这些研究人员的对比基线,促进研究的发展。

TuGraph企业版特色

除了开源版本,我们也继续提供商业版本。这个版本包含一个分布式图数据库,以及离线计算引擎和流式图计算功能。此外,我们还提供了TuGraph Platform一站式图平台,包括运维、可视化等功能。在这个平台上,用户可以在图数据库中执行流式计算,并在线写回数据库。这种方式通常用于实时查询结果,因为流式计算的时间可能比较长,但用户可以立即查询到较早的结果。这对于在线业务来说非常重要。

商业化产品还提供私有化部署,也可以通过一体机的方式部署硬件,并将很快推出云上部署方案,这样大家就可以在云上体验我们的产品。

 

总结

蚂蚁在图计算方面投入了大量资源,并在众多业务场景中磨练出了一整套在线查询、流式计算、离线分析以及图学习的体系。目前,我们已经在GitHub上开源了单机版(https://github.com/TuGraph-db),同时也提供企业版来满足不同用户需求。

使用GraphInsight打造TuGraph可视化分析应用 图的可视化是分析和理解图数据的一种重要手段。TuGraph 内置了TuGraph Browser,为大多数用户提供了一个简单易用的图可视化界面。由于 TuGraph Browser 不支持自定义界面,因此一些有自定义界面需求的用户只能选择自行搭建新的前端界面。11月22日,蚂蚁集团将开源 GraphInsight(下文简称GI),该工具解决了快速搭建自定义图分析界面的问题。 阅读详情

相关推荐

AI编程助手Cursor如何革新经济学研究:从计量模型到可视化全流程实战

在数据科学和人工智能技术蓬勃发展的今天,如何高效地将前沿AI工具融入专业领域的研究工作流,成为提升科研效率的关键。其核心原理在于通过自然语言交互,将研究者的专业问题转化为机器可执行的指令,从而实现人机协作的范式转移。这一技术的核心价值在于大幅降低非计算机背景研究者的编程门槛,将精力从繁琐的代码实现中解放出来,更聚焦于学科本身的思想与逻辑。尤其在经济学、金融学等高度依赖数据分析和计量建模的领域,AI编程助手能够快速处理数据清洗、模型估计、可视化及结果解释等任务。具体到应用场景,研究者可以利用结构化提示词工程,

weixin_42531579的博客 296

TuGraph-db 开源项目使用教程

TuGraph-db 是一个高性能的图数据库项目,其目录结构如下: ``` tugraph-db/ ├── benchmark/ ├── ci/ ├── cmake/ ├── cpplint/ ├── demo/ ├── deps/ ├── docs/ ├── include/ ├── learn/ ├── procedures/ ├── release/ ├── src/ ├── test/ ...

gitblog_00098的博客 2373

Vivado固化程序与Flash型号添加实战指南

本文详细介绍了Vivado程序固化到Flash芯片的完整流程,包括基础操作、Flash型号添加方法及疑难问题排查。针对Vivado官方支持列表缺失的Flash型号,提供了手动添加配置的详细步骤和参数说明,并分享了高级技巧与安全操作建议,帮助开发者高效完成FPGA程序固化。

weixin_29291573的博客 567

TuGraph安装与简单使用

TuGraph 是蚂蚁集团自主研发的大规模图计算系统,提供图数据库引擎和图分析引擎。其主要特点是大数据量存储和计算,高吞吐率,以及灵活的 API,同时支持高效的在线事务处理(OLTP)和在线分析处理(OLAP)。 LightGraph、GeaGraph 是 TuGraph 的曾用名。

cacique111的博客 1万+

工业级以太网通信实战:用FPGA驱动YT8531 PHY芯片的完整避坑指南

本文是一份针对工业级以太网通信的实战指南,详细讲解了如何使用FPGA驱动YT8531 PHY芯片。内容涵盖从硬件设计(电源、时钟、复位)到MDIO接口驱动开发、PHY配置与链路管理的全流程,并重点剖析了十个常见的开发“陷阱”及其解决方案,旨在帮助工程师在复杂的工业环境中实现稳定可靠的以太网通信连接。

weixin_29191669的博客 147

Buck电路中自举电容串联小电阻的作用

在Buck电路中,自举电容(Cboot)驱动高边MOSFET时,因寄生电感和电容会形成LC谐振回路,导致SW节点高频振铃,引发EMI问题。串联小电阻(Rboot)可引入阻尼效应,抑制振铃、改善波形和EMI性能,但会略微增加开关损耗。设计时建议预留可调电阻位(2Ω~20Ω),根据实测结果平衡效率与系统稳定性,提升电源可靠性。这一措施是优化开关电源EMC的常见实践。

硬核科技 627

技术动态 | 蚂蚁开源图数据库 TuGraph-DB升级到 v4.0,全新支持 GQL 国际标准查询语言...

转载公众号|TuGraph在2022年9月的世界人工智能大会上,蚂蚁自研图数据库TuGraph-DB 正式开源。正值开源一周年之际,迎来了开源TuGraph-DB v4.0版,期间经历了10次重要迭代,重大更新的功能包括云上部署、POG(Procedure On Graph query language)、Python算法接口、图学习引擎、高可用、ISO GQL等,在功能完备性、上手易用性、设...

开放知识图谱 1038

OpenHarmony之Histreamer引擎深度解析:pipeline_core架构如何全面取代GStreamer,一统音视频播放与录制

Histreamer是OpenHarmony多媒体框架的核心媒体引擎,采用架构设计。一个轻量级的媒体引擎组件,提供播放、录制等场景的媒体数据流水线处理。1.播放场景分为如下几个节点:数据源读取、解封装、解码、输出;2.录制场景分为如下几个节点:数据源读取、编码、封装、输出。该引擎从OH5.0开始取代了原有的媒体引擎gstreamer(部分文档还保留较老架构的讲解),提供统一的音视频播放、录制、元数据解析等能力。

m0_67505153的博客 333

TuGraph在国产ARM平台上性能再次打破世界纪录

(预计阅读时间:4分钟) 太长不看版: ...

TuGraph的博客 1241

YOLOv8改进 | Conv篇 | 利用YOLOv9的GELAN模块替换C2f结构(附轻量化版本 + 高效涨点版本 + 结构图)

本文给大家带来的改进机制是利用2024/02/21号最新发布的YOLOv9其中提出的GELAN模块来改进YOLOv8中的C2f,GELAN融合了CSPNet和ELAN机制同时其中利用到了RepConv在获取更多有效特征的同时在推理时专用单分支结构从而不影响推理速度,同时本文的内容提供了两种版本一种是参数量更低涨点效果略微弱一些的版本(参数量V8n下降80w,计算量为6.1GFLOPs),另一种是参数量稍多一些但是效果要不参数量低的效果要好一些(均为我个人整理),提供两种版本是为了适配不同需求的读者,具体选择

Snu77的博客 7567

【LLM数据篇】预训练数据集+指令生成sft数据集

在《Aligning Large Language Models with Human: A Survey》综述中对LLM数据分类为典型的人工标注数据、self-instruct数据集等 优秀的开源sft数据集:alpaca_data、belle、千言数据集、firefly、moss-003-sft-data多轮对话数据集等 文章目录 note 构造指令实例的3种方式 sft:Aligning Large Language Models with Human: A Survey Alpaca 1. self

发现问题,并解决问题,批判性思维 1万+

Statiq Web vs 其他静态生成器:为什么选择.NET生态的它?

在静态网站生成器层出不穷的今天,选择一款适合自己技术栈的工具至关重要。**Statiq Web**作为一款基于.NET构建的灵活静态网站生成器,正在受到越来越多开发者的关注。它不仅继承了.NET生态的稳定性和安全性,还提供了丰富的扩展能力,让静态网站开发变得更加高效。本文将深入对比Statiq Web与其他主流静态生成器,解析为何它能成为.NET开发者的理想选择。 ## 🚀 Statiq We

gitblog_00435的博客 431

如何给K8S配置一个具有永久有效的kubeconfig

在 Amazon EKS 环境中,Kubernetes 的认证机制与 AWS IAM 深度集成,通过aws-iam-authenticator动态生成临时凭证。这种设计虽然增强了安全性,但给需要持久化凭证的工具链(如 CI/CD 系统中的 KubeVela)带来了挑战。具体表现为:临时凭证失效​​:默认 Token 有效期为 15 分钟至 1 小时;​​IAM 角色限制​​:直接使用aws eks get-token生成的凭证无法持久化

小杨同学的博客 660

TugraphDB:探索图数据库新境界

TugraphDB作为一个高性能的图数据库,为图数据的存储、查询和分析提供了强大的支持。然而,随着数据量的增长和查询复杂性的提高,任何图数据库都可能面临性能瓶颈和资源管理的挑战。它提供了丰富的图查询语言和高效的图数据处理能力,支持万亿级别的顶点和边的存储与查询。它类似于SQL,但专门针对图结构进行了扩展,包括对节点、边以及路径的查询,支持用户定义的函数和复杂的图算法,使得复杂的图分析任务变得简单易行。TugraphDB不仅限于存储基本的图结构,还能够处理包含丰富属性的图数据,以及时间序列图等特殊类型的图。

2401_83063795的博客 780

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

win10+docker,安装TuGraph

win10+docker,安装TuGraph

qq_35721299的博客 2127

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

数据库系列:数据库高可用及无损扩容

数据库存储层实现可用性有很多种办法。除了最基本的 主从/主主 + Keepalived 架构 之外,还有 MHA 、 PXC 、MGR/InnoDB Cluster 等,后面我们一一拆解。实现高可用,意味着后续的迁移、扩容、业务调整,都应该是可以平滑的,对业务无感的。

qq13321123的博客 881

TuGraph-db 项目教程

TuGraph-db 项目的目录结构如下: ``` tugraph-db/ ├── benchmark/ ├── ci/ ├── cmake/ ├── cpplint/ ├── demo/ ├── deps/ ├── docs/ ├── include/ ├── learn/ ├── procedures/ ├── release/ ├── src/ ├── test/ ├── toolkits...

gitblog_01026的博客 611

探索TuGraph数据库:高性能图数据存储与处理的新选择

是一个开源的分布式图数据库,旨在提供高可用性、低延迟和大规模数据的高效处理能力。作为一款强大的图数据库解决方案,TuGraph能够满足复杂的数据建模需求,并在实时分析、社交网络、推荐系统等多个领域发挥重要作用。 ## 技术分析 ### 分布式架构 TuGraph采用了分片(Sharding)和副本(Replication)策略,将大型图数据分散到多个节点上,实现了水平扩展性,可以轻松应对PB...

gitblog_00069的博客 919

2024年4月中国数据库排行榜:OceanBase再度登顶,KingBase稳步上升进前五

4月墨天轮中国数据库排行榜解读已发布!本月前十竞争激烈,各家数据库产品你追我赶,OceanBase重返冠军宝座,人大金仓、达梦数据库排名上升,此后更有一批数据库热度提升明显。一起来看更多排名情况与解读!

Era666的博客 5417

TuGraph高性能图数据库完整使用教程:从零开始构建图应用

TuGraph是蚂蚁集团自主研发的高性能图数据库,提供完整的图数据库引擎和图分析引擎,支持高效的在线事务处理(OLTP)和在线分析处理(OLAP)。本教程将带你从安装部署到实际应用,全面掌握这个强大的图数据库工具。 ## 🚀 快速上手:一键安装部署 ### 通过Docker快速体验 使用Docker可以快速启动TuGraph服务,无需复杂的配置步骤: ```shell docker pu

gitblog_00182的博客 765

TuGraph图数据库核心功能深度解析

TuGraph作为一款高性能的图数据库系统,在存储模型、计算引擎和功能特性方面都具有独特的设计理念。本文将全面剖析TuGraph的核心功能架构,帮助开发者深入理解其技术实现原理和应用场景。 ## 部署方案详解 TuGraph提供多样化的部署方式以适应不同环境需求: 1. **云部署**:适合快速上线的云原生场景,支持主流云平台 2. **Docker部署**:容器化方案便于开发和测试环境快速...

gitblog_00986的博客 573

TuGraph图数据库开发指南:从基础操作到数据管理

作为一款高性能的图数据库,TuGraph提供了多种连接方式以满足不同场景下的开发需求。 ### 1.1 驱动连接方式 TuGraph兼容Neo4j的Bolt协议,这意味着开发者可以直接使用现有的Neo4j驱动来连接TuGraph数据库。这种兼容性设计大大降低了开发者的学习成本和使用门槛。 在实际开发中,建议使用参数化查询来构建连接语句,这不仅能提高安全性,还能避免SQL注入风险。各语言驱动都...

gitblog_00590的博客 680

TuGraph图数据库完全指南:从入门到实战

在开始学习TuGraph之前,我们需要先理解什么是图数据库。图数据库是一种专门用于存储和处理图结构数据的数据库系统。与传统的关系型数据库不同,图数据库使用节点、边和属性来表示和存储数据,这使得它在处理复杂关系时具有天然优势。 图数据库的核心概念包括: - **节点(Node)**:表示实体,如人、地点、事物等 - **边(Edge)**:表示节点之间的关系 - **属性(Property)**:...

gitblog_00113的博客 607

TuGraph图数据库终极实战指南:从零开始掌握高性能图计算

TuGraph是一款高性能图数据库,专为处理大规模图数据和复杂图计算任务而设计。在当今数据爆炸的时代,图数据库已经成为社交网络分析、推荐系统、知识图谱等领域的核心技术。TuGraph图数据库通过其独特的分层架构和优化的存储引擎,为开发者和数据科学家提供了强大的图数据处理能力。 ## 🚀 TuGraph图数据库核心架构解析 [![TuGraph图数据库架构图](https://raw.gitc

gitblog_00949的博客 516

【数据库】7种图数据库简单比较

1、 图数据库排名 图数据库排名:https://db-engines.com/en/ranking/graph+dbms 2、 图数据库比较表格 3 、各种图数据库属性 3.1 Neo4j(主流) 历史悠久且长期处于图数据库领域的主力地位,其功能强大,性能也不错,单节点的服务器可承载上亿级的节点和关系。社区版最多支持 320 亿个节点、320 亿个关系和 640 亿个属性。 优点:Neo4j有自己的后端存储,不必如同JanusGraph等一样还要依赖另外的数据库存储。 Neo4j在每个节点中存储了每个

DreamSun的博客 3万+

图数据库的深度应用与性能优化

图数据库作为一种强大的工具,在处理复杂关系数据方面展现出了巨大的优势。通过本文的介绍,读者可以了解到图数据库的高级特性,如图算法的深度应用、性能优化技巧,以及如何与其他技术集成。同时,我们也会讨论了在使用图数据库时需要注意的事项,帮助读者更好地优化图数据库的使用。随着技术的不断发展,图数据库将面临更多的挑战和机遇。性能提升:随着硬件技术的进步和算法的优化,图数据库的性能将进一步提升,能够处理更大规模的图数据。与其他技术的融合:图数据库可能会与人工智能、机器学习、大数据等技术融合,发挥更大的价值。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 952
上一篇: 使用GraphInsight打造TuGraph可视化分析应用
下一篇: 技术解读 I TuGraph查询引擎简析
TuGraph
博客等级 码龄4年 183粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值