如何基于亚马逊云科技打造高性能的 SQL 向量数据库 MyScale

7340e9f910db95335d816728be3fedf9.gif

MyScale 是一款完全托管于亚马逊云科技、支持 SQL 的高效向量数据库。MyScale 的优势在于,它在提供与专用向量数据库相匹敌甚至优于的性能的同时,还支持完整的 SQL 语法。在这篇文章中,我们将阐述 MyScale 是如何借助亚马逊云科技的基础设施,构建出一个稳定且高效的云数据库。

什么是向量数据库

或许你尚未察觉,然而向量嵌入(vector embedding)实际上无处不在。它们构成了众多机器学习和深度学习算法的根基,被广泛运用于从搜索引擎到智能助手等各式各样的应用。机器学习与深度学习通常会把文本、图像、音频、视频等非结构化数据转化为向量嵌入的形式进行储存,并借由向量相似性搜索技术进行语义相关性搜索。基于向量的相似性搜索现如今已被大量应用于各类人工智能驱动的应用场景,包括图像检索、视频分析、自然语言理解、推荐系统、定向广告、个性化搜索、智能客服以及欺诈检测等。在这样的背景下,对向量数据的管理显得尤为重要,我们需要能够快速地储存、索引和搜索这些向量化的数据。

现存的向量数据库大体上可以分为两大类别。一类是专为向量设计的专有向量数据库产品,例如 Pinecone、Weaviate、Qdrant、Chroma、Milvus 等。另一类则是在通用的 SQL 或 NoSQL 数据库产品上进行扩展,其中最为人熟知的 SQL 数据库之一 Postgres 通过插件 pgvector 支持了向量索引和搜索;而包括 ClickHouse、Redis、Elasticsearch 和 Cassandra 在内的许多开源数据库近期都增加了对向量索引的原生支持。

人们通常认为,专有的向量数据库专门为向量检索设计,能够提供较佳的搜索性能。而支持向量搜索的通用数据库产品则依赖于原有的通用数据库,能够提供更为完善的数据管理和结构化数据查询能力,向量检索性能则有所损失。MyScale 基于开源的在线分析处理(OLAP)数据库 ClickHouse 开发,集成了自主研发的多尺度树图(英文:multi-scale tree graph,缩写 MSTG)向量索引算法。它不仅继承了 ClickHouse 卓越的结构化数据分析和查询能力,同时也提供了数倍于专有向量数据库的性价比,从而将两者的优势集于一身,给企业提供了统一的结构化和非结构化数据管理方案。

整体架构

MyScale 是一款完全依托于亚马逊云科技云平台的数据库服务,其架构深度结合了亚马逊云科技的多元化产品线,包含了 Amazon EC2 云端虚拟服务器、Amazon EKS 集群管理、Amazon S3 对象存储、Amazon NLB 负载均衡等。有赖于亚马逊云科技提供的强大底层设施,我们迅速地构建出了 MyScale 的云端服务产品。

如下图所示,MyScale 云服务的架构设计包括全局控制平面(global control plane)、区域控制平面(regional control plane)以及区域数据平面(regional data plane)三个层次,每个层次对应一个 Kubernetes 集群。全局控制平面中部署了云服务的业务系统,负责组织、用户的管理以及整体的使用量统计等。每个区域对应一个云服务供应商的一个可用区,如 Amazon US-EAST-1。每个区域独立部署一个控制平面和多个数据平面。控制平面提供该区域内的集群管理(创建、停止、销毁)API 以及计费系统,数据平面则运行用户启动的 MyScale 数据库集群,它们运行在同一个数据平面中的多个可用区。

d3cfaf40d82eebcfb0b3489bed476865.jpeg

MyScale 的所有服务都部署在亚马逊云科技的托管 Kubernetes 服务 EKS 上。EKS 提供了高度可用、安全及可扩展的 Kubernetes 环境,这使得 MyScale 可以充分利用 Kubernetes 的强大功能,如服务发现、负载均衡、自动扩缩容、安全隔离等。借助 Amazon EKS 上的 Cluster Autoscaler,MyScale 可以根据用户工作负载的需求,快速地启动、停止和扩展实例,对 EKS 的节点池进行扩缩容。

为了保证用户集群之间的隔离,MyScale 利用了 Kubernetes 的命名空间(namespace)特性。在数据平面中,用户创建的每个 MyScale 数据库集群对应 Kubernetes 中的一个命名空间,这样就可以最小化集群之间的相互影响。每个集群对应的命名空间中包含数据库节点、负载均衡服务和元数据存储服务。

用户在使用 MyScale 云服务时,可以通过运行在全局控制平面上的 Web UI 来创建和管理 MyScale 集群。用户在 Web UI 创建 MyScale 集群后,云服务的后端会调用相应区域控制平面中的接口,将 MyScale 数据库集群的具体参数和配置转成一个 Kubernetes 中的 CRD 资源配置文件,保存在该区域的控制平面中。对应的区域数据平面中运行的 Cluster Manager 会监听到区域控制平面中数据库集群 CRD 资源的变化情况,并做出相应的操作,在数据平面中创建或修改实际的 MyScale 数据库集群。在 MyScale 数据库集群启动后,用户可以通过 Web UI、Python/Java/NodeJS 客户端、HTTP 接口以及包括 Langchain 和 LlamaIndex 在内的 LLM 应用框架来访问 MyScale 数据库。

我们选择了配备基于 NVMe 的本地 SSD 盘的 EC2 实例来部署 MyScale 数据库。和大部分选择纯内存 HNSW 向量索引算法的向量数据库不同,MyScale 自研的 MSTG 算法允许将向量数据缓存在本地 NVMe SSD 盘中,因此 MyScale 在为用户提供高性能的向量搜索的同时,大大节约了内存的使用。在我们的公开测试中,MyScale 超过了 Pinecone、Weaviate、Qdrant、Zilliz 等专有向量数据库,提供了最佳的性价比(QPS per dollar)。

在部署 MyScale 云服务时,我们使用 Crossplane 来实现对亚马逊云科技上的 EC2 和 EKS 服务的部署和管理。首先,我们通过 Crossplane 的 Amazon Provider 配置了对应的亚马逊云科技账户信息,使得 Crossplane 能够访问和操作我们的亚马逊云科技资源。然后,我们定义了 EC2 和 EKS 的 YAML 配置文件,通过这些文件,我们可以定义我们需要的服务器和 Kubernetes 集群的参数,如实例类型、集群大小等。通过应用这些配置文件,Crossplane 的 Amazon Provider 会调用 Amazon API 来创建和配置这些资源。

不仅如此,Crossplane 还能够定期同步这些资源的状态,使得我们可以通过 Kubernetes 的接口来监控和管理这些资源。当我们需要修改或删除这些资源时,只需要修改对应的 YAML 文件并重新应用,Crossplane 就会自动完成对应的操作。通过使用 Crossplane,我们能够以一种声明式、统一和自动化的方式来管理我们的云资源,大大提升了我们的工作效率和准确性。

在数据安全方面,MyScale 采用了 Teleport,一种先进的远程访问管理系统。Teleport 能够为开发者和运维人员提供通过密文连接安全地访问我们 Kubernetes 集群的能力。这不仅提升了系统的安全性,也提升了操作的便捷性。更重要的是,Teleport 具有全面的审计功能,能够详细记录所有会话和事件,这对于进行安全分析和满足合规性要求非常有帮助。这就意味着我们可以对任何操作有完全的可视化,从而更好地控制和保护 MyScale 云服务系统,为用户提供安全可靠的服务。

小结

这篇文章介绍了 MyScale,一个在亚马逊云科技上托管的向量数据库。MyScale 基于开源的在线分析处理(OLAP)数据库 ClickHouse 开发,集成了自主研发的多尺度树图(MSTG)向量索引算法,可以提供优秀的数据管理和结构化数据查询能力,同时也提供了性价比突出的向量搜索功能,以及结构化和非结构化联合分析、处理的功能,可以被广泛应用于图像检索、视频分析、自然语言理解等 AI 驱动的场景。

本篇作者

f1f6b6f8d42e61927986a22931d6b94f.jpeg

刘勤

刘勤博士是 MyScale 基础设施团队的负责人。之前,他曾在墨奇科技和华为诺亚方舟实验室工作。2016 年,刘勤在吕自成教授(Prof. John C.S. Lui)的指导下获得了香港中文大学(CUHK)计算机科学博士学位。在博士期间,他专注于图计算和流处理系统的研究。2012 年,他毕业于上海交通大学并获得计算机科学学士学位,并且是 ACM 班的成员。他在国际会议与期刊 KDD、VLDB、ICDE、DSN、CIKM 和 IEEE TKDE 上发表过多篇学术论文,并与同伴一起荣获了 2012 年 KDD Cup 冠军。

a080e62ec765eec9696319f4ccaeb271.jpeg

Kelvin Guo

亚马逊云科技资深解决方案架构师。主要技术方向为 MLOps,DevOps,容器,数据分析。20+年软件开发,项目管理,敏捷思想落地,工程效能咨询和落地经验。

fe605863740b56c6ef1799899b307da9.gif

3ac316da559ecaa30038e23b5cadd101.gif

听说,点完下面4个按钮

就不会碰到bug了!

35e82719035deb47477c8b4df6cfd32f.gif

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pnpm无法加载文件 (解决方法 )

现在要运行一个TS的项目,我的电脑上没有安装pnpm,导致我的vscode一直报错无法加载。 pnpm安装: npm install -g pnpm pnpm : 无法加载文件 pnpm : 无法加载文件 C:\Users\HP\AppData\Roaming\npm\pnpm.ps1,因为在此系统上禁止运…

英语略读三

课文的客观,或者逻辑推理 同增通减 比错 对比选项,找一个明显的区别 防并列,文章再说主语在干嘛干嘛的,但是与答案的角度不一样,是并列的关系 在对比选项,不是证明正确的 具体问题具体分析,but…

【30天熟悉Go语言】10 Go异常处理机制

作者:秃秃爱健身,多平台博客专家,某大厂后端开发,个人IP起于源码分析文章 😋。 源码系列专栏:Spring MVC源码系列、Spring Boot源码系列、SpringCloud源码系列(含:Ribbon、Feign&…

[Linux]文件IO

文章目录 1. 文件描述符1.1 虚拟地址空间1.1.1 存在的意义1.1.2 分区 1.2 文件描述符1.2.1 文件描述符1.2.2 文件描述符表 2. Linux系统文件IO2.1 open/close2.1.1 函数原型2.1.2 close函数原型2.1.3 打开已存在文件2.1.4 创建新文件2.1.5 文件状态判断 2.2 read/write2.2.1 re…

Spring Boot(Vue3+ElementPlus+Axios+MyBatisPlus+Spring Boot 前后端分离)【四】

😀前言 本篇博文是关于Spring Boot(Vue3ElementPlusAxiosMyBatisPlusSpring Boot 前后端分离)【四】,希望你能够喜欢 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章…

VMware虚拟机连不上网络

固定ip地址 进入网络配置文件 cd /etc/sysconfig/network-scripts 打开文件 vi ifcfg-ens33 编辑 BOOTPROTO设置为static,有3个值(decp、none、static) BOOTPROTO"static" 打开网络 ONBOOT"yes" 固定ip IPADDR1…

为什么需要websocket?

一、为什么需要websocket? 前端和后端的交互模式最常见的就是前端发数据请求,从后端拿到数据后展示到页面中。如果前端不做操作,后端不能主动向前端推送数据,这也是http协议的缺陷。 因此,一种新的通信协议应运而生---…

【滑动窗口】leetcode1004:最大连续1的个数

一.题目描述 最大连续1的个数 这道题要我们找最大连续1的个数,看到“连续”二字,我们要想到滑动窗口的方法。滑动窗口的研究对象是一个连续的区间,这个区间需要满足某个条件。那么本题要找的是怎样的区间呢?是一个通过翻转0后得到…

抖音web主页视频爬虫

需要抖音主页视频爬虫源码的发私信,小偿即可获得长期有效的采集程序。 比构造 s_v_web_id 验证滑块的方法更快,更稳定。

JVM理论知识

一、JVM内存结构 java的内存模型主要分为5个部分,分别是:JVM堆、JVM栈、本地栈、方法区还有程序计数器,他们的用途分别是: JVM堆:新建的对象都会放在这里,他是JVM中所占内存最大的区域。他又分为新生区还…

2022年09月 C/C++(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题&#xff1a;最长上升子序列 一个数的序列bi&#xff0c;当b1 < b2 < … < bS的时候&#xff0c;我们称这个序列是上升的。对于给定的一个序列(a1, a2, …, aN)&#xff0c;我们可以得到一些上升的子序列(ai1, ai2, …, aiK)&#xff0c;这里1 < i1 < i2 &…

【中危】Apache Ivy<2.5.2 存在XXE漏洞 (CVE-2022-46751)

漏洞描述 Apache Ivy 是一个管理基于 ANT 项目依赖关系的开源工具&#xff0c;文档类型定义(DTD)是一种文档类型定义语言,它用于定义XML文档中所包含的元素以及元素之间的关系。 Apache Ivy 2.5.2之前版本中&#xff0c;当解析自身配置、Ivy 文件或 Apache Maven 的 POM 文件…

设计模式--适配器模式(Adapter Pattern)

一、什么是适配器模式&#xff08;Adapter Pattern&#xff09; 适配器模式&#xff08;Adapter Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许将一个类的接口转换成客户端所期望的另一个接口。适配器模式主要用于解决不兼容接口之间的问题&#xff0c;使得原本…

leetcode:338. 比特位计数(python3解法)

难度&#xff1a;简单 给你一个整数 n &#xff0c;对于 0 < i < n 中的每个 i &#xff0c;计算其二进制表示中 1 的个数 &#xff0c;返回一个长度为 n 1 的数组 ans 作为答案。 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;[0,1,1] 解释&#xff1a; 0…

RedisDesktopManager(redis客户端,可输入用户名密码)

RedisDesktopManager&#xff08;redis客户端&#xff0c;可输入用户名密码&#xff09; Redis桌面管理器&#xff08;又名RDM&#xff09; - 是一个用于Windows&#xff0c;Linux和MacOS的快速开源Redis数据库管理应用程序。可以使用url连接或账号密码。 redis设置账号密码后…

[论文阅读笔记26]Tracking Everything Everywhere All at Once

论文地址: 论文 代码地址: 代码 这是一篇效果极好的像素级跟踪的文章, 发表在ICCV2023, 可以非常好的应对遮挡等情形, 其根本的方法在于将2D点投影到一个伪3D(quasi-3D)空间, 然后再映射回去, 就可以在其他帧中得到稳定跟踪. 这篇文章的方法不是很好理解, 代码也刚开源, 做一…

嵌入式设备应用开发(发现需求和提升价值)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 很多做技术的同学,都会陷入到技术的窠臼之中。对于如何做具体的产品、实现具体的技术,他们可能很感兴趣。但是做出来的东西做什么用,或者说是有没有竞争力,事实上他们不是很关心…

身为一个后端程序员如何快速制作后端管理系统的UI

前言 我的专业领域在后端开发上&#xff0c;前端我仅仅是熟悉&#xff0c;但是要从头开发一个前端UI界面有点难为人了。那么身为一个后端程序员我们怎么来开发后端管理系统UI界面呢&#xff1f; 方案1&#xff1a;现成的模版来套&#xff08;有一定的前端基础&#xff0c;只是…

搭建开发环境-Mac

概述 上一篇搭建开发环境-WSLUbuntu 记录了WSL 和Ubuntu 下开发环境的搭建。这一篇就说下Mac开发环境的搭建。 就像很多人误以为Mini 是专为女孩子设计的高颜值车&#xff0c;其实是一辆极其hardcore 的拉力车一样。 很多人都被Mac 那高颜值蒙蔽了&#xff0c;其实这是一台生产…

基于swing的旅游管理系统java jsp旅行团信息mysql源代码

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 基于swing的旅游管理系统 系统有1权限&#xff1a;管…