干货 | 百亿节点,毫秒级延迟,携程金融基于nebula的大规模图应用实践

干货 | 百亿节点,毫秒级延迟,基于nebula的大规模图应用实践 这个例子是用一种边进行回溯,实际查询中可能会涉及到 2~3 跳,且存在异构边(打电话是一种边,点外卖又是一种边,下单酒店机票是一种边,都是不同类型的边),而这种异构图的数据都具有回溯特征,因此实际的关系人图回溯查询也会变得复杂。带来的成本是:每写一条边,同时需要更新2个点属性来记录点的关联边情况,而且需要保证幂等(保证重复提交不会叠加属性+1),当插入一条边的时,先去图里面查询边是否存在,不存在才会进行写边以及点属性 +1 的操作。简言之,系统通过多种维度的数据关联不同的用户,这便是关系人图。 阅读详情

作者简介

 

霖雾,携程数据开发工程师,关注图数据库等领域。

背景

2017年9月携程金融成立,在金融和风控业务中,有多种场景需要对图关系网络进行分析和实时查询,传统关系型数据库难以保证此类场景下的关联性能,且实现复杂性高,离线关联耗时过长,因此对图数据库的需求日益增加。携程金融从2020年开始引入大规模图存储和图计算技术,基于nebula构建了千亿级节点的图存储和分析平台,并取得了一些实际应用成果。本文主要分享nebula在携程金融的实践,希望能带给大家一些实践启发。

本文主要从以下几个部分进行分析:

  • 图基础介绍

  • 图平台建设

  • 内部应用案例分析

  • 痛点与优化

  • 总结规划


一、图基础


首先我们来简单介绍下图相关的概念:


1.1 什么是图


在计算机科学中,图就是一些顶点的集合,这些顶点通过一系列边结对(连接)。比如我们用一个图表示社交网络,每一个人就是一个顶点,互相认识的人之间通过边联系。


在图数据库中,我们使用 (起点,边类型,rank,终点) 表示一条边。起点和终点比较好理解,表示一条边两个顶点的出入方向。边类型则是用于区分异构图的不同边,如我关注了你,我向你转账,关注和转账就是两种不同种类的边。而rank是用来区分同起始点同终点的不同边,如A对B的多次转账记录,起点、终点、边类型是完全相同的 ,因此就需要如时间戳作为rank来区分不同的边。


同时,点边均可具有属性,如:A的手机号、银行卡、身份证号、籍贯等信息均可作为A的点属性存在,A对B转账这条边,也可以具有属性,如转账金额,转账地点等边属性。

54e3377baf1fea33159d39a484d3f529.png

1.2 什么时候用图

(信息收集于开源社区、公开技术博客、文章、视频)

1)金融风控:

  • 诈骗电话的特征提取,如不在三步社交邻居圈内,被大量拒接等特征。实时识别拦截。(银行/网警等)

  • 转账实时拦截 (银行/支付宝等)

  • 实时欺诈检测,羊毛党的识别(电商)

  • 黑产群体识别,借贷记录良好用户关联,为用户提供更高额贷款、增加营收

2)股权穿透

影子集团、集团客户多层交叉持股、股权层层嵌套复杂关系的识别(天眼查/企查查)

3)数据血缘

在数据仓库开发过程中, 会因为数据跨表关联产生大量的中间表,使用图可直接根据关系模型表示出数据加工过程和数据流向,以及在依赖任务问题时快速定位上下游。

4)知识图谱

构建行业知识图谱

5)泛安全

ip关系等黑客攻击场景,计算机进程与线程等安全管理

6)社交推荐

  • 好友推荐,行为相似性,咨询传播路径,可能认识的人,大v粉丝共同关注,共同阅读文章等,商品相似性,实现好友商品或者咨询的精准推荐

  • 通过对用户画像、好友关系等,进行用户分群、实现用户群体精准管理

7)代码依赖分析

8)供应链上下游分析

如汽车供应链上下游可涉及上万零件及供应商,分析某些零件成本上涨/供应商单一/库存少等多维度的影响(捷豹)

1.3 谁在研发图,谁在使用图

(信息收集于开源社区、公开技术博客、文章、视频)

目前国内几家大公司都有各自研发的图数据库,主要满足内部应用的需求,大多数都是闭源的,开源的仅有百度的hugegraph。其他比较优秀的开源产品有Google Dgraph, vesoft的nebula 等,其中nebula在国内互联网公司应用非常广泛。结合我们的应用场景,以及外部公开的测试和内部压测,我们最终选择nebula构建金融图平台。

a1c5bf4e6a0808e5ed796145cad7003d.png

二、图平台建设

4f3734a8be45b9bf77a44b5c24184bea.png

2.1. 图平台建设

我们的图平台早期只有1个3节点的nebula集群,随着图应用场景的不断扩充,需要满足实时检索、离线分析、数据同步与校验等功能,最终演化成上述架构图。

1)离线图:主要用于图构建阶段(建模、图算法分析),通过spark-connector同集团的大数据平台打通,此外我们还将Nebula提供的数10种常用图算法进行工具化包装,方便图分析人员在spark集群提交图算法作业。

2)线上图:经过离线图分析确定最终建模后,会通过spark-connector将数据导入线上图。通过对接qmq消息(集团内部的消息框架) 实时更新,对外提供实时检索服务。  同时也会有T+1的hive增量数据通过spark-connector按天写入。

3)全量校验:虽然 Nebula Graph 通过 TOSS 保证了正反边的插入一致性,但仍不支持事务,随着数据持续更新,实时图和离线(hive数据)可能会存在不一致的情况,因此我们需要定期进行全量数据的校验(把图读取到Hive,和Hive表存储的图数据进行比对,找出差异、修复),保证数据的最终一致性。

4)集群规模:为了满足千亿节点的图业务需求,实时集群采用三台独立部署的高性能机器,每台机器64core / 320GB / 12TB SSD ,版本为nebulav2.5,跨机房部署。离线集群64core /320GB /3.6TB SSD * 12  ,测试集群 48core/ 188GB/5T HDD * 4.

2.2. 遇到的问题

在nebula应用过程中,也发现一些问题,期待逐步完善:

1)资源隔离问题,目前nebula没有资源分组隔离功能 ,不同业务会相互影响;如业务图A在导数据,业务图B线上延迟就非常高。

2)版本升级问题:

  • nebula在版本升级过程中需要停止服务,无法实现热更新;对于类似实时风控等对可靠性要求非常高的场景非常不友好。此种情况下如需保证在线升级,就需要配备主备集群,每个集群切量后挨个升级,增加服务复杂性和运维成本。

  • 客户端不兼容,客户端需要跟着服务端一起升级版本。对于已有多个应用使用的nebula集群,想要协调各应用方同时升级客户端是比较困难的。

三、内部应用案例分析

3.1 数据血缘图

数据治理是近年来比较热的一个话题,他是解决数仓无序膨胀的有效手段,其中数据血缘是数据有效治理的重要依据,金融借助nebula构建了数据血缘图,以支撑数据治理的系统建设。

639655f0dda1eb14a2c8e54edd115734.png

064bc737e059b1beabdf95c383de3784.png

数据血缘就是数据产生的链路,记录数据加工的流向,经过了哪些过程和阶段;主要解决 ETL 过程中可能产出几十甚至几百个中间表导致的复杂表关系,借用数据血缘可以清晰地记录数据源头到最终数据的生成过程。

图 a 是数据血缘的关系图,采用库名 + 表名作为图的顶点来保证点的唯一性,点属性则是分开的库名和表名,以便通过库名或者表名进行属性查询。在两张表之间会建立一条边,边的属性主要存放任务的产生运行情况,比如说:任务开始时间,结束时间、用户 ID等等同任务相关的信息。

图 b 是实际查询中的一张关系图,箭头的方向表示了表的加工方向,通过上游或者下游表我们可以快速地找到它的依赖, 清晰明了地显示从上游到下游的每一个链路。

如果要表达复杂的血缘依赖关系图,通过传统的关系型数据库需要复杂的SQL实现(循环嵌套),性能也比较差,而通过图数据库实现,则可直接按数据依赖关系存储,读取也快于传统DB,非常简洁。目前,数据血缘也是金融BU在图数据库上的一个经典应用。

3.2 风控关系人图

关系人图常用于欺诈识别等场景,它是通过 ID、设备、手机标识以及其他介质信息关联不同用户的关系网络。比如说,用户 A 和用户 B 共享一个 WiFi,他们便是局域网下的关系人;用户 C 和用户 D 相互下过单,他们便是下单关系人。简言之,系统通过多种维度的数据关联不同的用户,这便是关系人图。

构建模型时,通常要查询某个时点(比如欺诈事件发生前)的关系图,对当时的图进行模型抽取和特征构建,我们称这个过程为图回溯。随着回溯时间点的不同,返回的图数据也是动态变化的;比如某人上午,下午各自打了一通电话, 需要回溯此人中午时间点时的图关系,只会出现上午的电话记录,具体到图,则每类边都具有此类时间特性,每一次查询都需要对时间进行限制。

对于图回溯场景,最初我们尝试通过HIVE SQL实现,发现对于二阶及以上的图回溯,SQL表达会非常复杂,而且性能不可接受(比如二阶回溯 Hive需要跑数小时,三阶回溯Hive几乎不能实现);因此尝试借助图数据库来实现,把时间作为边rank进行建模,再根据边关系进行筛选来实现回溯。这种回溯方式更直观、简洁,使用简单的API即可完成,在性能上相比Hive也有1个数量级以上的提升(二阶回溯,图节点:百亿级,待回溯节点:10万级)。

2fe0f5c78a7e881280479e9954750930.png

下面用一个例子说明:如图(a),点A分别在 t0 、t1、 t2 时刻建立了一条边 ,t0、t1、t2为边rank值,需要返回tx时的的图关系数据,只能返回 t0、 t1 对应的 点 B、C ,因为当回溯到tx时间点时候,t2还没有发生;最终返回的图关系为 t0 和 t1 时候,VertexA ->VertexB 、 VertexA -> VertexC (见图 (c) )。这个例子是用一种边进行回溯,实际查询中可能会涉及到 2~3 跳,且存在异构边(打电话是一种边,点外卖又是一种边,下单酒店机票是一种边,都是不同类型的边),而这种异构图的数据都具有回溯特征,因此实际的关系人图回溯查询也会变得复杂。

3.3 实时反欺诈图

7096abd8480b488e16b9381dbcc1a6e8.png

用户下单时,会进入一个快速风控的阶段:通过基于关系型数据库和图数据库的规则进行模型特征计算,来判断这个用户是不是风险用户,要不要对该用户进行下单拦截(实时反欺诈)。

我们可以根据图关系配合模型规则,用来挖掘欺诈团伙。比如说,已知某个 uid 是犯欺团伙的一员,根据图关联来判断跟他关系紧密的用户是不是存在欺诈行为。为了避免影响正常用户的下单流程,风控阶段需要快速响应,因此对图查询的性能要求非常高(P95 <15ms)。我们基于nebula构建了百亿级的反欺诈图,在查询性能的优化方面进行了较多思考。

dd5790e2c9f1836930c3524a4d5a4ed5.png

此图 Schema 为脱敏过后的部分图模型,当中隐藏很多建模信息。这里简单讲解下部分的查询流程和关联信息。

如上图为一次图查询流程,每一次图查询由多个起始点如用户uid、用户mobile等用户信息同时开始,每条线为一次关联查询,因此一次图查询由几十次点边查询组成,由起始点经过一跳查询和2跳查询,最终将结果集返回给风控引擎。

系统会将用户的信息,转化为该用户的标签。在图查询的时候,根据这些标签,如 uid、mobile 进行独立查询。举个例子,根据某个 uid 进行一跳查询,查询出它关联的 5 个手机号。再根据这 5 个手机号进行独立的 2 跳查询,可能会出来 25 个 uid,查询会存在数据膨胀的情况。因此,系统会做一个查询限制。去查看这 5 个手机号关联的 uid 是不是超过了系统设定的热点值。如果说通过 mobile 查询出来关联的手机号、uid 过多的话,系统就会判断其为热点数据,不进行边结果返回。(二阶/三阶回溯,图点边:百亿级)。

四、痛点及优化

在上述应用场景中,对于风控关系人图和反欺诈图,由于图规模比较大(百亿点边),查询较多,且对时延要求较高,遇到了一些典型问题,接下来简单介绍一下。

4.1 查询性能问题

为了满足实时场景2跳查询p95 15ms需求,我们针对图schema和连接池以及查询端做了一些优化:

4.1.1 牺牲写性能换取读性能

35a7bf4548fcf351ecf62bc18968e3cf.png

首先,我们来看看这样的一个需求: 查询id关联的手机号 ,需要满足对于这个手机号关联边不超过3个。这里解释下为什么要限制关联边数量, 因为我们正常个体关联边数量是有限的,会有一个对于大多数人的p95这样的阈值边数量,超过这个阈值就是脏数据。为了这个阈值校验, 就需要对每次查询的结果再多查询一跳。

如图(a)所示,我们需要进行2次查询,第一跳查询是为了查询用户id关联的手机号, 第二跳查询是为了保证我们的结果值是合法的(阈值内),这样每跳查询最终需要进行2跳查询来满足。如图给出了图查询的gsql 2步伪码,这种情况下无法满足我们的高时效性。如何优化呢?看下图(b) :

be8be7bf0f631fd099b4703b9f1a811d.png

我们可以将热点查询固定在点属性上,这样一跳查询时就可以知道该点有多少关联边, 避免进行图 a 中(2)语句验证。还是以图 (a)为例,从一个用户 ID 开始查询,查询他的手机号关联,此时因为手机号关联的边已经变成了点属性(修改了 schema),图(a) 2 条查询语句实现的功能就可以变成一条查询 go from $id over $edgeName where $手机号.用户id边数据 <5 | limit 5。

这种设计的好处就是,在读的时候可以加速验证过程, 节约了一跳查询。带来的成本是:每写一条边,同时需要更新2个点属性来记录点的关联边情况,而且需要保证幂等(保证重复提交不会叠加属性+1),当插入一条边的时,先去图里面查询边是否存在,不存在才会进行写边以及点属性 +1 的操作。也就是我们牺牲了写性能,来换取读性能,并通过定期check保证数据一致。

4.1.2 池化连接降低时延

第二个优化手段是通过池化连接降低时延。Nebula 官方连接池每次进行查询均需要进行建立初始化连接-执行查询任务-关闭连接。而在高频(QPS 会达到几千)的查询场景中,频繁的创建、关闭连接非常影响系统的性能和稳定性。且建立连接过程耗时平均需要6ms, 比实际查询时长1.5ms左右高出几倍,这是不可接受的。因此我们对官方客户端进行了二次封装,实现连接的复用和共享。最后将查询p95从 20ms 降低到了 4ms。通过合理控制并发,我们最终将 2跳查询性能控制在p95 15ms 。

这里贴下代码供参考:

public class SessionPool {
 
    /**
     * 创建连接池
     *
     * @param maxCountSession 默认创建连接数
     * @param minCountSession 最大创建连接数
     * @param hostAndPort     机器端口列表
     * @param userName        用户名
     * @param passWord        密码
     * @throws UnknownHostException
     * @throws NotValidConnectionException
     * @throws IOErrorException
     * @throws AuthFailedException
     */
    public SessionPool(int maxCountSession, int minCountSession, String hostAndPort, String userName, String passWord) throws UnknownHostException, NotValidConnectionException, IOErrorException, AuthFailedException {
        this.minCountSession = minCountSession;
        this.maxCountSession = maxCountSession;
        this.userName = userName;
        this.passWord = passWord;
        this.queue = new LinkedBlockingQueue<>(minCountSession);
        this.pool = this.initGraphClient(hostAndPort, maxCountSession, minCountSession);
        initSession();
    }
 
    public Session borrow() {
        Session se = queue.poll();
        if (se != null) {
            return se;
        }
        try {
            return this.pool.getSession(userName, passWord, true);
        } catch (Exception e) {
            log.error("execute borrow session fail, detail: ", e);
            throw new RuntimeException(e);
        }
    }
 
    public void release(Session se) {
        if (se != null) {
            boolean success = queue.offer(se);
            if (!success) {
                se.release();
            }
        }
    }
 
    public void close() {
        this.pool.close();
    }
 
    private void initSession() throws NotValidConnectionException, IOErrorException, AuthFailedException {
        for (int i = 0; i < minCountSession; i++) {
            queue.offer(this.pool.getSession(userName, passWord, true));
        }
    }
 
    private NebulaPool initGraphClient(String hostAndPort, int maxConnSize, int minCount) throws UnknownHostException {
        List<HostAddress> hostAndPorts = getGraphHostPort(hostAndPort);
        NebulaPool pool = new NebulaPool();
        NebulaPoolConfig nebulaPoolConfig = new NebulaPoolConfig();
        nebulaPoolConfig = nebulaPoolConfig.setMaxConnSize(maxConnSize);
        nebulaPoolConfig = nebulaPoolConfig.setMinConnSize(minCount);
        nebulaPoolConfig = nebulaPoolConfig.setIdleTime(1000 * 600);
        pool.init(hostAndPorts, nebulaPoolConfig);
        return pool;
    }
 
    private List<HostAddress> getGraphHostPort(String hostAndPort) {
        String[] split = hostAndPort.split(",");
        return Arrays.stream(split).map(item -> {
            String[] splitList = item.split(":");
            return new HostAddress(splitList[0], Integer.parseInt(splitList[1]));
        }).collect(Collectors.toList());
    }
 
    private Queue<Session> queue;
 
    private String userName;
 
    private String passWord;
 
    private int minCountSession;
 
    private int maxCountSession;
 
    private NebulaPool pool;
 
}

4.1.3 查询端优化

对于查询端,像3.3中的例图,每一次图查询由多个起始点开始,可拆解为几十次点边查询,需要让每一层的查询尽可能地并发进行,降低最终时延。我们可以先对 1 跳查询并发(约十几次查询),再对结果进行分类合并,进行第二轮的迭代并发查询(十几到几十次查询),通过合理地控制并发,可将一次组合图查询的 P95 控制在 15 ms 以内。

4.2 边热点问题

在图查询过程中,存在部分用户id 关联过多信息,如黄牛用户关联过多信息,这部分异常用户会在每一次查询时被过滤掉,不会继续参与下一次查询,避免结果膨胀。而判断是否为异常用户,则依赖于数据本身设定的阈值,异常数据不会流入下一阶段对模型计算造成干扰。

4.3 一致性问题

Nebula Graph 本身是没有事务的,对于上文写边以及点属性 +1 的操作,如何保证这些操作的一致性,上文提到过,我们会定期对全量HIVE表数据和图数据库进行check,以 HIVE 数据为准对线上图进行修正,来实现最终一致性。目前来说,图数据库和 HIVE 表不一致的情况还是比较少的。

五、总结与展望

基于nebula的图业务应用,完成了对数据血缘、对关系人网络、反欺诈等场景的支持,并将持续应用在金融更多场景下,助力金融业务。我们将持续跟进社区,结合自身应用场景推进图平台建设 ;同时也期待社区版能提供热升级、资源隔离、更丰富易用的算法包、更强大的studio 等功能。

【推荐阅读】

d4a0a76a883fe4e8c30360e2970f0919.png

 “携程技术”公众号

  分享,交流,成长

一文读懂知识图谱:让数据 “牵线搭桥” 的神器 在信息爆炸的时代,我们每天都被海量的数据所包围。从社交媒体上的动态、新闻报道到科研文献,数据的规模和复杂度呈指数级增长。然而,这些数据大多是零散、无序的,如何从这些纷繁复杂的数据中提取有价值的信息,构建起对世界的全面认知,成为了一个亟待解决的问题。知识图谱应运而生,它作为一种强大的知识表示和管理工具,为我们提供了一种有效的方式来整合、组织和理解数据,揭示数据背后的关联和规律。 阅读详情

相关推荐

计算机视觉——多视图几何

多视图几何1.前言1.1 多视图几何概念2. 基本原理2.1 对极几何2.2 基础矩阵2.2.1 基础矩阵推导2.2.2 求解基础矩阵3. 实验过程3.1 实验数据准备3.2 实验代码3.3 实验结果及分析4. 实验中遇到的问题 1.前言 1.1 多视图几何概念 多视图几何是利用在不同视点所拍摄图像间的关系,来研究照相机之间或者特征之间关系的一门科学。 多视图几何(Multiple View ...

RuiMa的博客 7715

GitHub上10个优秀的微服务开源项目

它支持PostgreSQL、MySQL、Cloud SQL等多种数据库,为企业级微服务场景提供了安全可靠的数据访问层,避免了在每个服务中硬编码SQL语句。在微服务架构中,你可以用Keycloak作为统一的认证中心,所有服务都通过它来验证用户身份,避免了每个服务自己实现认证逻辑的尴尬。2025年它依然是企业级微服务集成的重要选择,特别是需要对接多个遗留系统或者外部API的场景。2025年,几乎所有主流的微服务框架都原生支持OpenTelemetry,让你能够清晰地看到请求在微服务间的完整调用链。

2509_93941399的博客 1650

电磁波成像技术全解析:从γ射线到无线电波的应用实践

本文全面解析电磁波成像技术,从γ射线到无线电波的应用实践。详细介绍了不同波长电磁波的特性与实用场景,包括医疗影像、工业检测、安防监控等领域。特别探讨了X射线、红外热成像、毫米波雷达等前沿技术的实战应用,为读者提供技术选型指南和操作技巧。

weixin_29305337的博客 293

GitHub 热榜项目 - 日榜(2025-09-27)。

本次分析聚焦2025年9月27日GitHub日榜热门项目,筛选出技术领域具有代表性的三个项目,涵盖AI工具链、分布式计算框架和前端低代码平台。以下为详细技术解读与代码示例。技术栈:Python 3.12 + gRPC + Kubernetes 核心功能:支持多模态模型(文本/图像/音频)的分布式推理流水线编排,内置负载均衡与自动扩缩容机制。典型应用场景:代码示例 - 定义推理流水线: 性能优化技巧:突破性特性:本次分析聚焦2025年9月27日GitHub日榜热门项目,筛选出技术领域具有代表性的三个项目,涵盖

vZH_xwvb的博客 455

别再死记硬背了!用MaxDEA软件实操SBM、DDF、NDDF模型,手把手教你测算绿色全要素生产率

本文深度解析如何使用MaxDEA软件实操SBM、DDF、NDDF模型,手把手教你测算绿色全要素生产率(GTFP)。通过详细的模型选择对比、数据准备策略和MaxDEA操作流程,帮助研究者科学构建指标体系并准确解读结果,提升环境管理研究的实证分析能力。

weixin_28731231的博客 314

国产大模型编程能力深度分析报告(2026年5月更新版)

2026年5月国产大模型编程能力报告显示,主流模型迎来重大升级。DeepSeek V4以1.6T参数创性能新高,Qwen3.6-Plus支持原生多模态编程,MiniMax M2.7转向闭源并优化Agent编码,Kimi K2.6成为商业化成熟的主力模型,GLM-5开源并涨价30%。阿里云百炼推出双轨订阅体系,区分团队和个人开发者需求。各模型在参数规模、上下文长度、性能表现和适用场景上各具优势,国产AI编程服务正加速向订阅制转型,成本效益显著提升。

Willin Wang 的全栈升级指南 1648

全局变量引起的并发问题【高并发、多线程】—— ThreadLocal

全局变量引起的并发问题【高并发、多线程】 背景 最近采用RabbitMQ做核心系统 团车 缴费解耦功能,消费端应用采用了SpringBoot2.1+Redis+RabbitMQ+jdbctemplate+Oaracle架构。 此消费端应用以前 单车 缴费时未出现任何问题,从监听—>日志输出—>业务逻辑处理等一切正常。 线上业务高峰期时也没有任何问题。 当时团车缴费功能启用时,多个20...

AI全栈 和 IT 编程相关分享 3601

DP接口详解:从主链路到AUX通道的完整解析(附常见问题排查)

本文深入解析DP接口的三大核心子系统:主链路的高速数据传输、AUX通道的智能协商以及HPD信号线的即时响应。详细介绍了DP接口的物理层设计要点、链路训练与均衡技术,并提供了常见故障排查指南,帮助工程师解决实际应用中的技术难题。

weixin_30790841的博客 462

图数据库nebula——搭建linux分布式集群

目录 1、集群架构: 2、服务器: 3、下载rpm软件包: 4、修改服务器打开最大文件数: 5、安装nebula: (1)上传rpm软件包: (2)执行rpm软件包: 6、修改meta服务配置: (1)配置文件使用方式: (2)修改配置文件参数: ① 增加参数local_config: ② 修改参数meta_server_addrs: ③ 修改参数local_ip: ④ 修改参数data_path: ⑤ 修改参数log_dir: ⑥ 默认参数ws_ip: ⑦ 默认参数por

LSY_优快云_的博客 3054

工业相机——靶面尺寸、像元尺寸、分辨率 、传感器尺寸

由Sensor对角线长度表示,单位英寸,这里的1英寸=16mm。——靶面尺寸为宽12.7mm*高9.6mm,对角线16mm。——靶面尺寸为宽8.8mm*高6.6mm,对角线11mm。——靶面尺寸为宽7.2mm*高5.4mm,对角线9mm。——靶面尺寸为宽6.4mm*高4.8mm,对角线8mm。——靶面尺寸为宽4.8mm*高3.6mm,对角线6mm。——靶面尺寸为宽3.2mm*高2.4mm,对角线4mm。——靶面尺寸为宽14*高10.5mm,对角线17mm。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 9607

全新DEIM有效涨点改进目录 | 本专栏持续更新500+篇内容 | 包含各种顶会顶刊卷积、注意力、特征融合模块、有效特征聚合提取模块,上采样模块、下采样模块,二次创新模块、独家创新等几百种创新点改进

🚀【CVPR2025DEIM改进专栏速览】🔥 专栏提供500+篇目标检测创新改进方案,涵盖卷积/注意力/特征融合等创新改进点,均源自顶会论文及实战经验。支持多领域应用(工业/医疗/遥感等),配套完整教程和答疑服务。亮点包括: 1️⃣ 持续更新SOTA模型改进方案 2️⃣ 小白友好型实验操作指南 3️⃣ 跨学科科研支持(已助非计算机专业发表论文) 4️⃣ 提供虚拟环境配置方案。 订阅可获完整项目代码及交流群服务,适合研究生科研论文改进需求。价格呈上涨趋势,早订更优惠!

Ai缝合怪、助力小伙伴高效发论文 2045

Nebula3学习笔记(5): IO系统

  IO子系统Nebula3的IO系统相对于Nebula1和2是一个巨大的进步, 新系统的主要设计目标有: 使用更标准的机制, 如用URI来定位资源, 用MIME类型来区分数据格式 一个灵活的流模型, 它不关心数据是来自文件, 内存, HTTP连接还是其它地方 从流读写不数据的数据类型也更方便, 例如要读取的XML格式数据来自文件/内存/网络都没问

逍遥剑客 2782

【打卡帖】7日玩转ESP32——(第4日) 串口的输入输出

【福利帖】7日玩转ESP32——(第4日) 串口的输入输出

1377

详细设计 存储分配_基于 NVMe SSD 的分布式文件存储 UFS 性能提升技术解析

分布式技术的发展,深刻地改变了我们编程的模式和思考软件的模式。值 2019 岁末,PingCAP 联合 InfoQ 共同策划出品“分布式系统前沿技术 ”专题, 邀请众多技术团队共同参与,一起探索这个古老领域的新生机。本文出自 UCloud 后台研发工程师邓瑾。为了应对 IO 性能要求很高的数据分析、AI 训练、高性能站点等场景,UFS 团队又推出了一款基于 NVMe SSD 介质的性能型 UFS,...

weixin_39815410的博客 532

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

NebulaGraph学习笔记-自定义池连接

【代码】NebulaGraph学习笔记-自定义池连接。

PURSUE ONE PIECE 930

VB摄像头监控

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

【Nebula graph java orm 使用心得】

图数据库 nebula graph Java orm

jiwei9877598的博客 1110

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Nebula集群部署:高可用架构设计与故障转移方案

Nebula是一个可扩展的覆盖网络工具,专注于性能、简单性和安全性。在企业级部署中,高可用性(High Availability)和故障转移(Failover)是确保业务连续性的关键要素。本文将深入探讨Nebula集群的高可用架构设计、故障转移机制以及最佳实践部署方案。 ## Nebula核心架构组件 ### Lighthouse(灯塔)节点 Lighthouse是Nebula网络中的核心发现...

gitblog_00349的博客 1098

【Nebula】图数据库Nebula Graph

对于客户端的每个写入请求,Leader 会将该写入以 Raft-wal 的方式,将该条同步给其他 Follower,并只有在“超过半数”副本都成功收到 Raft-wal 后,才会返回客户端该写入成功。对于有内在联系的事务, 关系型数据库通常会提取实体之间的关系, 将关系单独存储到表或列中,而实体的类型和属性存储在其他列甚至其他表中,这使得数据管理费时费力。NebulaGraph中,元数据的存储在Meta服务,而具体数据的存储在Storage服务。path类型的路径遍历时,点和边都不可以重复。

llg___的博客 2626

Nebula 项目常见问题解决方案

Nebula 项目常见问题解决方案 项目基础介绍和主要编程语言 Nebula 是一个用于构建高并发、分布式和弹性消息驱动应用程序的强大框架,主要使用 C++ 语言开发。它旨在为生产环境提供灵活、高性能的分布式网络框架,支持多种应用层通信协议,如 proto3、http、https、http2、grpc、cassandra 和 websocket。Nebula 不仅适用于高性能的 TCP 服务器,还...

gitblog_00605的博客 892

图数据库 Nebula Graph 的数据模型和系统架构设计

Nebula Graph:一个开源的分布式图数据库。作为唯一能够存储万亿个带属性的节点和边的在线图数据库,Nebula Graph 不仅能够在高并发场景下满足毫秒级的低时延查询要求,还能够实现服务高可用且保障数据安全性。 本篇主要介绍 Nebula Graph 的数据模型和系统架构设计。 ...

chengjiazheng5535的博客 738

【图分析】基于Nebula Graph的图平台建设

目录背景设计思路 背景 2019年,基于“图形”(Graph)的存储、分析相关技术被Gartner评为十大数据与分析技术之一。基于Graph实现的存储可以进行高效的建模,进而可以探索与查询具有相互复杂关系的数据。 设计思路 图平台需要促进不同类型数据的融合,并进行分析。所以在分析数据之前,需要先实现数据的融合,这些数据对应真实世界中的各类对象。 为了让不同类型的对象都能进到平台,需要提供一个对象定义的功能。这个功能主要是告诉平台这个对象是什么?例如我在定义一名球员 .........

sword_csdn的博客 1102

Nebula Graph|信息图谱在携程酒店的应用

对于用户的每一次查询,都能根据其意图做到相应的场景和产品的匹配”,是携程酒店技术团队的目标,但实现这个目标他们遇到了三大问题…本文着重讲述他们是如何构建场景与信息关系,用 Nebula 处理关联关系,从而快速返回场景化定制推荐信息给酒店用户的实践过程。

weixin_44324814的博客 557

04-SpringBoot集成Nebula Graph

SpringBoot集成Nebula 建议模块 在这里给大家推荐一种方式, 每引入一种新的技术,建议新建一个模块, 来适配这种技术,对外提供接口,在调用的地方应用就可以, 不用搞的到处都是, 防止如果后续替换这种技术, 还要到处修改, 这样的话, 只需要增加一个模块, 对外提供一样的接口, 并替换依赖就可以 添加Maven依赖 <dependency> <groupI...

彼岸舞的博客 2224

亿级电商流量,高并发下Redis与MySQL的数据一致性如何保证

至此,亿级电商流量,高并发下Redis与MySQL的数据一致性如何保证的方案,非常圆满了。以上的内容,如果大家能烂熟于心、对答如流、如数家珍,基本上 面试官会被你 震惊到、吸引到。最终,让面试官爱到 “不能自已、口水直流”。offer, 也就来了。在线求赞,加个关注我会非常感激!最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。这是大佬写的,7701页的BAT大佬写的刷题笔记,让我offer拿到手软本文,已收录于,我的技术网站。

程序员江小北 1605

一例万级写入并发,百亿级数据,毫秒级返回架构分享

一例万级写入并发,百亿级数据,毫秒级返回架构分享

qq_41490913的博客 332

实战:上亿数据如何秒查

作者:Java我人生blog.youkuaiyun.com/chenleixing/article/details/44994571最近在忙着优化集团公司的一个报表。优化完成后,报表查询速度有从半小...

Java知音 723
上一篇: 干货 | 携程基于 GraphQL 的前端 BFF 服务开发实践
下一篇: 干货 | 4小时上线一个接口,高效统一的携程酒店数据服务平台实践
携程技术
博客等级 码龄10年 3716粉丝 324原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值