 新一代分布式高性能图数据库的构建 - 沈游人Graph Analytics Source: KDnuggets 图技术全景图—— Graph Technology Landscape 2020 • 图数据库 • 图数据建模 • 图计算引擎 • 图数据集成 • 可视化分析 • 知识图谱解决方案 • 图查询语言 • 欺诈检测 • 网络安全分析 • 社交网络分析 • BI 工具 • 图分析工具集 • 图咨询服务 Source ,高性能图计算引 擎,预置 20 余种图计算算法 ,可扩展的分析引擎支持更复 杂的数据挖掘和机器学习场景 MPP Massively Parallel Processing 架构,大规模集群 分布式存储及并行计 算, Shared Nothing 模式支 持存储计算分离 高性能 基于 Rust 开发的分布式存储引 擎及图计算引擎,精细的内存 管理设计,内置索引系统,支 持毫秒级的并发查询响应速度 Language) ,类 SQL 的图查询 语言,内置上百种分析函数, 面向分析师友好,拥抱标准, 基于 openCypher 向 ISO GQL 迈进 实时大图 支持万亿节点存储及流式计算 引擎的结合,最新数据实时入 库构图,为在线业务决策分析 提供有力支撑 AtlasGraph 架构及实现 新一代图技术应用特征简介 Takeaway AtlasGraph 架构概览 存储层0 码力 | 38 页 | 24.68 MB | 1 年前3 新一代分布式高性能图数据库的构建 - 沈游人Graph Analytics Source: KDnuggets 图技术全景图—— Graph Technology Landscape 2020 • 图数据库 • 图数据建模 • 图计算引擎 • 图数据集成 • 可视化分析 • 知识图谱解决方案 • 图查询语言 • 欺诈检测 • 网络安全分析 • 社交网络分析 • BI 工具 • 图分析工具集 • 图咨询服务 Source ,高性能图计算引 擎,预置 20 余种图计算算法 ,可扩展的分析引擎支持更复 杂的数据挖掘和机器学习场景 MPP Massively Parallel Processing 架构,大规模集群 分布式存储及并行计 算, Shared Nothing 模式支 持存储计算分离 高性能 基于 Rust 开发的分布式存储引 擎及图计算引擎,精细的内存 管理设计,内置索引系统,支 持毫秒级的并发查询响应速度 Language) ,类 SQL 的图查询 语言,内置上百种分析函数, 面向分析师友好,拥抱标准, 基于 openCypher 向 ISO GQL 迈进 实时大图 支持万亿节点存储及流式计算 引擎的结合,最新数据实时入 库构图,为在线业务决策分析 提供有力支撑 AtlasGraph 架构及实现 新一代图技术应用特征简介 Takeaway AtlasGraph 架构概览 存储层0 码力 | 38 页 | 24.68 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 02 现代 C++ 入门:RAII 内存管理Pig(pig) 语法 来强制拷贝。 为什么很多面向对象语言,比如 Java ,都没有构造函数全家桶这些概念? • 因为他们的业务需求大多是:打开数据库,增删改查学生数据,打开一个窗口,写入一个 文件,正则匹配是不是电邮地址,应答 HTTP 请求等。 • 这些业务往往都是在和资源打交道,从而基本都是刚刚说的要删除拷贝函数的那一类,解 决这种需求,几乎总是在用 shared_ptr C++高性能并行编程与优化 -  课件 - 02 现代 C++ 入门:RAII 内存管理Pig(pig) 语法 来强制拷贝。 为什么很多面向对象语言,比如 Java ,都没有构造函数全家桶这些概念? • 因为他们的业务需求大多是:打开数据库,增删改查学生数据,打开一个窗口,写入一个 文件,正则匹配是不是电邮地址,应答 HTTP 请求等。 • 这些业务往往都是在和资源打交道,从而基本都是刚刚说的要删除拷贝函数的那一类,解 决这种需求,几乎总是在用 shared_ptr- 的模式,于是 std::dynamic_pointer_cast 8. 运算符重载 9. 右值引用 && 10. std::shared_ptr - 和 std::any • 只提供了关键字,详细信息请善用搜索引擎: bing.com 。(不要用 baidu.com ,那个是搜广告用的) • 如果感兴趣,我可以增添一节专门讲动态多态。 回家作业! • 已经发布到: https://github.com/parallel101/hw02 的拷贝构造函数能正常工作,且内存能够安全释放。 • 通过 pull request 提交你的作业,这样我可以通过 diff 页面清楚地看到你的改动。 • 什么事 pull request ?还是善用搜索引擎,这是作业的一部分( x 感谢观看! by 彭于斌( github@archibate ) 录播: https://space.bilibili.com/ 263032155 课件: https://github 0 码力 | 96 页 | 16.28 MB | 1 年前3
 谈谈MYSQL那点事二进制层次的文件可以移植 二进制层次的文件可以移植 (Linux (Linux   Windows) Windows) • 访问速度飞快,是所有 访问速度飞快,是所有 MySQL MySQL 文件引擎中速度最快的 文件引擎中速度最快的 • 不支持一些数据库特性,比如 事务、外键约束等 不支持一些数据库特性,比如 事务、外键约束等 • Table level lock Table level lock 服务器,尽量在应用本身达到一 个 个 MySQL MySQL 最合理的使用 最合理的使用  针对 针对 MyISAM MyISAM 或 或 InnoDB InnoDB 不同引擎进行不同定制 不同引擎进行不同定制 性配置 性配置  针对不同的应用情况进行合理配置 针对不同的应用情况进行合理配置  针对 针对 my.cnf my.cnf 进行配置,后面设置是针对内存为 进行配置,后面设置是针对内存为0 码力 | 38 页 | 2.04 MB | 1 年前3 谈谈MYSQL那点事二进制层次的文件可以移植 二进制层次的文件可以移植 (Linux (Linux   Windows) Windows) • 访问速度飞快,是所有 访问速度飞快,是所有 MySQL MySQL 文件引擎中速度最快的 文件引擎中速度最快的 • 不支持一些数据库特性,比如 事务、外键约束等 不支持一些数据库特性,比如 事务、外键约束等 • Table level lock Table level lock 服务器,尽量在应用本身达到一 个 个 MySQL MySQL 最合理的使用 最合理的使用  针对 针对 MyISAM MyISAM 或 或 InnoDB InnoDB 不同引擎进行不同定制 不同引擎进行不同定制 性配置 性配置  针对不同的应用情况进行合理配置 针对不同的应用情况进行合理配置  针对 针对 my.cnf my.cnf 进行配置,后面设置是针对内存为 进行配置,后面设置是针对内存为0 码力 | 38 页 | 2.04 MB | 1 年前3
 CeresDB Rust 生产实践 任春韶CeresDB – 历程 2018.02 2018.10 2019.02 ~ 2020.11 2021.9  自研存储引擎  1.0.0 版本发布  查询性能优化  Prometheus 协议支持  基于 InfluxDB 单机引擎研发 分布式方案  OpenTSDB 协议  内存时序数据库  存储计算分离架构  分级存储  永久代  CeresDB0 码力 | 22 页 | 6.95 MB | 1 年前3 CeresDB Rust 生产实践 任春韶CeresDB – 历程 2018.02 2018.10 2019.02 ~ 2020.11 2021.9  自研存储引擎  1.0.0 版本发布  查询性能优化  Prometheus 协议支持  基于 InfluxDB 单机引擎研发 分布式方案  OpenTSDB 协议  内存时序数据库  存储计算分离架构  分级存储  永久代  CeresDB0 码力 | 22 页 | 6.95 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 03 现代 C++ 进阶:模板元编程variant :判断当前是哪个类型用 v.index() • 除了这个之外,还可以用成员方法 index() 获取当前是参数列表中的第几个类型。这 样也可以实现判断。 variant :批量匹配 std::visit • 如果你的 if-else 每个分支长得都差不多(除了 std::get<> 的类型不一样以外),可以考虑用 std::visit ,他会自动用相应的类型,调用你的 名著不看红楼梦,后面我忘了,总 之就是只能度过一个相对失败的人 生 :) std::visit :还支持多个参数 • 其实还可以有多个 variant 作为参数。 • 相应地 lambda 的参数数量要与之匹配。 • std::visit 会自动罗列出所有的排列组合! • 所以如果 variant 有 n 个类型,那 lambda 就要被编译 n² 次,编译可能会 变慢。 • 但是标准库能保证运行时是0 码力 | 82 页 | 12.15 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 03 现代 C++ 进阶:模板元编程variant :判断当前是哪个类型用 v.index() • 除了这个之外,还可以用成员方法 index() 获取当前是参数列表中的第几个类型。这 样也可以实现判断。 variant :批量匹配 std::visit • 如果你的 if-else 每个分支长得都差不多(除了 std::get<> 的类型不一样以外),可以考虑用 std::visit ,他会自动用相应的类型,调用你的 名著不看红楼梦,后面我忘了,总 之就是只能度过一个相对失败的人 生 :) std::visit :还支持多个参数 • 其实还可以有多个 variant 作为参数。 • 相应地 lambda 的参数数量要与之匹配。 • std::visit 会自动罗列出所有的排列组合! • 所以如果 variant 有 n 个类型,那 lambda 就要被编译 n² 次,编译可能会 变慢。 • 但是标准库能保证运行时是0 码力 | 82 页 | 12.15 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 16 现代 CMake 模块化项目管理指南src/*.cpp) • 疑问 1 :都是按照通配符批量匹配文件,有什么区别? • GLOB : src/main.cpp (√) src/test/main.cpp ( × ) • GLOB_RECURSE : src/main.cpp (√) src/test/main.cpp (√) • 区别在于 GLOB_RECURSE 允许 * 匹配嵌套的目录。 • 疑问 2 :加了 CONFIGURE_DEPENDS0 码力 | 56 页 | 6.87 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 16 现代 CMake 模块化项目管理指南src/*.cpp) • 疑问 1 :都是按照通配符批量匹配文件,有什么区别? • GLOB : src/main.cpp (√) src/test/main.cpp ( × ) • GLOB_RECURSE : src/main.cpp (√) src/test/main.cpp (√) • 区别在于 GLOB_RECURSE 允许 * 匹配嵌套的目录。 • 疑问 2 :加了 CONFIGURE_DEPENDS0 码力 | 56 页 | 6.87 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 07 深入浅出访存优化uint64_t address; • char data[64]; • }; • CacheEntry cache[512]; • 当 CPU 读取一个地址时: • 缓存会查找和该地址匹配的条目。如果找到,则给 CPU 返 回缓存中的数据。如果找不到,则向主内存发送请求,等读 取到该地址的数据,就创建一个新条目。 • 在 x86 架构中每个条目的存储 64 字节的数据,这个条目 uint64_t address; • char data[64]; • }; • CacheEntry cache[512]; • 当 CPU 写入一个地址时: • 缓存会查找和该地址匹配的条目。如果找到,则修改缓存 中该地址的数据。如果找不到,则创建一个新条目来存储 CPU 写的数据,并标记为脏( dirty )。 • 当读和写创建的新条目过多,缓存快要塞不下时,他会把 最0 码力 | 147 页 | 18.88 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 07 深入浅出访存优化uint64_t address; • char data[64]; • }; • CacheEntry cache[512]; • 当 CPU 读取一个地址时: • 缓存会查找和该地址匹配的条目。如果找到,则给 CPU 返 回缓存中的数据。如果找不到,则向主内存发送请求,等读 取到该地址的数据,就创建一个新条目。 • 在 x86 架构中每个条目的存储 64 字节的数据,这个条目 uint64_t address; • char data[64]; • }; • CacheEntry cache[512]; • 当 CPU 写入一个地址时: • 缓存会查找和该地址匹配的条目。如果找到,则修改缓存 中该地址的数据。如果找不到,则创建一个新条目来存储 CPU 写的数据,并标记为脏( dirty )。 • 当读和写创建的新条目过多,缓存快要塞不下时,他会把 最0 码力 | 147 页 | 18.88 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 08 CUDA 开启的 GPU 编程blockDim ),都能自动根据给定的 n 区间循环,不会越界,也不会漏掉几个元 素。 • 这样一个 for 循环非常符合 CPU 上常见 的 parallel for 的习惯,又能自动匹配不同 的 blockDim ,看起来非常方便。 从线程到板块 • 核函数内部,用之前说到的 blockDim.x + blockIdx.x + threadIdx.x 来获取线程在整个 网格中编号。 ),总共多少板块( gridDim )。 都能自动根据给定的 n 区间循环,不会越界 ,也不会漏掉几个元素。 • 这样一个 for 循环非常符合 CPU 上常见的 parallel for 的习惯,又能自动匹配不同的 blockDim 和 gridDim ,看起来非常方便。 本方法出自英伟达官方博客: https://developer.nvidia.com/blog/cuda-pro-tip-wr0 码力 | 142 页 | 13.52 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 08 CUDA 开启的 GPU 编程blockDim ),都能自动根据给定的 n 区间循环,不会越界,也不会漏掉几个元 素。 • 这样一个 for 循环非常符合 CPU 上常见 的 parallel for 的习惯,又能自动匹配不同 的 blockDim ,看起来非常方便。 从线程到板块 • 核函数内部,用之前说到的 blockDim.x + blockIdx.x + threadIdx.x 来获取线程在整个 网格中编号。 ),总共多少板块( gridDim )。 都能自动根据给定的 n 区间循环,不会越界 ,也不会漏掉几个元素。 • 这样一个 for 循环非常符合 CPU 上常见的 parallel for 的习惯,又能自动匹配不同的 blockDim 和 gridDim ,看起来非常方便。 本方法出自英伟达官方博客: https://developer.nvidia.com/blog/cuda-pro-tip-wr0 码力 | 142 页 | 13.52 MB | 1 年前3
 基于 Rust Arrow Flight 的物联网和时序数据传输及转换工具 霍琳贺支持标准 SQL 写入,支持批量写入  支持 Schemaless 写入  支持从 Kafaka, MQTT, OPC, PI System 以及文 件直接导入  数据源导入时,可定义规则引擎 TDengine: 与上下游应用的关系 TDengine = Time-Series Database + Caching + Data Subscription + Stream Processing0 码力 | 29 页 | 2.26 MB | 1 年前3 基于 Rust Arrow Flight 的物联网和时序数据传输及转换工具 霍琳贺支持标准 SQL 写入,支持批量写入  支持 Schemaless 写入  支持从 Kafaka, MQTT, OPC, PI System 以及文 件直接导入  数据源导入时,可定义规则引擎 TDengine: 与上下游应用的关系 TDengine = Time-Series Database + Caching + Data Subscription + Stream Processing0 码力 | 29 页 | 2.26 MB | 1 年前3
 C++高性能并行编程与优化 - 课件 - Zeno 中的现代 C++ 最佳实践 声明为模板函数的确能解决问题,但模板函数不是面向对象的思路,并 且如果 cat 和 dog 是在一个 IObject 的指针里就会编译出错,例如右图的 vector C++高性能并行编程与优化 - 课件 - Zeno 中的现代 C++ 最佳实践 声明为模板函数的确能解决问题,但模板函数不是面向对象的思路,并 且如果 cat 和 dog 是在一个 IObject 的指针里就会编译出错,例如右图的 vector- (这是游戏引擎中很常见的用法)。 正确解法:额外定义一个 clone 作为纯虚函数,然后让猫和狗分别实现他 clone 的调用 • 这样一来,我们通用的 eatTwice 函数里 只需调用 obj->clone() 0 码力 | 54 页 | 3.94 MB | 1 年前3
共 12 条
- 1
- 2













