新一代分布式高性能图数据库的构建 - 沈游人企业级数据解决方案专家 为建行、工行、交行、招行、上交所、深交所、中国人寿等 70+ 银行证券保险 企业、公安部、上海市公安局、武汉市公安局等 100+ 公安机构,国家电网、 国信通产业集团等电力能源行业提供数据智能产品解决方案及长期服务。 海致专注为政府、金融、能源等客户提供大数据处理、分析、挖掘服务,在互 联网技术基础上,打造专业、易用的企业级大数据实战应用产品及解决方案。 北京中关村总部 KDnuggets 图技术全景图—— Graph Technology Landscape 2020 • 图数据库 • 图数据建模 • 图计算引擎 • 图数据集成 • 可视化分析 • 知识图谱解决方案 • 图查询语言 • 欺诈检测 • 网络安全分析 • 社交网络分析 • BI 工具 • 图分析工具集 • 图咨询服务 Source : Graph Aware 图数据库发展趋势 AtlasGraph Takeaway AtlasGraph 架构概览 存储层 副本管理 CRAQ 图原生存储 索引 LSM-Tree 容灾保障 ( BR ) 元数据层 事务管理 MVOCC 计算层 Cypher AST 优化器 图计算 内存加速引 擎 服务接口 HTTP/RPC Spark 连接器 Python UDF 执行器 索引管理0 码力 | 38 页 | 24.68 MB | 1 年前3
Zadig 面向开发者的云原生 DevOps 平台优 化 、 开 发 者 体 验 增 强 2023 年 面向生态伙伴开放场景 面向开发者提供 IDE 插件 / 自测环境 通用工作流广泛链接生态赋能开发者 企业解决方案和最佳实践内置 发布 AI 增强解决方案 企 业 开 放 性 、 A I 能 力 增 强 产品发展历程 高频极速迭代: Zadig 开源 29 个月共迭代 21 个版本 “ ” 开发者常处于 今天发版、明早升级 优势、使用场景、解决问题域 Zadig 解决问题域 Zadig 云原生开放性:极简、 0 负担接入 Zadig 业务架构 Zadig 系统架构 1 Zadig 行业方案 对比分析 职能 传统 DevOps 方案 ZadigX 云原生 DevOps 方案 降本提效 组织能力提升 业务负责人 研发不透明,规划凭感觉: • 发版时间靠运气 • 团队熬夜冲进度 研发透明化:不同项目清晰可见的效率、质量、进度 复杂性下沉到单一平台 整体人效提升 1-5 倍 解除组织 / 流程 / 系统 孤岛,打造成长型组织 企业收益分析 现存方案 典型代表 方案特点分析 Zadig 方案优势 传统 Jenkins 方案 GitLab + Jenkins + 脚本化 运行效率低,管理维护成本高 方案局限性大,安全性风险高 无法支持敏捷交付模式;手工维护成本 高,阻碍业务交付效率 面向多服务并行部署,安全发布, 00 码力 | 59 页 | 81.43 MB | 1 年前3
Rust分布式账务系统 - 胡宇需求分析 支付处理: ● 转账 ● 冻资 / 解资 ● 账户限额 ● 批处理事务 正确性:无双花或少付 审计监管:交易日志不可篡改,交易历史可回溯 条件事务:根据一定的条件决定事务执行与否 高可用:在部分节点失效的情况下,依旧可以提供正确的 服务 超低延迟:实时交易,超低响应延迟 水平扩展性:利用分布式事务实现钱包集群的的水平扩 展,应对高达 100 万 TPS 的流量 可演化性:业务逻辑与底层 API 解耦,当业务发生改变 时,底层 API 不用改变 分布式账务系统 设计理念 - Rust 是我们可靠的基石 分布式账务系统 存算分离 API 解耦 读写分离 层级账号 Rust ● 事务层与账户层分 离 ● 独立水平扩展 ● CQRS ● Event Sourcing ● 针对读场景,写场 景分别优化 ● 稳定的底层 API ● 灵活的顶层 API ● 树状结构 Raft 共识算法 raft-rs ● 高性能:关键路径无锁单线程 顶层架构 ● Gateway 路由层 ○ 业务 API 到底层 API 的翻 译 ○ 产生转账计划 ● Marker 事务层 ○ 使用业务 id 进行路由 ○ 执行转账计划 ○ 分发账户变动请求 ● Auticuro 账户层 ○ 使用账户 id 进行分区 ○ 执行账户变动请求 ○ 更新账户余额 分布式账务系统0 码力 | 27 页 | 12.60 MB | 1 年前3
谈谈MYSQL那点事Windows) • 访问速度飞快,是所有 访问速度飞快,是所有 MySQL MySQL 文件引擎中速度最快的 文件引擎中速度最快的 • 不支持一些数据库特性,比如 事务、外键约束等 不支持一些数据库特性,比如 事务、外键约束等 • Table level lock Table level lock ,性能稍差,更适合读取多的操作 ,性能稍差,更适合读取多的操作 InnoDB InnoDB Space Table Space 的方式来进行数据存储 的方式来进行数据存储 (ibdata1, ib_logfile0) (ibdata1, ib_logfile0) • 支持 事务、外键约束等数据库特性 支持 事务、外键约束等数据库特性 • Rows level lock , Rows level lock , 读写性能都非常优秀 读写性能都非常优秀 • 能够承载大数据量的存储和访问 系统优化:硬件、架构 服务优化 服务优化 应用优化 应用优化 MySQL MySQL 优化方式 优化方式 影响性能的因素 影响性能的因素 应用程序 应用程序 查询 查询 事务管理 事务管理 数据库设计 数据库设计 数据分布 数据分布 网络 网络 操作系统 操作系统 硬件 硬件 使用好的硬件,更快的硬盘、大内存、多核 使用好的硬件,更快的硬盘、大内存、多核0 码力 | 38 页 | 2.04 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 02 现代 C++ 入门:RAII 内存管理的存在是出于兼容性和性能的考虑。 << 取决于内存的随机值 编译器默认生成的构造函数:无参数( POD 陷阱解决方案) • 不过我们可以手动指定初始化 weight 为 0 。 • 通过 {} 语法指定的初始化值,会在编译器自 动生成的构造函数里执行。 编译器默认生成的构造函数:无参数( POD 陷阱解决方案,续) • 不过我们可以手动指定初始化 weight 为 0 。 • 通过 {} 语法指定的初始化值,不仅会在编译 您必须同时定义或删除拷贝构造函数和拷贝赋值函 数,否则出错。” 解决方案:要么删除 • 最简单的办法是,直接禁止用户拷贝这个 类的对象,在 C++11 中可以用 = delete 表示这个函数被删除,让编译器不要自动 生成一个默认的(会导致指针浅拷贝的) 拷贝构造函数了。 • 这样就可以在编译期提前发现错误: 解决方案:要么定义 • 如果需要允许用户拷贝你的 Vector 类对象 double free )的问题。 解决方案 1 :获取原始指针( C * 这种类型的指针) • 解决这个问题需要分两种情况讨论。 • 第一种是,你的 func() 实际上并不需要 “夺走”资源的占有权( ownership )。比如 刚才这个例子, func() 只是调用了 p 的 某个成员函数而已,并没有接过掌管对象 生命周期的大权。 解决方案 2 : unique_ptr 不能拷贝,但可以移动0 码力 | 96 页 | 16.28 MB | 1 年前3
Zadig 产品使用手册落 地 程 度 最 深 、 使 用 范 围 最 广 ( 近 千 家 企 业 ) 的 云 原 生 D e v O p s 平 台 。 领先企业抢先实践 Zadig Zadig 研发数字化转型方案正成为产业数字化战略的核心环节 Zadig 设计思路:通过「平台工程」解决流程挑战,通过「技术升级」提升组织效能 01 04 02 03 工程化协同:“人、技术、流 程、工具” 四维协同基线,沉 写脚本」或运管类平台为主, Zadig 则是面向开发者视角,中立,云原生一体化价值链平台。 与现存 DevOps 方案对比: 现存方案 典型代表 方案特点分析 Zadig 优势 传统 Jenkins 方案 GitLab + Jenkins + 脚本化 运行效率低,管理维护成本高 方案局限性大,安全性风险高 无法支持敏捷交付模式 支持从需求到发布全流程敏捷交付。尤其面向 多服务并行部署发布,云原生构建环境和运行 CI/CD 工具 搭建流程串接胶水平台 局限性大扩展性差 内部推广难度极高 做完后价值难被证明 通用性、可扩展性、技术先进性强,可以灵活 广泛接入各种技术和业务场景 基于代码管理的 DevOps 方案 Gitee 平台 GitLab 平台 局限性大、全流程安全性低 维护成本高 支持多个服务并行构建部署、产品级发布,可 灵活安全接入多个代码仓及周边工具链 开发 Zadig 核心特性:0 码力 | 52 页 | 22.95 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 04 从汇编角度看编译器优化么手动提取不变量到循环体外。 调用不在另一个文件的函数: SIMD 优化失败 因为编译器看不到那个文件的 other 函数里是什么,哪怕 other 在定义他的文件里是个空函数,他也不敢优化掉。 解决方案:放在同一个文件里 结论:避免在 for 循环体里调用外部函数,把他们移到 同一个文件里,或者放在头文件声明为 static 函数。 将 other 放到 和 func 同一个 .cpp 文件里,这样编译器看得到 我的程序就会变快? 错了,有可能不仅不变快,反而还变慢! SIMD 和缓存行对齐只是性能优 化的一个点,又不是全部。还要考虑结构体变大会导致内存带宽的占用, 对缓存的占用等一系列连锁反应,总之,要根据实际情况选择优化方案。 结构体的内存布局: AOS 与 SOA • AOS ( Array of Struct )单个对象的属性紧挨着存 • xyzxyzxyzxyz • SOA ( Struct of Array 的习惯,但常常不利于性能 SOA :分离存储多个属性 SIMD 矢量化成功! 不符合面向对象编程 (OOP) 的习惯,但常常有利于性能。 又称之为面向数据编程 (DOP) 。 AOSOA :中间方案 SIMD 矢量化成功! 4 个对象一组打包成 SOA ,再用一 个 n / 4 大小的数组存储为 AOS 。 优点: SOA 便于 SIMD 优化; AOS 便于存储在传统容器; AOSOA 两者得兼!是王鑫磊的最0 码力 | 108 页 | 9.47 MB | 1 年前3
CeresDB Rust 生产实践 任春韶 基于 InfluxDB 单机引擎研发 分布式方案 OpenTSDB 协议 内存时序数据库 存储计算分离架构 分级存储 永久代 CeresDB 开源 2022.6 2023.3 开源版本 CeresDB 开始研 发 2023.6 1.2.2 版本发布 优化了写入性能 优化了分布式方案 CeresDB – 目标 解决时间线高基数问题 解决时间线高基数问题 • 能高效处理好 APM 型时序数据 • 同时能高效处理好高基数时间线场景 提供原生分布式方案 • 大规模部署 • 提供高可用、高可靠的服务 • 支持水平扩容 • 支持高效的分布式查询 - Tokio Preemption - Future Cancellation Rust 生产实践 生产实践 – Tokio 为什么使用 Tokio ? 1. 业界使用最广泛,测试齐全。0 码力 | 22 页 | 6.95 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 15 C++ 系列课:字符与字符串• C 语言认为:假定字符串中的字符不可能出现 ‘ \0’ ,那么可以用 ‘ \0’ 作为结 尾的标记符,这就是当年最流行的 0 结尾字符串( null-terminated string ) 方案。 0 结尾字符串的缺点 • 1. 字符串本身不能含有 ‘ \0’ • 例如: {‘h’, ‘e’, ‘l’, ‘l’, ‘o’, ‘\0’, ‘c’, ‘p’, ‘p’} 则只有前五个字符是有效的。 整数的问题,没有解决如何把 0x000000~0x10FFFF 这些 整数塞进只能表示 0x00~0xFF 的 char 类型的问题。 • 如何用 char 表示这么宽的字符?有很多种解决方案。 • 一种方案是:索性放弃 char ,改用 wchar_t 做字符类型 。 • wchar_t 在 Linux 上为 4 字节,完全足够表示 Unicode 这 0x000000~0x10FFFF0 码力 | 162 页 | 40.20 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 10 从稀疏数据结构到量化数据类型m_block ,造成数据竞争。所 以有的指针被重复分配了两遍,写入了那个地址却没有实际被存到 m_data 这个指针数组里。因此结果不对,还造成了内存泄露。 解决:使用互斥量和原子变量 暴力解决方案就是用 std::mutex 避免多个线程同时访问。 然而这样会严重影响性能,锁和原子多了,就根本并行不起来。 教科书式的解决:二次判断法 这样如果 block 已经非空,则可以不用上锁,减少上锁次数。 为空,则上锁;再次检测是否为空,空则分配内存, 非空说明其他线程已经帮我分配好了,直接退出。 结果反而还变慢了……所以有时候教科书(如 Concurrency in Action )不一定就是完美解决方案,要根据实际情况判断。 真正的解决: tbb::spin_mutex 其实主要的瓶颈在于 std::mutex 会切换到操作系统内核中去调度 ,非常低效。而 tbb::spin_mutex 则是基于硬件原子指令的,完全0 码力 | 102 页 | 9.50 MB | 1 年前3
共 24 条
- 1
- 2
- 3













