微澜:用 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 可以索引,做更多复杂的业务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/916306.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

探索Python文档自动化的奥秘:`python-docx`库全解析

文章目录 探索Python文档自动化的奥秘:python-docx库全解析1. 背景:为何选择python-docx?2. python-docx是什么?3. 如何安装python-docx?4. 简单库函数使用方法创建文档添加段落添加标题添加表格插入图片 5. 应用场景自…

测试实项中的偶必现难测bug--一键登录失败

问题描述:安卓和ios有出现部分一键登录失败的场景,由于场景比较极端,衍生了很多不好评估的情况。 产生原因分析: 目前有解决过多次这种行为的问题,每次的产生原因都有所不同,这边根据我个人测试和收集复现的情况列举一些我碰到的: 1、由于我们调用的是友盟的一键登录的…

Vue的基础使用

一、为什么要学习Vue 1.前端必备技能 2.岗位多,绝大互联网公司都在使用Vue 3.提高开发效率 4.高薪必备技能(Vue2Vue3) 二、什么是Vue 概念:Vue (读音 /vjuː/,类似于 view) 是一套 构建用户界面 的 渐进式 框架…

vue3使用VueQuill插入自定义按钮

在 Vue 3 项目中使用 VueQuill 编辑器时,我们可以自定义内容来满足特定的需求。本文将介绍如何在 VueQuill 中插入自定义内容,比如插入特定的标签或样式元素。 Quill官方中文文档 1. 项目设置和依赖安装 如果你还没有创建 Vue 3 项目,可以…

【springboot使用sqlite数据库】Java后台同时使用mysql、sqlite

环境:根据业务的需要,老版程序使用的数据库是sqlite,版本升级成前后台分离模式,因此需要兼容mysql与sqlite数据库同时使用。 pom.xml设置: application.yml文件配置: mapper.java文件: service.…

多智能体深度确定性策略梯度(MADDPG)算法复现教程

复现软硬件: Ubunru20.04,Python 3.8.10, torch 2.4.1, gym 0.10.5,VScode 论文: http://arxiv.org/pdf/1706.02275 环境: GitHub - openai/multiagent-particle-envs: Code for a multi-agent particle environment used in the paper "Multi-Agent Actor-…

51c大模型~合集42

我自己的原文哦~ https://blog.51cto.com/whaosoft/11859244 #猎户座 「草莓」即将上线,OpenAI新旗舰大模型曝光,代号「猎户座」 ChatGPT 要进化了? 本月初,OpenAI 创始人、CEO 山姆・奥特曼突然在 X 上发了一张照片&#xff0…

探索Copier:Python项目模板的革命者

文章目录 **探索Copier:Python项目模板的革命者**1. 背景介绍:为何Copier成为新宠?2. Copier是什么?3. 如何安装Copier?4. 简单库函数使用方法4.1 创建模板4.2 从Git URL创建项目4.3 使用快捷方式4.4 动态替换文本4.5 …

系统掌握大语言模型提示词 - 从理论到实践

以下是我目前的一些主要个人标签: 6 年多头部大厂软件开发经验;1 年多 AI 业务应用经验,拥有丰富的业务提示词调优经验和模型微调经验。信仰 AGI,已经将 AI 通过自定义 Chatbot /搭建 Agent 融合到我的工作流中。头部大厂技术大学…

前端学习资源合集,附链接

前言 本文是前端开发初学资源 初步 1. 三件套htmlcssjavascript 前端Web开发HTML5CSS3移动web视频教程,前端web入门首选黑马程序员_哔哩哔哩_bilibili 黑马程序员前端JavaScript入门到精通全套视频教程,javascript核心进阶ES6语法、API、js高级等基…

全同态加密基于多项式环计算的图解

全同态加密方案提供了一种惊人的能力 —— 能够在不知道数据具体内容的情况下对数据进行计算。这使得你可以在保持潜在敏感源数据私密的同时,得出问题的答案。 这篇文章的整体结构包括多项式环相关的数学介绍,基于多项式环的加密和解密是如何工作的&…

【Window主机访问Ubuntu从机——Xrdp配置与使用】

使用Xrdp在Window环境下远程桌面访问Ubuntu主机 文章目录 Ubuntu安装图形化界面Ubuntu安装Xrdp通过网线连接两台主机Window主机有线连接配置Ubuntu从机设置测试有线连接 Window主机打开远程桌面功能参考文章总结 Ubuntu安装图形化界面 sudo apt update sudo apt upgrade sudo …

stable-diffusion-3 ,每天免费试用

https://huggingface.co/spaces/stabilityai/stable-diffusion-3-mediumhttps://huggingface.co/spaces/stabilityai/stable-diffusion-3-medium官方space,童叟无欺,科学试用。 an image of a girl with white hair, in the style of ross tran, light …

datastage在升级版本到11.7之后,部分在11.3上正常执行的SP报错SQLSTATE = 22007: 本机错误代码 = -180

在升级版本到11.7之后,部分在11.3上正常执行的SP开始报错,报的SQL错误是时间参数问题,但是一样的SP可以直接call sp执行,也可以手动调用作业执行,只有设置定时调度时作业会报错, CALLXXX.XXX(1,CURRENT TIM…

xcode-select: error: tool ‘xcodebuild‘ requires Xcode, but active developer

打开 .sh 文件所在的终端窗口,执行终端命令:sh 文件名.sh,出现如下错误: 解决办法:

如何修改npm包

前言 开发中遇到一个问题,配置 Element Plus 自定义主题时,添加了 ElementPlusResolver({ importStyle: "sass" }) 后,控制台出现报错,这是因为 Dart Sass 2.0 不再支持使用 !global 来声明新变量,虽然当前…

RabbitMQ队列详细属性(重要)

RabbitMQ队列详细属性 1、队列的属性介绍1.1、Type:队列类型1.2、Name:队列名称1.3、Durability:声明队列是否持久化1.4、Auto delete: 是否自动删除1.5、Exclusive:1.6、Arguments:队列的其他属性&#xf…

通过Python 调整Excel行高、列宽

在Excel中,默认的行高和列宽可能不足以完全显示某些单元格中的内容,特别是当内容较长时。通过调整行高和列宽,可以确保所有数据都能完整显示,避免内容被截断。合理的行高和列宽可以使表格看起来更加整洁和专业,尤其是在…

Qt学习笔记(四)多线程

系列文章目录 Qt开发笔记(一)Qt的基础知识及环境编译(泰山派) Qt学习笔记(二)Qt 信号与槽 Qt学习笔记(三)网络编程 Qt学习笔记(四)多线程 文章目录 系列文章…

用 Python 从零开始创建神经网络(三):添加层级(Adding Layers)

添加层级(Adding Layers) 引言1. Training Data2. Dense Layer Class 引言 我们构建的神经网络变得越来越受人尊敬,但目前我们只有一层。当神经网络具有两层或更多隐藏层时,它们变成了“深度”网络。目前我们只有一层&#xff0c…