共计 7529 个字符,预计需要花费 19 分钟才能阅读完成。
新数据库时代,数据库畛域有哪些新技术、新利用?谁将扭转数据库的游戏规则?
热爱浏览科技杂志的 Z 宝,刚刚收到了登载了 Zilliz 长篇署名文章的《新程序员》!
棘手一翻,Z 宝不禁感叹 CSDN 策动出品的这期杂志几乎是众星星散:2020 年图灵奖得主 Jeffrey Ullman、2018 年图灵奖得主 Yann LeCun、MongoDB CTO Mark Porter、OceanBase 创始人杨振坤、TiDB 创始人黄东旭⋯⋯ 60 余位大咖分享技术前沿动向!
将来 80% 的数据是非结构化的,然而传统的数据分析伎俩很难开掘非结构化数据中所蕴含的信息,也没法对这些信息进行对立的示意。如何深刻了解这些辣手的「新数据」?Zilliz 研发工程团队「三剑客」郭人通、栾小凡、易小萌独特撰文,探讨了面向 AI 的通用向量数据库的设计和实际,以及以后次要的技术挑战。、
以下是三位的长文干货,快和 Z 宝一起浏览他们的思维结晶吧:
面向 AI 的通用向量数据库系统设计及实际
导读
古代数据利用面临着这样一种困境,对于占比不到 20% 的传统结构化数据,具备丰盛且成熟的根底软件栈。但对于超过 80% 的非结构化数据却还存在着微小空洞。本文基于此深入探讨了传统数据分析伎俩开掘非结构化数据的痛点,由此进行了面向 AI 的通用向量数据库系统设计及实际,及其以后面临的次要技术挑战。
作者简介
郭人通,Zilliz 合伙人、研发总监,华中科技大学计算机软件与实践博士,CCF 分布式计算与零碎专委会委员。次要工作畛域为数据库、分布式系统、缓存零碎、异构计算,相干研究成果在 SIGMOD, USENIX ATC, ICS, DATE, IEEE TPDS 等国内顶级会议与期刊上发表。目前致力于摸索面向 AI 的大型数据库系统技术,是 Milvus 我的项目的零碎架构师。
栾小凡,Zilliz 合伙人、工程总监,LF AI & Data 基金会技术咨询委员成员,康奈尔大学计算机工程硕士。他先后任职于 Oracle 美国总部、软件定义存储守业公司 Hedvig、阿里云数据库团队,曾负责阿里云开源 HBase 和自研 NoSQL 数据库 Lindorm 的研发工作。
易小萌,Zilliz 高级研究员、钻研团队负责人,华中科技大学计算机系统构造博士。次要工作畛域为向量近似搜索算法和分布式系统的资源调度,相干研究成果在 IEEE Network Magazine, IEEE/ACM TON, ACM SIGMOD, IEEE ICDCS, ACM TOMPECS 等计算机领域国内顶级会议与期刊上发表。
AI 时代的数据改革
随着 5G、IoT 技术的高速倒退,各行业都在着手构建丰盛的数据采集通路,咱们正在把事实世界更加平面地投射到数字空间。这给产业降级带来了微小红利,同时也带来了严厉挑战。其中最辣手的一个问题就是,如何深刻地了解这些“新数据”?
据 IDC 统计,在 2020 年这一年中,寰球共产生了超过 40,000Exabytes 的新数据。其中,80% 以上都是非结构化数据,结构化数据占比不到 20%。结构化数据的次要单元是数值与符号,数据类型高度形象且易于组织。基于数值运算与关系代数,能够轻松地对结构化数据进行剖析。与之相比,非结构化数据在数据状态和语义内容等方面都体现得异样丰盛,常见的类型包含文本、图像、音频、视频,也包含畛域相干的类型,如病毒代码、社交关系、时空数据、化合物构造、点云等。
传统的数据分析伎俩难以开掘非结构化数据中所蕴含的信息,也没方法对这些信息进行对立的示意。侥幸的是,咱们当初同时经验“非结构化数据”与“人工智能”两场改革,各类神经网络为咱们提供了了解非结构化数据的路径。如图 1 所示,通过神经网络,能够无效地将非结构化数据中的信息编码成向量。
图 1 数据结构化过程
Embedding 这类技术由来已久,在 Word2vec 呈现当前迅速流行起来。倒退到当初,“万物皆可 embedding”这种讲法曾经开始大行其道。这样,就呈现了两个次要的数据层。底层是原始数据层,包含非结构化数据和局部结构化数据。通过各类神经网络的 embedding,在原始数据层之上又造成了一个新的数据层,这个数据层中的信息次要以向量的形式存在。
向量化的数据层具备一系列很好的性质:
- Embedding 向量是一种形象的数据类型,针对形象的数据类型能够构建对立的代数零碎,从而防止非结构化数据丰盛的状态所带来的复杂性;
- Embedding 向量的物理示意是一种浓密的浮点数向量,这有助于利用古代处理器的 SIMD 能力晋升数据分析速度,升高均匀算力老本;
- Embedding 向量这种信息编码模式,通常比原始的非结构化数据要小得多,占用存储空间更低,并能提供更高的信息传输效率。
- Embedding 向量也有与其对应的算子零碎,最罕用的算子是语义近似匹配。图 2 给出了一个跨模态语义近似匹配的例子。须要留神的是,图中给出的是匹配的后果。在具体运算过程中,文字和图片都会被映射到同一个 Embedding Space,在这个空间内进行向量化的语义近似剖析。
图 2 基于多模态神经语言模型的可视化语义嵌入
除此之外,还有语义上的加法操作,如图 3 所示的例子。
图 3 基于多模态神经语言模型的统一化视觉语义嵌入
除了上述玩具性的性能,在理论利用场景中,这些算子还能够反对很简单的查问语句。举荐零碎是一个比拟典型的例子,它所用到的数据次要是用户行为、内容两大类。通常会对每个内容及用户的浏览偏好进行 embedding,通过对用户偏好与内容间的向量进行语义类似度剖析,就能够答复这样的查问语句:“一个用户在刷下一批新的内容时,哪些是他当初最想看的?”除此之外,向量数据层上的利用还包含电商、病毒代码检测、数据去重、生物特色验证、化学分子式剖析、金融、保险等。
非结构化数据须要欠缺的根底软件栈
数据利用的根底是系统软件,在过来半个多世纪里,咱们所构建的数据系统软件,如数据库、数据分析引擎等,次要都是面向结构化数据。但从上文例举的利用场景不难看出,新兴的数据利用将以非结构化数据作为数据根底,并以 AI 作为运算伎俩。这些数据根底与运算伎俩,在传统的数据根底软件的构建过程中还未呈现,因而这些内容也很难被思考到零碎的设计中。
古代的数据利用面临了这样一种困境——面向占比不到 20% 的传统结构化数据,咱们领有丰盛且成熟的根底软件栈;但对于超过 80% 的非结构化数据,根底软件的摸索才刚刚开始,在产业界的数据利用中呈现了微小的根底软件空洞。
为了应答这个问题,咱们研发出了一个面向 AI 的通用向量数据库系统,命名为“Milvus”并将其开源(见参考资料 1~2)。与传统的数据库系统相比,它作用于不同的数据层。传统的数据库,如关系数据库、KV 数据库、文本数据库、图像 / 视频数据库都作用于原始数据层,而 Milvus 则作用于其上的向量化数据层,解决 Embedding 向量的存储与剖析问题。
在后续的几个章节中,咱们将联合本身在我的项目中的思考及实践经验,和大家聊一聊这种面向 AI 与非结构化数据的向量数据库应该具备哪些个性、须要怎么的零碎架构,以及面临着哪些技术挑战。
向量数据库的次要个性
向量数据库,顾名思义,首先解决的是向量存储、检索和剖析的问题。其次,作为一个数据库,须要提供规范的拜访接口和数据插入查问删除更新的能力。除了这些“规范”的数据库能力外,一个好的向量数据库还应该具备以下个性:
- 高效反对向量算子
剖析引擎中对向量算子的撑持次要在两个层面。首先是算子类型,如上述的“语义相似性匹配”、“语义上的加法”等算子,其次是对相似性度量的反对。向量算子在底层执行的过程中都须要对“相似性”进行无效度量。这种相似性通常会被量化到空间上数据之间的间隔,常见的间隔量化形式包含欧式间隔、余弦间隔、内积间隔等。 - 向量索引能力
相比传统数据库基于 B 树、LSM 树等构造索引,高维向量索引往往计算量更大,属于计算密集型场景。在索引算法层面,多采纳聚类、图等技术。运算层面,以矩阵运算、向量为主。因而,充沛开掘古代处理器的向量减速能力,对于升高向量数据库的算力老本至关重要。 - 跨部署环境的统一应用体验
向量数据库通常会有不同的部署环境,这是由数据迷信流程决定的。在后面阶段,数据科学家、算法工程师用零碎次要是笔记本或工作站,因为他们关注验证速度和迭代速度。验证好后就须要部署,这就对应着公有集群或云上的大规模部署。因而,须要在不同的部署环境中都能让零碎具备良好的体现。 - 反对混合查问
近年来,随着向量数据库的一直倒退,越来越多的新需要涌现进去。其中最常见的一个需要就是其余数据类型和向量混合查问,比方基于标量过滤后再执行最近邻查问,基于全文检索和向量检索相结合的多路召回,以及时空时序数据和向量数据的联合。这要求向量数据库具备更加灵便的扩大能力以及更智能的查问优化,使向量引擎能够与 KV 引擎、文本检索引擎等进行高效合作。 - 云原生
随着非结构化数据规模快速增长,向量数据的体量也在一直增长,千亿规模的高维向量对应着数百 TB 级别的存储。这种存储规模远远超过了单机所能承当的范畴,因而,横向扩大能力对于向量数据库而言也就变得十分重要。一个成熟的向量数据库应该满足用户对弹性和部署敏捷性的要求,借助云基础设施升高零碎运维的复杂度,晋升可观测性。此外,用户对于多租户隔离、数据快照和备份、数据加密、数据可视化等传统数据库能力也提出了越来越高的需要。
向量数据库的零碎架构
目前,Milvus 已演进至 2.0 版本,其设计遵循日志即数据、流批一体、无状态化和微服务化的准则,整体架构设计可参见图 4。
图 4 向量数据库整体零碎架构设计图
首先咱们来看日志即数据,在 2.0 版本中没有保护物理上的表,而是通过日志长久化和日志快照来保证数据的可靠性。日志零碎作为零碎的骨干,承当了增量数据长久化和解耦的作用。通过日志的公布 - 订阅机制,将零碎的读、写组件解耦。如图 5 所示,整个零碎次要由两个角色形成,别离是“日志序列(Log Sequence)”与“日志订阅者(Log Subscriber)”。其中的“日志序列”记录了所有扭转库表状态的操作,“日志订阅者”通过订阅日志序列更新本地数据,以只读正本的形式提供服务。公布 - 订阅机制的呈现也给零碎预留了很大的拓展空间,便于 Change data capture(CDC)、寰球部署等性能的拓展。
图 5 日志存储简化模型
再看流批一体化,借助日志流实现数据的实时更新,保证数据的实时可达。再将数据批量转换成日志快照,通过对日志快照构建向量索引实现更高的查问效率。查问时,通过合并增量数据和历史数据的查问后果,保障用户能够获取残缺的数据视图。这种设计较好地满足了实时性和效率的均衡,升高了传统 Lambda 架构下用户保护离 / 在线两套零碎的累赘。
第三个设计准则是无状态化。借助云基础设施和开源存储组件,实现本身组件不须要保证数据的长久化。以后,Milvus 的数据长久化依赖三种存储,别离为元数据存储、音讯存储和对象存储。常见的元数据存储如 Etcd、Zookeeper,次要负责元信息的长久化和服务发现、节点治理。音讯存储如 Kafka、Pulsar,次要负责增量数据的长久化和数据的公布订阅。对象存储如 S3、Azure Blob、MinIO,次要负责用户日志快照、索引以及一些两头计算结果的存储。
最初是微服务化,其严格遵循数据流和控制流拆散、读写拆散、离线和在线工作拆散。整体分为四个档次,别离为接入服务、协调服务、执行服务和存储服务。各个档次互相独立,独立扩大和容灾。接入层作为零碎的门面,次要负责解决客户端链接,进行申请检查和转发。协调服务作为零碎的大脑,负责集群拓扑治理、负载平衡、数据申明和治理。执行节点作为零碎的四肢,负责执行数据更新、查问和索引构建等具体操作。存储层作为零碎的骨骼,次要负责数据自身的长久化和复制。微服务化的设计保障了可控的复杂度,每一个组件专一于绝对繁多的性能。通过定义良好的接口清晰地表述服务边界,更细粒度的拆分也有利于更加灵便的扩大和更准确的资源分配。
向量数据库的技术挑战
在向量查问畛域,以往的钻研工作次要专一于高效率向量索引构造和查询方法的设计,与之绝对应的业界主流产品为各式各样的向量搜索算法库(见参考资料 3~5)。近年来,越来越多的学者和业界团队开始从零碎设计的角度去扫视和思考向量查问问题,并逐步产生了一些针对向量搜寻问题系统化的解决方案。通过对现有工作以及用户需要的总结,大抵上能够将向量数据库系统的次要技术挑战分为以下三个方面:
- 针对负载个性的老本 - 性能优化
因为向量数据的高维个性,其剖析过程绝对传统数据类型具备更高的存储和计算成本。另一方面,不同用户的向量查问负载个性以及老本 - 性能偏好往往是不尽相同的。例如,局部用户的数据规模微小,达到了百亿甚至千亿级别。此类用户通常须要较低成本的数据存储计划,同时可能容忍肯定的查问提早。另外也存在一些用户对查问性能十分敏感,通常要求单条查问的提早稳固放弃在若干毫秒。为了满足不同用户的偏好,向量数据库的外围索引组件须要有能力将索引构造和查问算法与不同类型的存储和计算硬件进行适配。
例如,为了升高存储老本,须要思考将向量数据和索引构造存储在比内存更为便宜介质中(如 NVM 和 SSD)。然而,现有的向量搜索算法简直都是基于数据能够齐全驻留在内存中而设计的。为了尽量避免应用 NVM 或 SSD 带来的性能损失,须要联合搜索算法充沛开掘和利用数据拜访局部性,并联合存储介质个性对数据和索引构造的存储形式进行调整(见参考资料 6~8)。对于查问性能敏感的用户,目前支流的摸索方向为应用 GPU、NPU、FPGA 等专有硬件加速查问过程(见参考资料 9)。然而,不同减速硬件和专有芯片的结构设计均不雷同,如何联合这些硬件的个性对高效地执行向量索引申请目前仍是一个尚未良好解决的问题。
- 智能化系统配置与调优
现有的几种支流向量查问算法都是在存储老本、计算性能以及查问准确度之间寻求不同的平衡点,算法的理论体现通常由算法参数和数据个性独特决定。思考到用户对于向量查问老本和性能要求的差异性,如何针对用户需要以及数据个性为其抉择适合的向量查询方法便成为了一个重要问题。
然而,因为向量数据的高维个性,使得人工办法通常难以无效剖析数据分布个性对查问算法的影响。针对这一问题,学术界和工业界目前次要尝试应用基于机器学习的办法为用户举荐适合的算法配置(见参考资料 10)。
另一方面,联合机器学习技术的智能向量查问算法设计也是钻研的一个热门话题。以后的向量查问算法通常是在假如不晓得向量数据个性的状况下进行设计的。这类算法具备较强的通用性,可能应答不同维度数量、不同散布类型的向量数据。绝对应的,它们无奈依据用户数据的个性进行针对性的索引结构设计,也就无奈再进一步开掘和利用其中的优化空间。如何应用机器学习办法无效地为不同用户数据量身定制索引构造是一个值得摸索的重要问题(见参考资料 11~12)。
- 对丰盛查问语义的反对
随着各行各业数字化过程逐步成熟,古代利用对数据的查问逻辑呈现出了多样化和多元化的趋势。一方面对向量数据查问语义在不同利用中存在多样性,正逐步超过传统近邻查问的领域。另一方面,对于多个向量数据联结搜寻,以及向量数据和非向量数据的综合查问需要也在逐步产生(见参考资料 13)。
具体而言,对于向量数据查问,向量相似性的评估指标变得更加多样。传统的向量查问通常应用欧式间隔、内积以及余弦间隔作为向量的类似度指标。随着 AI 技术在各行各业的遍及,一些畛域特定的向量类似指标,如谷本间隔、马氏间隔以及用于计算化学分子超构造和子结构的间隔指标正逐步涌现。如何在现有的查问算法中无效地反对这些评估指标或相应地设计新型的检索算法成为了亟待钻研的重要问题。
另一方面,随着用户业务的日益简单,利用中对数据的查问通常蕴含了多个向量数据和非向量数据。例如,在为用户进行内容举荐时,通常须要联合用户集体的趣味特色、用户的社交关系以及以后的热门话题进行综合性的剖析和抉择。此类查问通常须要联合多种数据查询方法,甚至通过多个数据处理系统交互实现,如何高效灵便地反对此类查问也是一个具备重要钻研价值的问题。
参考资料
- Milvus Project: https://github.com/milvus-io/…
- Milvus: A Purpose-Built Vector Data Management System, SIGMOD’21
- Faiss Project: https://github.com/facebookre…
- Annoy Project: https://github.com/spotify/annoy
- SPTAG Project: https://github.com/microsoft/…
- GRIP: Multi-Store Capacity-Optimized High-Performance Nearest Neighbor Search for Vector Search Engine, CIKM’19
- DiskANN: Fast Accurate Billion-point Nearest Neighbor Search on a Single Node, NIPS’19
- HM-ANN: Efficient Billion-Point Nearest Neighbor Search on Heterogeneous Memory, NIPS’20
- SONG: Approximate Nearest Neighbor Search on GPU, ICDE’20
- A demonstration of the ottertune automatic database management system tuning service, VLDB’18
- The Case for Learned Index Structures, SIGMOD’18
- Improving Approximate Nearest Neighbor Search through Learned Adaptive Early Termination, SIGMOD’20
- AnalyticDB-V: A Hybrid Analytical Engine Towards Query Fusion for Structured and Unstructured Data, VLDB’20
Zilliz 以从新定义数据迷信为愿景,致力于打造一家寰球当先的开源技术创新公司,并通过开源和云原生解决方案为企业解锁非结构化数据的暗藏价值。
Zilliz 构建了 Milvus 向量数据库,以放慢下一代数据平台的倒退。Milvus 是 LF AI & Data 基金会的毕业我的项目,可能治理大量非结构化数据集,在新药发现、举荐引擎、聊天机器人等方面具备宽泛的利用。