2024-12-0608:30发布于浙江阿里技术官方账号
阿里妹导读
背景
韦伯总结了现代社会的四个本质特征,其中很重要的一点,现代社会是一个祛魅社会,其本质就是科学性。科学性在于可证伪性,不可证伪的不能称为科学理论,从而用科学理论驱散了世界的神秘主义。类比于此,现代数据技术最大的特征也可以说是祛魅,通过数据范式解除了数据的桎梏,使得应用程序达到了“心无桎梏,身无藩篱”的自在境界。
本文将会介绍现代数据技术如何对数据祛魅,重点不会侧重于数据库技术的演进,而是侧重于从应用视角来审视数据库功能和数据架构的演进。借用时髦的观点,现代应用的数据范式是一个从大数据到大模型的数据范式。
现代应用的数据特征及其挑战
现代数据具有4V特性,规模性(Volume)、高速性(Velocity)、多样性(Variety)、价值低(Value)。规模性表示数据量的爆炸性增长,使得单机数据库达到性能瓶颈和容量瓶颈;高速性表示数据产生和处理的速度要快,本质是业务系统对数据实时性的诉求;多样性表示数据类型的多种多样,从结构化数据、到半结构化数据和非结构化数据,本质是业务系统对异构数据存储的诉求;价值低表示数据的总体价值大,但价值密度低,本质是业务系统对数据成本和数据分析提出的诉求。
数据4V特性对企业数据基础设施带来了很大的挑战,传统数据架构很难应对这些挑战。企业必须升级其数据基础设施以能够很好的存储、检索和分析现代数据,从而释放数据的商业价值。
现代应用对数据技术提出了如下挑战:
下面章节将尝试回答现代数据架构如何解决以上挑战,如果本次没讲清楚,且听下回补充。
数据存储的挑战——从信息化时代到大数据时代
传统关系型数据库
数据库作为应用程序存储和检索数据的核心工具,在信息化时代得到了蓬勃发展。关系模型由于其易理解性和完备的数学理论基础从层次模型和网状模型中脱颖而出,成为传统数据库的主流数据模型。关系模型将现实世界中的实体抽象为一张张表格,通过表格之间的关联关系来描绘实体间的联系。在Codd发表了《ARelationalModelofDataforLargeSharedDataBanks》论文后,诞生了一系列伟大的关系型数据库产品,例如Oracle、MySQL、SQLServer等。关系型数据库的最大价值在于将应用代码和数据库物理存储结构解耦,这种耦合在论文中被称为“DataDependencies”。
关系型数据库是一项非常成功的数据管理技术,以行和列的方式组织数据,ACID和SQL是其最显著的特性。ACID提供了数据持久化、数据完整性、事务等特性。SQL是基于关系代数的查询语言,具有复杂语义的表达能力,能够提供复杂的查询能力(例如join、聚合、排序等),并为业界广泛接受和运用。
NoSQL的兴起
随着应用数据量的爆炸式增长和应用模型的复杂化,传统关系型数据库遇到了诸多局限和限制:应用开发者需要为海量数据量进行架构升级,需要处理业务数据与数据库关系模型日益不匹配的问题。这些局限与限制引入了极大的架构升级成本和业务逻辑复杂度,应用开发者将大量精力消耗在业务逻辑以外的地方,这些额外消耗使得应用架构和数据库产品发生了转变。应用架构方面,由数据作为集成点,转变为将数据封装到应用程序中并以服务作为集成点,也就是从数据集成到服务集成的转变。数据库产品方面,促进了数据模型的转变,并产生了诸多不同于传统关系型数据库的NoSQL产品。
Dynamo是一个内置容错能力的分布式KV存储系统,面向只需主键访问的业务场景,使用一致性hash将数据按主键分布和复制到多个节点上。通过数据版本和应用辅助的方式控制数据访问的一致性,从而提供了松散的一致性语义—最终一致性。综上,Dynamo通过在某些容灾场景下(网络分区或服务器故障)牺牲数据一致性的方式提供了“alwayswriteable”的服务可靠性,这就是Dynamo要解决的Amazon电商业务遇到的大规模集群的可靠性挑战,从而可以服务于mission-critical的核心业务场景。
BigTable是一个管理结构化数据的分布式存储系统,它维护了稀疏的、分布式的、持久化的、多维的、有序健值对,并提供了多种数据访问的模式(相比而言,Dynamo只提供了主键访问的模式)。BigTable支持单行事务,从而允许对单行数据执行原子的“读-修改-写”的序列操作和单行多列操作。BigTable将各列数据排序存储,并按范围分布到多个节点上,通过lsm-tree提供极高的写入吞吐量,通过COW技术提高读写性能,通过自动分区分裂实现容量的水平伸缩性。综上,这就是BigTable要解决的大规模数据量场景下存储系统的扩展性挑战,从而可以可靠的在数千台机器上处理PB级的数据。
Dynamo和BigTable都是为了解决各自业务场景所遇到的数据挑战而提出的,两者都有着丰富的设计思路和技术实现。这些设计和实现为后续的很多NoSQL产品所借鉴,并经常搭配使用,从而解决业务场景的各种挑战。例如HBase借鉴了BigTable的数据模型、Cassandra借鉴了BigTable的数据模型和Dynamo的分布式设计。
主要的非关系模型有KV模型、宽表模型、文档模型、图模型、时序模型等:
NoSQL本质上舍弃了传统关系型数据库的一些功能,从而可以实现更加灵活的特性。这些丰富的灵活的特性简化了应用程序的数据操作,极大简化了业务逻辑。NoSQL并不是某种特定的数据库产品,甚至没有一个明确的定义,而是一种区别于传统关系型数据库的数据模型和数据管理模式,社区赋予了其更包容和多样化的含义。借用《NoSQLDistilled》中总结的NoSQL的共同特征:
从应用程序视角,NoSQL等同于“NonRelational”或者“NonTransactional”,意味着灵活的数据模型和访问接口、可定义的放松的数据一致性,从而提供了关系型数据库以外的另一种选择。且其运行于分布式集群之上,天然具备极好的水平扩展性,能够更好的适用于大数据场景。数据库产品面向OLTP业务需要提供的特性可以总结为三类:ACID、水平扩展性、数据模型灵活性,NoSQL和关系型数据库各有擅长:
因此,关系型数据库与NoSQL具备非常好的特性互补,应用程序往往搭配使用并形成了标准的数据架构。关系型数据库提供ACID能力,保证数据持久性和数据完整性,用于mission-critical的关键业务场景。NoSQL提供水平扩展性和灵活数据模型,用于创新场景和大数据场景。两者间的数据划分,可以由应用程序分别写入,也可以通过eventstream/changestream的方式从关系型数据库流向NoSQL。
NoSQL对于应用程序的主要价值:
NoSQL的数据范式
NoSQL的兴起使得业务数据的建模能力得到了加强,使得业务数据不再被其存储形式束缚。NoSQL与关系数据库一起构建了更立体的数据架构,使得现代应用解除了传统关系模型的局限性,更好的专注于业务逻辑。
关系型数据库对应用程序提供了非常关键的ACID能力,使得数据可以安全的完整的持久化,可以安全的并发访问。但关系型数据库并不能适用于所有的企业数据和场景,因此应用程序往往同时使用NoSQL应对不同的数据存储需求。两者共同构建了企业在线业务的数据架构——PolyglotPersistence,应用程序使用多种数据库产品处理不同类型数据,从而在面临具体数据时可以选择最合适的产品。PolyglotPersistence非常适合于复杂应用,从而为各种业务数据选择最合适的数据模型。PolyglotPersistence在提供便利性的同时也引入了架构复杂度,需要在收益和复杂度之间做好权衡。
以互联网业务为例,不同类型的业务数据有着各自最合适的数据库产品。交易域业务的数据,模式基本固定,且数据一致性要求很高,非常适合由关系型数据库提供服务,我们会选择OceanBase;客户域业务的数据,一般跟用户ID直接关联,且是一个典型的读多写少的场景,非常适合由KV数据库提供服务,我们往往选择TBase;风控域业务的数据,模式灵活、请求量大、且对数据实时性和查询性能要求很高,非常适合由宽表数据库提供服务,我们往往选择HBase。
PolyglotPersistence是一种数据职责分离的范式,为不同的数据类型选择最合适的数据库产品。另一种数据职责分离的范式是CQRS(CommandQueryResponsibilitySegregation),将写入操作和读取操作分开。写入操作(Command)通过规范化的关系模型来提供,从而保证数据完整性和数据一致性。读取操作(Query)通过非规范化的数据模型来提供,从而可以获得灵活性和极致性能。两者之间的数据通过异步机制保持最终一致性,可以通过应用程序的异步消息,也可以通过数据库系统的CDC(ChangeDataCapture)机制。
以某在线业务为例,该业务通过MsgQueue订阅上游业务的事件消息,并把事件数据写到关系型数据库保证数据持久化。然后再通过订阅关系型数据库的changestream,构建为图模型的关系数据后写入图数据库,图数据库提供关系数据的查询服务。
以某在线业务为例,当用户发生金融行为时,需要基于该用户的历史行为数据和本次行为数据进行实时分析并作出风险决策,其风险决策的数据分别来自于离线分析链路和实时分析链路,是个典型的Lambda架构。
数据检索的挑战——从结构化时代到非结构化时代
传统检索技术
传统数据库存储的是标量数据,标量原来是物理上的概念,指只有大小而没有方向的物理量,在数据库这里用标量来表示一类数据类型,例如数字型、字符型、日期型、布尔型,针对该类数据类型可以使用精确匹配的方式进行查询,例如传统关系数据库的SQL,该检索方式称为标量查询。
全文检索是指在非结构化的文本数据中基于特定单词或者文本在全文范围内进行检索。常见的搜索引擎就是对全文检索技术的实现,例如Lucene、Solr、ElasticSearch等。我们在网络上使用搜索引擎检索特定内容的数据也是用到了全文检索技术。全文检索是一种非常重要的信息检索技术,可以帮助我们对文本数据进行检索。
标量查询和全文检索本质上是关于标量数据或关键字的精确匹配,其查找结果与输入目标之间是完全相同的关系。这与我们下文即将介绍的面向非结构化数据的向量检索的近似匹配有着截然不同的区别。
数据库索引是一种用于加速数据查找的数据结构。计算机科学有着丰富的数据结构帮助快速查找,例如红黑树、跳表、位图、布隆过滤器等。对于标量查询和全文检索,常见的索引类型有B+树/B树、hash树、倒排索引:
非结构化数据的机遇和挑战
全球数据量急剧增长,其中超过80%的数据都会是处理难度较大的非结构化数据,如文档、文本、图形、图像、音频、视频等,非结构化数据在大数据时代的重要地位已成为共识。
传统数据库的标量查询解决了结构化数据的检索问题,但非结构化数据不遵循传统数据库的数据模型,因此传统数据库的检索方式无法处理该类数据,使得企业难以分析非结构化数据。根据调查显示,极少数公司能够有效利用非结构化数据,而非结构化数据往往能够提供更为全景化的视图和整体化的理解,因此挖掘非结构化数据中的信息对于企业发展至关重要,能够带来更大的机遇。
非结构化数据的语义表征
由于数据圈中的数据大部分都是非结构化数据,有效分析非结构化数据将会给企业带来巨大的机遇。我们虽然能够高效存储非结构化数据,例如文件存储、对象存储等,但计算机尚不能按照人的方式来理解图片或者文本中的语义信息。因此将非结构化数据中的语义信息转换为计算机可理解的方式是有效分析的第一步。
现代AI/ML技术的发展提供了一种从非结构数据中提取语义信息的方式——embedding。区别于前面提到的标量类型,embedding是一种向量类型——由多个数值组成的数组,因此embedding又被称为向量或者矢量。embedding是非结构化数据的数值表示,能够将非结构化数据映射到其“含义”空间,使得计算机能够理解非结构化数据的语义信息。
embedding是区别于传统数据库(包括关系型和NoSQL)的崭新领域,通过embeddingmodel将非结构化数据转换为embedding。embeddingmodel本质上是一种数据压缩技术,通过AI/ML技术对原始数据进行编码,使用比原始数据更少的比特位来表示数据。压缩后的数据就是原始数据的“隐空间表示”,压缩过程中,外部特征和非重要特性被去除,最重要的特征被保存下来,随着数据维度的降低,本质上越相似的原始数据,其隐空间表示也越相近。因此,隐空间是一个抽象的多维空间,外部对象被编码为该空间的内部表示,被编码对象在外部世界越相似,在隐空间中就越靠近彼此。基于以上理论基础,我们可以通过embedding之间的距离来衡量其相似程度。
数据的隐空间表示包含了原始数据的所有重要特征,学习原始数据的特征并简化表示的过程,称为表征学习(RepresentationLearning)。表征学习将原始输入数据映射到隐空间表示,以便更有效的分析和处理,并可以发现原始数据中的隐藏模式和结构。表征学习包括从原始数据中发现特征并表示的一组技术,现代技术主要是深度学习。针对不同的非结构化数据,业界有着丰富的深度学习模型,例如用于文本处理的Word2Vec、UniversalSentenceEncoder、GLoVE,用于图片处理的ResNet50、MobileNet、CLIP,用于视频处理的OpenCV,用于音频处理的PANNs等。
因此,embedding是非结构化数据的统一语义表征,是现代AI/ML的通用语言。有了非结构数据的语义信息的数值表示,接下来我们将直面第二个挑战:如何构建高效的embedding检索服务——向量检索服务。
非结构化数据的检索
向量检索服务是专门存储、索引和查询由机器学习模型生成的非结构化数据的向量表征的服务。本节我们将介绍向量检索服务的核心技术和产品形态。
区别于标量数据的精确匹配,向量检索是一种基于距离函数的相似度检索,由于向量间的距离反映了向量的相似度,因此通过距离排序可以查找最相似的若干个向量。向量检索算法有kNN和ANN两种。
向量的相似性度量基于距离函数,常见的距离函数有欧式距离、余弦距离、点积距离,实际应用中选择何种距离函数取决于具体的应用场景。
对于向量检索,常见的ANN索引类型有IVF、HNSW、PQ、IVFPQ
以上我们介绍了向量检索服务的核心技术,包括检索算法、相似度度量算法、索引构建算法。应用程序在实际运用中并不需要从头构建,业界有着丰富的支持向量检索的产品,主要由三种产品形态,分别是向量检索库、专用向量数据库、支持向量检索的普通数据库。
最后来个总结,向量检索服务基于AI/ML技术计算目标向量与候选向量集中向量的相似度,并返回最相似的若干条向量。ANN算法提升了查询速度,使得查询耗时对应用程序更友好。ANN算法在大幅提升查询速度的同时,有少量的查询精度牺牲,如果对查询精度要求更高,可以选择kNN算法查询。上节介绍的embedding解决了非结构化数据的“语义”难题,本节介绍的向量检索服务解决了embedding的“检索”难题,两者一起提供了区别于传统数据库的面向非结构化数据的检索方案。
非结构化数据检索的数据范式
现代AI技术的发展使得非结构化数据的检索能力得到了空前加强,进而使得现代应用解除了非结构化数据的桎梏,应用程序有了更多基于非结构化数据的数据范式。
传统检索技术和面向非结构化数据的向量检索技术是两种完全不同的检索技术:
传统检索技术善于精确查询,但缺乏语义理解。而向量检索技术能够很好的识别用户意图,但在精确检索方面召回率大概率不如传统检索技术,两种技术都不完美。对于特定的检索场景,两者结合能够提供更准确的检索结果。
混合检索正是将传统检索技术与向量检索技术相结合的艺术,从而可以博采众长,相辅相成。它将传统检索技术的按关键字检索与向量检索技术的按语义检索的能力相结合,提升了最终结果的准确性与全面性,更适合面向现代多元化数据的检索场景。
检索技术是现代计算机科学解决的主要课题之一,传统的检索技术主要基于倒排索引技术,应用程序可以基于此技术构建全文检索的功能。现代AI技术的发展使得检索技术的能力得到了空前加强,能够对更多的非结构化数据进行更强大的语义检索,检索技术彻底解除了非结构化数据的桎梏。应用程序在检索技术红利的加持下得到了功能加强,或者从零到一破土而生,例如搜索引擎、推荐系统、问答系统等,能够处理更加多样化的非结构化数据。
RAG经业界不断探索,架构经过多轮调整,最完整的架构如下图所示,其结合了关键词检索、图检索、语义检索等多种检索技术,及重新排序算法,从而提供更准确的检索结果和生成结果。应用程序在实际运用中并不需要完整搭建这个脚手架,社区有着丰富的框架直接使用,例如LangChain、LlamaIndex等。
VectorDB就像海马体,负责信息提取。LLM就像大脑,负责新信息的生成。两者解决了如何基于已有知识生成新知识的问题,而Agent负责执行,从而对物理世界产生实际影响。LLM、VectorDB、Agnet是AInative应用的智能基础设施,VectorDB是其中最重要的组成部分。
总结:从大数据到大模型
本文的副标题是“从大数据到大模型”,最后再点下题。
信息化时代定义了关系型数据库的数据范式。关系型数据库的本质特征在于ACID,对应用程序提供了数据持久化、数据完整性、事务等应用语义,使得应用程序可以将数据管理的职责完全交给数据库。更重要的是,相比于层次模型和网状模型,关系模型的存取路径对应用透明,从而使得应用代码从具体的数据格式中解耦出来,极大简化了应用开发过程。关系型数据库是信息化时代的数据范式,解除了数据存储的桎梏,推动了信息化时代的蓬勃发展。
谷歌的老三篇GFS、MapReduce、BigTable开启了大数据时代,大数据时代定义了NoSQL的数据范式。传统数据库在大数据场景下面临水平扩展性不够、数据模型单一等局限性,而NoSQL弥补了关系型数据库的这些不足。NoSQL首先提供了非常好的水平扩展性,能够可靠的在数千台机器上处理PB级的数据;其次提供了灵活的多样化的数据模型,使得应用程序能够所见即所得的将业务数据映射为数据库的存储模型。获得扩展能力的同时,可能会牺牲一定的数据一致性,因此往往与关系型数据库搭配使用。NoSQL是大数据时代的数据范式,解除了数据规模和业务数据复杂性的桎梏,推动了互联网时代及移动互联网时代的发展。
2022年底,OpenAI的大模型ChatGPT正式发布,开启了生成式AI时代,生成式AI时代定义了LLM+VectorDB的数据范式。传统数据库擅长处理结构化数据,面对非结构化数据时心有余而力不足。LLM+VectorDB提供了非结构化数据的语义理解和检索能力,而数据圈超过80%的数据都是非结构化数据,从而使得这些数据中的信息得以释放变成实际的生产力。LLM+VectorDB是生成式AI时代的数据范式,解除了非结构化数据的桎梏,推动了AInavive应用的发展。
实时同步RDS与Redis构建缓存一致性
通过DTS数据订阅能力,用户可以实时订阅RDS日志数据变更,并将其写入Redis以实现缓存数据的更新,可以实现MySQL与Redis之间的缓存同步一致性。