首页
学习
活动
专区
圈层
工具
发布

做 RAG 不懂向量数据库,就像做后端不懂 MySQL

面试官让我重写检索逻辑》 “你们 RAG 项目为什么要用向量数据库?直接用 MySQL 存向量不行吗?” “因为向量数据库更快。” “快在哪里?它用了什么索引?...做 RAG 不懂向量数据库,就像做后端不懂 MySQL。 不是说你每天都要手写索引算法,而是你至少要知道系统为什么这样设计,出了问题该往哪里排查。 今天这篇,我们就把向量数据库面试高频问题讲透。...二、为什么不能直接用普通数据库? 严格说,不是不能。 如果你的知识库只有几千条 Chunk,用 PostgreSQL 加 pgvector,甚至用本地 FAISS,都可以跑起来。...向量数据库的价值不只是存储,而是高效相似度检索和工程化管理。 三、向量数据库和 Elasticsearch 有什么区别? 这个问题不能简单答成:ES 做关键词,向量数据库做向量。...生产级 RAG 经常会把 BM25 和向量检索结合起来,用 ES 做关键词召回,用向量数据库做语义召回,最后做结果融合和 Rerank。 02 索引算法别只背名词 四、ANN 是什么?

52511
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    利用MySQL系统数据库做性能负载诊断

    一样了解自己管理的数据库,个人认为包含了两个方面的了解: 1,在稳定性层面来说,更多的是关注高可用、读写分离、负载均衡,灾备管理等等high level层面的措施(就好比要保证生活的稳定性) 2,在实例级别的来说...这里用mysqlslap 做混合读写的压力测试 ....,这个统计是按照MySQL执行一个事务消耗的资源做统计的,而不是一个语句,笔者一开始懵逼了一阵子,举个简单的例子。...等待事件统计 MySQL数据库中的任何一个动作,都需要等待(一定的时间来完成),一共有超过1000个等待事件,分属不懂的类别,每个版本都不一样,且默认不是所有的等待事件都启用。...个人认为等待事件这个东西,仅做参考,不具备问题的诊断性,即便是再优化或者低负载的数据库,累计一段时间,某些事件仍旧会积累大量的等待事件。

    3K20

    Oracle和MySQL数据库中做线性回归

    这样如果按照这样的规律下一次再有一个x的数值输入,那么我们就能呢推断Y的数值大致是多少了。最后通过函数我们知道了这条线。...那么如果结合数据库来做怎么办?既然通过模拟数据可以做出这个结果,那么我第一感觉就是如果在数据库实现。...我就设计表的时候,让这个表的一列是广告投入,另外一个列是销售额(已经有的历史数据)所以表的设计是很重要的。...所谓智能化的基础是信息化如果连基本的数据都不对,想做好AI是不可能的。可惜MySQL社区版没有自身的模型,以上都是用python去演示的,但是Oracle有。...上图还是Oracle23AI的,最新的26AI,我没有。但是我相信这些只会是越做越好。带给我们的思考就是,怎么控制好数据库对象设计以及数据质量。

    27310

    Oracle和MySQL数据库中做线性回归

    这样如果按照这样的规律下一次再有一个x的数值输入,那么我们就能呢推断Y的数值大致是多少了。 最后通过函数我们知道了这条线。...那么如果结合数据库来做怎么办? 既然通过模拟数据可以做出这个结果,那么我第一感觉就是如果在数据库实现。...我就设计表的时候,让这个表的一列是广告投入,另外一个列是销售额(已经有的历史数据)所以表的设计是很重要的。...所谓智能化的基础是信息化 如果连基本的数据都不对,想做好AI是不可能的。 可惜MySQL社区版没有自身的模型,以上都是用python去演示的,但是Oracle有。...上图还是Oracle23AI的,最新的26AI,我没有。但是我相信这些只会是越做越好。 带给我们的思考就是,怎么控制好数据库对象设计以及数据质量。 墨力计划

    13710

    Mysql为什么最终用B+树做索引?

    ,针对普通二叉查找树,我们可以用平衡二叉查找树代替的,这样不久可以解决它的弊端了嘛?...从而带来频繁的IO操作 操作系统方面具体细节可以百度,百度百科比我说的好... 2.4 以平衡二叉树结点为例,讲解一下mysql中索引存在的结构模型 image.png mysql中,一个结点通常以磁盘块存在...,扫盲 B树和B+树,每个结点中不再只有左右两个孩子了,而是我们可以定义为任意个孩子,其中m个孩子就是m阶树,我们下面结构图中看到的关键字是结点的值(数据库中可体现在,如果我们用id做索引,关键字就是id...这是因为,我们mysql一般把一个结点数据定义为一页,一页数据是16K=16*1024byte,如果我们用的平衡二叉树,假如定义的索引为int型id,一个id 4byte,加上其他数据一个id索引可能页就...这其实也就是为啥我们一般慎用uuid做主键,因为它长度太长了,如果用uuid,太占用空间,我们索引的路数会变少,层数变少,效率会有所下降. 3.3 B+Tree(Mysql使用的索引数据结构) B+树是

    1.7K20

    MySQL数据库锁应该这样用

    本文作者:裘维清,腾讯高级运营开发工程师,主要负责腾讯游戏的运营开发工作。 本文针对我们平时使用场景最多的MySQL数据库在RR隔离级别下容易产生幻读的问题,来进行分析并分享解决方案。...PartⅠ 问题回顾 幻读的定义:幻读是指某个事务读取某个范围内的记录时,另外一个事务又在该范围内插入了新的记录,当之前事务再次读取该范围内的记录时就会产生幻行。...Step2:T2开始,插入id为1的记录且成功执行。 Step3:T1查到没有id=1的记录就开始插入id=1的记录,但是失败了(主键冲突)。...共享锁举例: 譬如一个工会活动,我们会设计一张存放工会信息的总表teamInfo,还会设计一张存放操作工会日志的表teamLog,当用户操作工会的时候,我们如果直接insert一条日志到日志表,其实是有一定的风险的...特惠体验云数据库 image.png

    3.1K20

    用ChatGPT分析Oracle、MySQL、PostgreSQL数据库

    MySQL数据库: MySQL是一种开源的关系型数据库管理系统,广泛应用于Web应用程序和中小型企业。它具有简单易用、高性能和可靠性等特点。...举例说明:在一家电商平台上,MySQL数据库可以通过合理的索引设计和查询优化,处理大量的商品搜索和订单处理请求,保持较低的响应时间。 可扩展性指标:MySQL数据库支持垂直和水平扩展。...举例说明:在社交媒体应用中,MySQL数据库可以通过水平分片来处理大量的用户数据,并实现高并发的社交互动。 安全性指标:MySQL数据库提供了基本的安全功能,如用户和权限管理。...举例说明:在企业内部应用中,MySQL数据库可以通过角色管理和权限控制,确保只有授权人员能够访问敏感的企业数据。...运维方面:MySQL数据库在运维方面相对简单,并且有着广泛的社区支持和生态系统。它提供了易于使用的管理工具和命令行接口,以及丰富的文档和教程资源。

    1.5K30

    Thinkphp同时用Mysql与MongoDB数据库

    最近公司的项目需求,由于原来是使用的关系型数据库MySQL,涉及到的新业务需要非关系型,所以考虑到了mogodb,但是遇到的问题是项目需要Thinkphp5同时使用Mysql和Mongodb数据库 ?...本篇文章详细介绍Thinkphp5 如何同时使用Mysql和MongoDB数据库。 一、在database.php配置默认关系型MySQL数据库连接 ?...'type' => 'mysql', 'hostname' => '服务器IP地址', 'database' => '数据库名', 'username'...=> '用户名', 'password' => '密码', 'hostport' => '数据库端口', 二、在config.php配置第二个非关系型数据库连接 ?...Thinkphp5扩展MongoDB可参考:Thinkphp5 扩展 MongoDB 详解 三、数据库使用 //默认MySQL数据库读取数据 $test = Db::name("test")->select

    4.1K20

    代码分享:用java备份MySQL数据库

    原文地址 https://www.t-io.org/1157456456140857344 前言 t-io官网的数据库都会定时备份,并且可以通过http直接下载到本地(这个当然需要特权,不是人人有这个操作权限...),为了操作的灵活性,采用java来实现MySql的备份 核心代码 package org.tio.sitexxx.service.tool; import java.io.BufferedReader...,可以是ip,也可以是域名 * @param port 数据库服务器端口 * @param dbName 数据库名字 * @param username 数据库用户名 * @param...password 数据库密码(明文) * @param filePath 存到哪个文件,形如:"d:/dbbackup/2019-08-03_00_00_00.sql" * @return...} return null; } } 非核心代码 非核心代码主要是获取数据库信息这些,同时将生成的SQL做成zip,然后用个定时任务去执行这个程序,这些代码就不贴出来啦 看看效果 [1.png

    3.4K10

    MySQL为什么用B+树做索引存储结构?

    面试技术岗的时候,面试官问你: mysql索引底层用的是B+树结构,为什么不用B树、二叉树、红黑树呢?...这里其实就是比较各种数据结构的优劣点,最后说明为什么要用B+树结构; 假设数据查询场景:现在有100W的数据存储,查询其中的一条,应该用哪种存储结构呢?...AVL树需要维持树的平衡,而维护这种平衡的开销要大于获得的收益,实际应用中不多 红黑树 红黑树是一种二叉查找树,每个节点新增一个存储位标记是red或black,通过任何一条从根节点到叶子节点路径上,各个节点着色方式的限制...如图是红黑树的可视化: AVL树和红黑树一样,随着记录数的增加,树的高度会不断增加,查询次数也会增加。...文章开头我们说的要查询100w条数据中的一条,就需要20次搜索,搜索效率不高,2的20次方为1048576,故100w条数据里查询需要搜索20次 B-树 即B树,和红黑树相比,B树的树高远远小于红黑树的高度

    1.1K20

    初学Redis(2)——用Redis作为Mysql数据库的缓存

    http://blog.csdn.net/qtyl1988/article/details/39519951         用Redis作Mysql数据库缓存,必须解决2个问题。...首先,应该确定用何种数据结构存储来自Mysql的数据;在确定数据结构之后,还要考虑用什么标识作为该数据结构的键。        ...直观上看,Mysql中的数据都是按表存储的;更微观地看,这些表都是按行存储的。每执行一次select查询,Mysql都会返回一个结果集,这个结果集由若干行组成。...所以,一个自然而然的想法就是在Redis中找到一种对应于Mysql行的数据结构。...用Redis键值对集合表示Mysql键值对集合应该再合适不过了:对于结果集中的某一行,字段对应于hash的“子键”,字段对应的值就是hash“子键”对应的值,即结果集的一行刚好对应一个hash。

    3.5K20

    怎样做用YashanDB提升数据库安全防护能力

    在当前信息技术迅速发展的背景下,数据库安全问题愈加突出。随着数据的剧增,攻击手段的多样化,使得数据库面临着前所未有的风险和威胁。...如何提升数据库的安全防护能力,防止数据泄露、篡改及丢失,已成为企业和开发者亟需解决的问题。YashanDB作为一款现代化的数据库管理系统,提供了一系列安全机制来保护数据的安全性、完整性和可用性。...审计与安全监控YashanDB的审计功能使得用户能够对其数据库操作进行全面监控与记录。...YashanDB支持实时报警机制,可以及时响应任何潜在的安全事件,增强数据库的防护能力。4....实时审计、数据加密及多版本控制等机制的实施,将大大增强数据库的安全防护能力,值得开发者与管理员积极实践与利用。

    36010

    用SparkStreaming做奇怪的事

    作者:尹会生 无需授权即可转载,甚至无需保留以上版权声明 Spark Steaming 是非常著名的流式计算工具,这次用它来搞一个奇葩的需求:开发给定一个日志同步服务器,日志达到10MB会同步过来一个新的文件...这个奇葩需求要注意两个点,一个是文件会不断的增加,所以要定时删除文件;另一个是"error"会在不定长的时间出现。...首先我们来搞定Spark Steaming 启动的问题,Spark Steaming 支持“文本文件 流”函数, 即textFileStream(),要是用这个调用你需要先导入一个streaming库...import org.apache.spark.streaming._ , 然后声明Streaming的入口 StreamingContext(sparkConf, Seconds(1)) 这里的...Seconds(1)是每隔多久来做一次统计,最后想要开始的时候执行 sparkstreamingcontext.start()。

    1K100

    用Shape做动画

    使用StrokeDashOffset做等待提示动画 圆形的等待提示动画十分容易做,只要让它旋转就可以了: ? 但是圆形以外的形状就不容易做了,例如三角形,总不能让它单纯地旋转吧: ?...用StrokeDashArray做进度提示的基本做法就是将进度Progress通过Converter转换为分成两段的StrokeDashArray,第一段为实线,表示当前进度,第二段为空白。...属性,所以用这个类充当Storyboard和StrokeDashArray的桥梁。...其实这篇文章里并不会讨论填充动画,不过首先声明做填充动画会更方便快捷,这一段只是深入学习过程中的产物,实用价值不高。...,能用系统自带的动画或样式就尽量用系统自带的,没有设计师的情况下又想UI做得与众不同通常会做得很难看。

    2.9K30

    怎样做用YashanDB实现轻松迁移数据库至云端?

    在当前数据驱动的时代,企业面临的一个重要挑战是如何有效地处理和迁移日益增长的数据库。云端数据库技术成为解决方案之一,但传统的迁移过程经常伴随性能瓶颈和数据一致性问题。...为此,YashanDB凭借其高可用性、多种存储架构、分布式部署特性,为用户提供了一种简单有效的数据库迁移至云端的途径。...分布式部署还能帮助用户在迁移过程中集成数据处理能力,结合云端的计算资源,提升数据库的整体性能。3. 共享集群部署共享集群部署在硬件层面依赖共享存储,所有数据库实例均可读写,由全局缓存实现数据交换。...故障恢复与数据验证:确保迁移后的云数据库能够支持故障恢复机制,同时验证数据完整性与一致性。结论随着云计算的迅猛发展,数据库的迁移策略显得尤为重要。...YashanDB凭借其多样化的体系架构与高效的数据处理能力,能够为企业提供一个轻松、可靠且高效的数据库迁移方案。

    40310

    Python —— 用模块做更多的事

    在前面的学习内容中,我们唯独没有将的就是我们导入的模块,我们导入的到底是什么呢?...其实,我们导入的模块是保存在单独文件中的一段Python 代码,当你想要使用文件中的函数和数据时,在你的代码最前面 “导入”(import 即可)。...但是我们有时只是为了用模块中的某个函数,又要该怎么做呢?  ...,sys 是system 的简称,我们直接导入我们需要的函数,在后面的程序中就不用再加入sys.这个前缀了,导入sys的库的作用可以使你的代码使用操作系统,下面我们就用Python 来打印下我们正在使用的操作系统...#用点分隔版本号 #version_info 是包含如下信息的一个元组:主版本号、次版本号、小版本(修订)号 #我的是 3.7.0 依次对应:3.7.0 if sys.version_info

    82710

    用 Python 做文本挖掘的流程

    预处理(对这里的高质量讨论结果的修改,下面的顺序仅限英文) 去掉抓来的数据中不需要的部分,比如 HTML TAG,只保留文本。结合 beautifulsoup 和正则表达式就可以了。...去掉长度过小的单词。len的是通常选择。 去掉 non-alpha 词。同样,可以用正则表达式完成 \W 就可以。 转换成小写。 去掉停用词。Matthew L....nltk 里面提供了好多种方式,推荐用 wordnet 的方式,这样不会出现把词过分精简,导致词丢掉原型的结果,如果实在不行,也用 snowball 吧,别用 porter,porter 的结果我个人太难接受了...重新去掉长度过小的词。是的,再来一遍。 重新去停词。上面这两部完全是为了更干净。 到这里拿到的基本上是非常干净的文本了。如果还有进一步需求,还可以根据 POS 的结果继续选择某一种或者几种词性的词。...jieba 是纯 Python 写的,Stanford 的可以通过 nltk 调用,复旦 NLP 也可以用 Python 调用。 END.

    2.2K80
    领券