如何基于亚马逊云科技打造高性能的 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.rhkb.cn/news/104250.html

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

相关文章

搭建Tomcat HTTP服务:在Windows上实现外网远程访问的详细配置与设置教程

文章目录 前言1.本地Tomcat网页搭建1.1 Tomcat安装1.2 配置环境变量1.3 环境配置1.4 Tomcat运行测试1.5 Cpolar安装和注册 2.本地网页发布2.1.Cpolar云端设置2.2 Cpolar本地设置 3.公网访问测试4.结语 前言 Tomcat作为一个轻量级的服务器,不仅名字很有趣&#xff0…

Qt 阴影边框

阴影边框很常见,诸如360以及其他很多软件都有类似效果,了解CSS3的同学们应该都知道box-shadow,它就是来设定阴影效果的,那么Qt呢?看过一些资料,说是QSS是基于CSS2的,既然如此,box-sh…

SQL注入读写文件

文章目录 条件利用SQL注入漏洞读取hosts文件查看文件读写权限安全选项允许导入导出读取hosts文件 利用SQL注入漏洞写入一句话木马,并用蚁剑连接webshell写入文件 条件 SQL注入有直接SQL注入,也有文件读写时的注入,后者的主要 目的在于获取web…

远程办公中安全远程访问解决方案

什么是安全远程访问 安全的远程访问是一个至关重要的过程,可让您使用互联网从远处完全控制某人的设备。为了确保安全,为受保护的远程访问采取了额外的身份验证和加密措施。 为什么安全远程访问解决方案很重要 当 IT 技术人员从远处帮助人们解决计算机…

JMeter分布式集群---部署多台机器进行性能压力测试

有些时候,我们在进行压力测试的时候,随着模拟用户的增加,电脑的性能(CPU,内存)占用是非常大的,为了我们得到更加理想的测试结果,我们可以利用jmeter的分布式来缓解机器的负载压力,分…

mysql 、sql server 游标 cursor

游标 声明的位置 游标必须在声明处理程序之前被声明,并且变量和条件还必须在声明游标或处理程序之前被声明 游标的使用步骤 声明游标打开游标使用游标关闭游标 (sql server 关闭游标和释放游标) sql server 游标 declare my_cursor curs…

adb shell setprop 、开发者选项

App性能调试详解 Android App性能监控工具 更多系统属性参考 一、开启 GPU Render 的profiling bar: Gpu渲染速度 adb shell setprop debug.hwui.profile true adb shell setprop debug.hwui.profile visual_bars adb shell setprop debug.hwui.profile visual…

docker-maven-plugin直接把镜像推到私有仓库

接着上篇 推送到本地docker 我们已经把服务做成镜像推到docker&#xff0c;也可以通过docker login 私有地址&#xff0c;去push。麻烦 直接上代码 1、pom改动 <properties><docker.registry>eco-registry.XXX.com</docker.repostory><docker.registry…

rust actix-web定义中间件(middleware)记录接口耗时(接口耗时中间件和鉴权中间件)

文章目录 Actix-web定义中间件(middleware)记录接口耗时中间件简介中间件添加的两种方式&#xff08;接口耗时中间件&#xff09;使用wrap_fn 闭包实现使用warp struct实现中间件调用顺序actix自带的接口耗时中间件 鉴权中间件 Actix-web定义中间件(middleware)记录接口耗时 …

cortex-A7核IIC实验--STM32MP157AAA

实验目的&#xff1a;采集温湿度传感器值 一&#xff0c;IIC概念 1.同步串行半双工总线&#xff0c;主要用于链接整体电路&#xff0c;硬件结构简单&#xff0c;接口连接方便&#xff0c;成本较低 2.两线制&#xff0c;只有两根双向信号线&#xff0c;数据线SDA,时钟线SCL …

基于AWS的3D模型搜索服务实现

3D模型广泛应用于计算机游戏、电影、工程、零售业、广告等许多领域。市场上有很多制作3D模型的工具&#xff0c;但几乎没有工具可以直观地搜索3D模型数据库以找到类似的3D模型 因为开发好的 3D 模型搜索工具非常具有挑战性。 它需要复杂的计算和 AI/ML 框架来创建模型描述符并提…

【React源码实现】元素渲染的实现原理

前言 本文将结合React的设计思想来实现元素的渲染&#xff0c;即通过JSX语法的方式是如何创建为真实dom渲染到页面上&#xff0c;本文基本不涉及React的源码&#xff0c;但与React的实现思路是一致的&#xff0c;所以非常适合小白学习&#xff0c;建议跟着步骤敲代码&#xff…

Docker consul的容器服务注册与发现

前言一、服务注册与发现二、consul 介绍三、consul 部署3.1 consul服务器3.1.1 建立 Consul 服务3.1.2 查看集群信息3.1.3 通过 http api 获取集群信息 3.2 registrator服务器3.2.1 安装 Gliderlabs/Registrator3.2.2 测试服务发现功能是否正常3.2.3 验证 http 和 nginx 服务是…

CRM系统如何定制?定制哪些功能?

虽然市场上有许多成熟的CRM系统供企业选择&#xff0c;但很多时候&#xff0c;现有的标准化CRM系统无法满足企业的特殊需求。这时就需要进行CRM系统定制。那么&#xff0c;什么时候需要CRM系统定制&#xff0c;CRM系统定制怎么弄&#xff1f;下面我们就说一说。 什么时候需要C…

缓存的设计方式

问题情况&#xff1a; 当有大量的请求到内部系统时&#xff0c;若每一个请求都需要我们操作数据库&#xff0c;例如查询操作&#xff0c;那么对于那种数据基本不怎么变动的数据来说&#xff0c;每一次都去数据库里面查询&#xff0c;是很消耗我们的性能 尤其是对于在海量数据…

【Winform学习笔记(九)】Winform窗体程序延迟函数

Winform窗体程序延迟函数 前言正文1、具体代码2、使用示例 前言 Winform 窗体程序开发时&#xff0c;有时需要程序延迟或休眠几秒&#xff0c;如果直接使用 Thread.Sleep() 方法&#xff0c;会造成程序的假死&#xff0c;UI 界面停止响应&#xff1b; 本文中主要介绍一种方法&…

VB.NET调用VB6封装在OCX控件中的函数

将功能函数封装于OCX之中在VB6平台上可以简单化&#xff0c;在默认模板中直接考贝贴入那些函数即可。在博文【将《VB6编程IEEE浮点算法实践》中的Function封装成OCX】将《VB6编程IEEE浮点算法实践》中的Function封装成OCX_Mongnewer的博客-CSDN博客中对VB6的OCX封装做了具体实践…

keepalived+lvs(DR)(四十六)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、作用 二、调度器配置 三、web节点配置 一、作用 使用keepalived解决lvs的单点故障 高可用集群 二、调度器配置 安装keepalived yum install -y k…

OVRL-V2: A simple state-of-art baseline for IMAGENAV and OBJECTNAV 论文阅读

论文信息 题目&#xff1a;OVRL-V2: A simple state-of-art baseline for IMAGENAV and OBJECTNAV 作者:Karmesh Yadav&#xff0c; Arjun Majumdar&#xff0c; Ram Ramrakhya 来源&#xff1a;arxiv 时间&#xff1a;2023 代码地址&#xff1a; https://github.com/ykarmesh…

whisper 语音识别项目部署

1.安装anaconda软件 在如下网盘免费获取软件&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1zOZCQOeiDhx6ebHh5zNasA 提取码&#xff1a;hfnd 2.使用conda命令创建python3.8环境 conda create -n whisper python3.83.进入whisper虚拟环境 conda activate whisper4.…