当前位置: 首页 > 科技观察

什么是列数据库?应该什么时候使用?_0

时间:2023-03-12 21:54:55 科技观察

翻译|布加迪评论家|SunShujuan在为特定应用程序选择数据库时,有很多不同的选择。一个经常讨论的话题似乎是SQL数据库与NoSQL数据库的选择,即数据应该存储在关系数据库中还是存储在NoSQL数据库中,例如键值数据库、文档数据库或图形数据库。另一种选择是简单地使用列式数据库。本文解释了为什么需要这种选择,以及列式数据库的一些优点和缺点。列式数据库的定义顾名思义,列式(或列式)数据库将数据存储在磁盘上,以列而不是行的形式组织。以物联网传感器为例,基于行的数据库会将数据存储在磁盘上,如下所示:而列式数据库会将相同的数据组织起来,以便每个列值按顺序存储在磁盘上:列式数据库的主要优点是,由于压缩率的提高,可以大大减少存储数据所需的磁盘空间。此外,列式数据库在处理分析查询方面比传统的基于行的数据库要快得多。为什么列式数据库适合分析工作负载?那么,改变数据的存储格式如何提高性能呢?有几个因素有助于列式数据库为在线分析处理(LAP)工作负载提供比传统数据库更高的性能。第一个原因是压缩比增加。这是因为列式数据库能够对每一类数据使用最好的压缩算法,因为每一列都是同一类数据,而不是一行混合类数据。这不仅降低了存储在磁盘上的成本,而且还提高了性能,因为需要更少的磁盘寻道,更多的数据可以容纳在内存中。列式数据库提高性能的另一种方法是在后台实际存储同一列的多个不同版本,按不同顺序排序,以加快某些查询的过滤和选择。列式数据库还可以通过许多其他方式提高性能。这里有几个例子:查询数据时的自适应索引向量化处理优化列连接以提高效率列的后物化本文分析了列数据库的性能,作为论文的一部分进行的测试的示意图显示了结果以上优化。基于TPC-H数据仓库基准数据集,列式数据库的运行速度比传统的行结构数据库快10倍左右。该图显示了哪些优化对列式数据库性能影响最大,而后期实现带来的性能提升最大。列式数据库性能权衡与计算机科学中的几乎所有内容一样,列式数据库性能也存在权衡。它们针对分析工作负载进行了优化,并不天生适合关系数据库设计用于的传统在线事务处理(OLTP)工作负载。当尝试更新特定数据点或写入单个数据点时,将发生最大的性能牺牲。就列式数据库而言,您希望尽可能批量插入数据。列式数据库也会对读取查询产生影响,您可以在其中获取一行中的所有数据,就像关系数据库一样。性能受到影响,因为必须重新构造每一列以创建整行。列式数据库的用例列式数据库非常适合您要分析大量数据的任何情况。让我们来看看一些常见的用例。商业智能列式数据库非常适合分析销售数据,因为它们可以让您以多种方式划分信息。这可以帮助您识别您可能看不到的趋势和模式。例如,您可以使用列式数据库按位置、品牌或产品类别比较不同产品随时间变化的销售数据。应用程序性能监控应用程序性能监控是另一种常见情况,其中使用列式数据库来帮助提高软件可靠性和性能。通过跟踪和分析有关应用程序运行状况的数据,您可以在问题导致应用程序崩溃或变慢之前发现它们。这有助于避免停机并确保为用户提供最佳体验。使用列式数据库,您可以存储更细粒度的数据以获得更深入的洞察力,同时由于卓越的数据压缩而降低成本。物联网组织正在部署越来越多的连接设备,其中许多设备收集数据用于分析工作负载。列式数据库可用于存储此数据以启用实时警报并生成预测,从而提高许多不同行业的效率。专用列式数据库的示例到目前为止,我们已经大致了解了列式数据库及其优点。虽然所有列式数据库都具有与通用数据仓库或数据湖相同的有效特征,但这里介绍了如何调整和优化它们以获得更具体的性能特征。InfluxDBIOxInfluxDBIOx是InfluxDB的开源列存储引擎,针对处理时间序列数据进行了优化。时间序列数据在性能方面提出了独特的挑战:只需要几列数据的分析型查询,例如从传感器获取过去一周的平均温度。一种关系类型查询,用户希望在过去5分钟内从许多不同的传感器获得所有可用信息。时序数据也倾向于大批量到达,这就需要快速的摄取能力,以便快速索引和查询数据,以实现实时监控和告警。此外,许多用户希望能够长期存储这些数据用于历史分析和预测,而不必担心高昂的成本。InfluxDB允许用户通过管理数据的生命周期和在冷热存储之间移动数据来结合两全其美,在历史数据上获得快速性能,同时通过使用不常查询的数据对象存储来降低存储成本,从而降低存储成本。实现这一目标的一个关键方法是构建和贡献ApacheArrow、DataFusion和Parquet等项目。Arrow允许数据在内存中以柱状格式压缩,并在数据库的不同部分之间移动。Parquet用于高效持久化存储,DataFusion提供高性能查询和SQL支持。许多其他主要项目和供应商也在Parquet和Arrow项目的基础上进行构建,这也使得能够与更广泛的大数据生态系统集成和兼容。ApacheDruidApacheDruid是一个具有底层列数据结构的实时数据库。Druid适用于典型的数据仓库类型的工作负载,例如您对列式数据库的期望,但它也优先考虑低延迟响应时间,并且通常用于交互式用户界面之类的东西。DuckDBDuckDB是专为OLAP工作负载设计的进程内数据库,实际上设计为用于分析的SQLite。DuckDB使用列式矢量化来运行具有出色性能的SQL查询,并且可以轻松嵌入到应用程序中。DuckDB的主要卖点是易于在本地设置和运行,而大多数OLAP数据库要么是云托管的,要么需要复杂的安装过程。为您的任务选择合适的工具最终,技术决策归结为哪种技术对您的用例有意义。从长远来看,选择数据库可能是构建应用程序时最重要的选择之一,因此值得了解所有可用选项并选择最适合您的选项。如果您处理大量数据主要是为了分析,那么列式数据库可能是一个不错的选择。原标题:什么是列数据库,什么时候用?,作者:CharlesMahler