当前位置: 首页 > news >正文

微澜:用 OceanBase 搭建基于知识图谱的实时资讯流的应用实践

本文作者: 北京深鉴智源科技有限公司架构师  郑荣凯

本文整理自北京深鉴智源科技有限公司架构师郑荣凯,在《深入浅出 OceanBase 第四期》的分享。


知识图谱是一项综合性的系统工程,需要在在各种应用场景中向用户展示经过分页的一度关系。

微澜是一款用于查询技术、行业、企业、科研机构、学科及其关系的知识图谱应用,具有十亿级实体以及百亿级关系。在我们公司的业务场景中,在数据上存在若干超级节点,这些节点是实用户访问概率极高的关键节点,因此,它们并不应被轻易地视为长尾问题的范畴。又因为我们当前的用户基数相对有限,遇到缓存的频率较低,因此我们需要一套解决方案来降低用户的查询延迟。

为了解决这个的业务痛点,微澜通过在知识图谱中引入OceanBase,突破了技术挑战,完美地在新闻资讯体系中搭建起了自己独有的体系,有效保证了信息的速度以及信息的可溯源与真实可靠。

一、微澜用知识图谱做了什么?

微澜由北京深鉴智源科技有限公司出品,是基于人工智能的个人认知提升助手(PCA)及创新的外部知识管理工具,有助于启发及解决工作、学习及生活中的有效选择及效率问题;打破“信息茧房”,消除“内卷”。

微澜在知识架构上增加了新闻资讯的架构。假如用户关注了某公司,系统会持续推送有关该公司的新闻,以及与这条新闻相关的实体。

二、为什么选择知识图谱?

微澜的客户一般在行业上游,挖掘商业逻辑。所以客户需要的信息相对比较宏观,需要更大的知识图谱,更多的实体承载这个架构。微澜的客户注重平衡“特殊”与“一般”。客户既要普适的结论也需要一些特殊性的结果,从而观察相关领域的风险以及机遇。与此同时,微澜的客户注重因果推断,他们希望所有的数据、结论能够溯源。

大卫休谟曾经说过:“运用归纳法的正当性,永远不可能从理性上被证明。”如果采用归纳法,归纳以往的数据、经验、结论,用这些数据推断未来的可能性,这件事情永远不可能在理性上被证明。

Inductive Reasoning(归纳推理)是从观察到的现象得出的一个结论,一个原则。假设看到的所有羊都是白的,利用 Inductive Reasoning (归纳推理)总结羊一定全都是白色的。

Deductive Reasoning(演绎推理)是已经知道一个原则,利用这个原则去预测看到的现象。假设一个定律是所有的乌龟都有壳。现在出现一个乌龟,就可以预料到这个乌龟一定也有壳。

思想关系与事实之间的区别,通常被称为“休谟之叉”,即 Hume's Fork 。通常带有负面暗示,即休谟可能非法排除了不适合这两个类别或同时适合这两个类别的有意义的命题。

休谟对知识的二分法被称为“休谟之叉”,是后来西方哲学认识论中分析命题和综合命题划分的先导。从“休谟之叉”又可以推出诸多不同标准下的知识,如先天的和后天的知识、分析的和综合的知识、必然的和偶然的知识,而这些知识的区分标准都已被“休谟之叉”点破。

以苹果公司为例,它存在着四万多个核心技术,所有的核心技术都可以在微澜溯源。

微澜发的新闻架构是基于知识图谱扩展的。实体一和实体二之间有关系,所以实体一关的新闻与实体二的新闻,也有潜在关系。

如上图所示,一个实体连着三条新闻,在不同的时间,发生了这三条新闻。所以微澜可以组成关于这个实体新闻流的时间线,便于用户理解实体发展的商业过程。

在微澜的知识图谱业务中,很多场景需要展示复杂的关系。同时,微澜的数据中存在一些超级节点,根据微澜的业务场景,超级节点是用户最可能访问的节点。

所以超级节点不能被简单归类到长尾问题。

某个机构在某领域的排名特别高,但在全局或者其他领域一般。在这种场景下,微澜必须显示排序属性,并且对于全局排序项,进行拟合标准化,使每个维度的数据方差都为1,均值都为0,以便用户进行局部排序,方便用户查询。

三、为什么要在知识图谱中加入 NewSQL ?

为了解决上述问题,微澜在知识图谱中加入 NewSQL ,把图中的一度关系问题转化为传统RDBMS中的联合主键即可解决图数据库中海量数据排序下推的问题。

对于初创企业而言,在数据量大的情况下, NewSQL 的运维成本和件成本都很低。

传统DBMS容错方案的重点是保障数据更新不会丢失。 NewSQL 除了这点以外,还能最小化停机时间,使其一直保持应用在线。

四、 NewSQL 在微澜的系统中如何选型?

微澜有30亿的 records 数据,但没有复杂分库分表的运维能力。而 ScyllaDB 无法适应新业务的查询要求,所以微澜需要一个能实现传统 RDBMS 的 query 功能的数据库。

除此之外,微澜需要进行周期性的大量写入。所以微澜 在OceanBase , TiDB , CockroachDB 之间选型。

Tikv 采用 Range 的方式分区,但微澜更需要 hash 的分区方式,因为微澜的业务更偏向于单点查询而非范围查询,写入速度比较慢,无法适应微澜周期性的大量写入的业务场景

CockroachDB(小强数据库)是 PG 型数据库,团队之前接触的比较少,对于单表的数据量支持一般,不符合业务需求。

OceanBase 有优秀的写入能力,支持 hash 分区策略。对于单表大数据量的支撑强而有力,有良好的社区支持,支持 B tree 索引策略复合业务。对于 Paxos 的极致应用使得任务的并行粒度很细,可以把性能尽可能发挥出来。

经过综合考虑,微澜最终选择使用 OceanBas e。在微澜的所有业务中,微澜选择使用 OceanBase 来存储图谱中所有的一度关系。图数据库无法覆盖的海量关系查询排序已经被完美解决。

对比之前微澜使用的 ScyllaDB ,作为 NewSQL 的 OceanBase ,自然比 NoSQL 数据库能覆盖更多的业务场景,比如多个条件的筛选并排序。现在微澜两周一次30亿 records 的数据更新已经在 OceanBase 上被验证了很多次,可以适配微澜的业务需求。

微澜采用推送架构而不是拉取架构,类似于微博给千万级大V单独建表推送给关注者的逻辑,用户不管是关注数个百万级新闻的实体还是只关注单个新闻数量很少的实体得到消息推送的速度都基本一致。

五、微澜如何实现?

微澜的业务架构,如上图所示。首先,用户在后端,关注一个实体。然后,微澜关联到实体 ID ,在用户资讯表,关联 ID 的新闻。最后,写入用户资讯表,将新闻展示给用户。

相比传统的资讯平台,由于知识图谱的加入并且与新闻深度耦合,可以扩展更多。比如针对某实体的新闻时间线,查询两条新闻之间的关系以及获取领域交叉等功能。

知识图谱采用演绎法而非传统技术分析的归纳法,推理结果保证是存在的事实而非通过分析得到的推论,领域交叉运算可溯源且真实可靠。


附录、用户问答

问:现在的集群规模有多大?

答:微澜只有三台机器。

问:这些模型是固定好的?还是根据即时需求生成的?

答:大部分是固定好的。如果客户对微澜提出了新的需求,微澜再生产新的功能,满足相关的需求。

问:你们怎样控制合并机制?

答:在业务方,手动合并。目前微澜还没有完全解决合并问题,但现在可以正常运行。

问: OceanBase 在知识图谱的用法,可以复制到类似的业务场景下吗?这种场景有什么突出的特点?

答:原生的存储数据的形式不具有排序功能。 OceanBase 可以索引,做更多复杂的业务。

相关文章:

微澜:用 OceanBase 搭建基于知识图谱的实时资讯流的应用实践

本文作者: 北京深鉴智源科技有限公司架构师 郑荣凯 本文整理自北京深鉴智源科技有限公司架构师郑荣凯,在《深入浅出 OceanBase 第四期》的分享。 知识图谱是一项综合性的系统工程,需要在在各种应用场景中向用户展示经过分页的一度关系。 微…...

【LeetCode】【算法】538. 把二叉搜索树转换为累加树

LeetCode 538. 把二叉搜索树转换为累加树 题目 给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。 提醒一下…...

YoloV8改进策略:注意力改进|EPSANet,卷积神经网络上的高效金字塔挤压注意力块|即插即用|代码+改进方法

摘要 论文介绍 本文介绍的论文是“EPSANet:卷积神经网络上的高效金字塔挤压注意力块”,该论文提出了一种新颖、轻量且有效的注意力方法,即金字塔挤压注意力(PSA)模块。论文通过替换ResNet瓶颈块中的 3 3 3 \times 3 3...

Nextflow最佳实践:如何在云上高效处理大规模数据集

1. Nextflow 软件架构介绍 Nextflow 是一个用于简化数据驱动计算流程的工具,可以在各种计算环境中轻松部署。它采用了分布式计算和容器技术,实现了高度模块化、可重复性和可扩展性。NextFlow 的软件架构主要包括以下几个部分: 用户界面&…...

数据结构:顺序表(动态顺序表)

专栏说明:本专栏用于数据结构复习,文章中出现的代码由C语言实现,在专栏中会涉及到部分OJ题目,如对你学习有所帮助,可以点赞鼓励一下博主喔💓 博客主页:Duck Bro 博客主页系列专栏:数…...

springboot040社区医院信息平台

🍅点赞收藏关注 → 添加文档最下方联系方式领取本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅 项目视频 spr…...

windows下QT5.12.11使用MSVC编译器编译mysql驱动并使用详解

1、下载mysql开发库,后面驱动编译的时候需要引用到,下载地址:mysql开发库下载 2、使用everything搜索:msvc-version.conf,用记事本打开,添加:QMAKE_MSC_VER=1909。不然msvc下的mysql源码加载不上。...

c++写一个死锁并且自己解锁

刷算法题: 第一遍:1.看5分钟,没思路看题解 2.通过题解改进自己的解法,并且要写每行的注释以及自己的思路。 3.思考自己做到了题解的哪一步,下次怎么才能做对(总结方法) 4.整理到自己的自媒体平台。 5.再刷重复的类…...

JavaScript方法修改 input type=file 样式

html中的<input type "file">的样式很难修改&#xff0c;又跟页面风格很不匹配。我就尝试了几种方法&#xff0c;但是不管是用label还是用opacity:0都很麻烦&#xff0c;还老是出问题&#xff0c;所以最后还是用JavaScript来解决。 下面附上代码&#xff1a;…...

群控系统服务端开发模式-应用开发-前端个人信息功能

个人信息功能我把他分为了3部分&#xff1a;第一部分是展示登录者信息&#xff1b;第二步就是登录者登录退出信息&#xff1b;第三部分就是修改个人资料。 一、展示登录者信息 1、优先添加固定路由 在根目录下src文件夹下route文件夹下index.js文件中&#xff0c;添加如下代码 …...

【jupyter】文件路径的更改

使用过 jupyter notebook 环境的同行&#xff0c; 都体会过随机生成 .html 静态网页的过程&#xff0c; 虽然文档较小&#xff0c; 但是不堪反复使用积少成多。本文基于windows系统。 找到 runtime 目录 一般 jupyter 默认 runtime 在下述格式目录中 C:\Users\用户名\AppData…...

Ruby编程语言全景解析:从基础到进阶

Ruby是一种动态的、面向对象的编程语言&#xff0c;以其优雅的语法和强大的功能而闻名于世。自从1995年由日本程序员松本行弘&#xff08;Yukihiro Matsumoto&#xff09;发布以来&#xff0c;Ruby便迅速成为了开发者中颇受欢迎的编程语言之一。无论是构建简单的脚本还是复杂的…...

Elasticsearch 8.16:适用于生产的混合对话搜索和创新的向量数据量化,其性能优于乘积量化 (PQ)

作者&#xff1a;来自 Elastic Ranjana Devaji, Dana Juratoni Elasticsearch 8.16 引入了 BBQ&#xff08;Better Binary Quantization - 更好的二进制量化&#xff09;—— 一种压缩向量化数据的创新方法&#xff0c;其性能优于传统方法&#xff0c;例如乘积量化 (Product Qu…...

解决vscode不能像pycharm一样从其他同级文件夹导包

在vscode中选择&#xff1a;文件-首选项-设置-扩展-Python-settings.json 向setting.json添加如下代码: "terminal.integrated.env.osx": {"PYTHONPATH": "${workspaceFolder}/",},"terminal.integrated.env.linux": {"PYTHON…...

DAY24|回溯算法Part03|LeetCode:93.复原IP地址、78.子集、90.子集II

目录 LeetCode:93.复原IP地址 基本思路 C代码 LeetCode:78.子集 基本思路 C代码 LeetCode:90.子集II 基本思路 C代码 通过used实现去重 通过set实现去重 不使用used和set版本 LeetCode:93.复原IP地址 力扣代码链接 文字讲解&#xff1a;LeetCode:93.复原IP地…...

接口自动化测试做到什么程度的覆盖算是合格的

接口自动化测试的覆盖程度是一个衡量测试质量与效率的重要指标&#xff0c;其“好”的标准并非绝对&#xff0c;而是根据项目特性和团队需求动态调整的结果。然而&#xff0c;有几个原则和实践可以帮助我们确定一个相对合理的覆盖范围&#xff0c;以及为何这些覆盖是必要的。 1…...

Kubernetes-ArgoCD篇-01-简介

1、什么是Argo CD Argo CD 是针对 Kubernetes 的声明式 GitOps 持续交付工具。 Argo CD官方文档地址&#xff1a;https://argo-cd.readthedocs.io Argo CD源码地址&#xff1a;https://github.com/argoproj/argo-cd 1.1 关于Argo Argo是一个开源的项目&#xff0c;主要是扩…...

阿里云通义大模型团队开源Qwen2.5-Coder:AI编程新纪元

&#x1f680; 11月12日&#xff0c;阿里云通义大模型团队宣布开源通义千问代码模型全系列&#xff0c;共6款Qwen2.5-Coder模型。这些模型在同等尺寸下均取得了业界最佳效果&#xff0c;其中32B尺寸的旗舰代码模型在十余项基准评测中均取得开源最佳成绩&#xff0c;成为全球最强…...

【大数据学习 | HBASE高级】hbase的参数优化

Zookeeper 会话超时时间 属性&#xff1a;zookeeper.session.timeout 解释&#xff1a;默认值为 90000 毫秒&#xff08;90s&#xff09; hbase.client.pause&#xff08;默认值 100ms&#xff09;重试间隔 hbase.client.retries.number&#xff08;默认 15 次&#xff09;重试…...

两个链表求并集、交集、差集

两个链表求并集、交集、差集 两个链表求并集、交集、差集其实都是创建一个新链表然后遍历插入的题型&#xff0c;所以下边就举并集一个例子。 首先将l1里的所有节点遍历存储到新节点l中开始遍历l2,如果l中不存在l2中的节点就将其尾插到l中 下面是两个链表求并集、交集、差集的代…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...