前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >查询服务系统:一种新兴的数据系统

查询服务系统:一种新兴的数据系统

原创
作者头像
点火三周
发布2022-05-17 11:11:01
1.9K0
发布2022-05-17 11:11:01
举报
文章被收录于专栏:Elastic Stack专栏Elastic Stack专栏

如今,人们正在构建的数据库和数据系统的种类比以往任何时候都多。我们有像CockroachDB和经典Postgres这样的 OLTP 系统DruidClickhouse这样的OLAP 系统,像ElasticSearchSolr这样的搜索系统,像MongoDBCassandra这样的 NoSQL 数据库,像PineconeVespa这样的向量数据库,像Neo4jDgraph这样的图数据库,像Delta LakeHudi等的数据湖还有SnowflakeRedshift这样的数据仓库,甚至许多其他正在冒出的新概念(比如:数据湖库!)。我在这篇博文中想要做的是在混乱中施加一点秩序,并提出许多这些表面上看起来不同的系统,但实际上属于具有多个共享属性的数据系统类别:我们称之为查询服务系统

在抽象层面,查询服务系统服务于高并发、低延迟的查询。为了使这一点更具体,让我们通过以下三个属性来定义它们:

  1. 查询服务系统服务于大型数据并行 查询:查询自然是可并行化的,因为它们将相同的操作应用于多个数据项,并且每个查询访问 GB 到 TB 的数据。
  2. 查询服务系统专门用于低延迟。它们针对特定的问题域,并且可以在高度优化的自定义数据表示的帮助下,在几毫秒到几秒内在该域中运行大型数据并行查询。
  3. 查询服务系统管理批量数据更新。更新是定期的,但可以批量更新,因此高度并发的冲突写入很少成为问题。

一旦你知道要寻找什么,很明显许多不同的系统都具有所有这三个属性!例如,像ElasticSearchApache Solr这样的全文搜索系统执行的查询将相同的操作(搜索)应用于每个文档;使用倒排索引等专门的数据结构来存储文档并优化搜索性能;并且主要是以Append(追加)的方式进行数据写入(Append-most)。像Apache Druid这样的实时 OLAP 数据库执行聚合查询,对每条记录应用相同的操作,如求和(sum)或分组(group by);使用优化的压缩列存格式来运行这些查询 ,速度比非专业系统快几个数量级;并且使用追加的方式摄取数据(append-only)。许多其他系统以相似的共享这些设计属性,包括像InfluxDBOpenTSDB这样的时间序列数据库,像PineconeVespa这样的矢量数据库,甚至一些(但不是全部)图数据库。

我们对查询服务系统的一个有趣观察是,它们都包含大量定制的基础设施,都需要支持大规模运行,在多台机器上分布数据和查询。然而,若我们将这些系统一一比较,我们会发现这种分布式基础设施的实现基本相似我们考察的每个系统都有一个基本的分布式架构,这个架构是由查询服务工作负载的数据并行性自然产生的:它们都将数据划分为许多分片(每个分片都将数据存储在前面讨论的自定义专门数据结构中),为存储在分片中的数据提供一致和持久的容错更新,为高可用性复制分片,并以数据并行的方式提供在多分片上运行容错分布式查询的能力。为了更清楚地说明这一点,我们把在分片数据上执行的数据并行查询画在下面;查询服务系统负责把每个查询分布在许多分片上,并负责管理存储在分片上的数据,包括:数据的更新以及保持数据的可用性。

查询服务系统的数据分片架构
查询服务系统的数据分片架构

这种架构的普遍性很有意思,因为它意味着我们可以将不同查询服务系统的分布式部分封装在一个共同的、模块化的抽象中,使可扩展的查询服务系统更容易构建,因为开发人员可以使用这种抽象,而不是为每个新系统编写自定义的分布式代码。我一直在研究通用抽象是否可行的问题,最近我发表了一篇关于一种可能的抽象的论文(在NSDI '22会议上),称为data-parallel actors (DPA)。高级思想是我们可以将分布式查询服务系统表示为有状态参与者的集合其中每个参与者都是一个不透明的对象,它封装了以某种自定义格式(如 Solr 倒排索引)存储的数据的分区或分片。通过为存储在参与者中的数据提供分布式保证(例如,更新的一致性和持久性)并定义一组通用并行运算符,开发人员可以从中构建任何数据并行查询,DPA旨在使从单节点组件构建一个分布式查询服务系统成为可能。为了展示 DPA 的工作原理,我们将几个现有的查询服务系统(包括 Solr 和 Druid)移植到它,并使用它构建了一个基于单节点列存储的简化数据仓库——MonetDB。如果这听起来很有趣并且您想阅读更多内容,那么这篇论文中有更多详细信息!

放大来看,我认为DPA和类似的系统很有前途,但即使我们最终没有用一个共同的抽象来构建所有的查询服务系统,我也希望认识到它们的相似性,鼓励研究人员和工程师从新的角度来看待查询服务系统,并建立针对它们的模块化基础设施。例如,我目前正在与斯坦福大学的其他一些人合作,为查询服务系统开发一种通用的数据放置算法,通过最大限度地提高查询的并行性(将经常被一起查询的分片分散开来),从而改善延迟。我猜想,它也有可能为查询服务系统的自动扩展和增量视图维护提出有趣的新的通用方法。更广泛地说,我希望这对查询服务系统的开发者是有用的,因为他们知道有一大类问题是共享的,他们可以从其他系统(希望将来能从DPA这样的通用框架)获得灵感。

原文:https://petereliaskraft.net/blog/query-serving-systems

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档