列式数据库
()是以相关存储架构进行数据存储的数据库,主要适合于批量数据处理和即时查询。相对应的是,数据以相关的存储体系架构进行空间分配,主要适合于小批量的数据处理,常用于联机事务型数据处理。
描述
数据库以、的二维表的形式存储数据,但是却以一维字符串的方式存储,如下表:
RowId | EmpId | Lastname | Firstname | Salary |
---|---|---|---|---|
001 | 10 | Smith | Joe | 40000 |
002 | 12 | Jones | Mary | 50000 |
003 | 11 | Johnson | Cathy | 44000 |
004 | 22 | Jones | Bob | 55000 |
这个简单的表包括员工编号(EmpId)、姓名字段(Lastname and Firstname)及工资(Salary).
这个表存储在电脑的内存(RAM)和存储(硬盘)中。虽然内存和硬盘在机制上不同,电脑的操作系统是以同样的方式存储的。数据库必须把这个二维表存储在一系列一维的“字节”中,由操作系统写到内存或硬盘中。
把一中的数据值串在一起存储起来,然后再存储下一的数据,以此类推。
10:001,12:002,11:003,22:004; Smith:001,Jones:002,Johnson:003,Jones:004; Joe:001,Mary:002,Cathy:003,Bob:004; 40000:001,50000:002,44000:003,55000:004;
把一中的数据值串在一起存储起来,然后再存储下一的数据,以此类推。
001:10,Smith,Joe,40000; 002:12,Jones,Mary,50000; 003:11,Johnson,Cathy,44000; 004:22,Jones,Bob,55000;
这只是一个简化的说法。此外,划分, 索引, 缓存机制, 视图, OLAP立方, 以及诸如 预写式日志 和 多版本并发控制 此类的事务系统都在现实的应用环境中发挥作用。一般来说, 侧重于联机事务处理 (OLTP) 的系统更适用, 而侧重于联机分析处理 的系统就必须在和中找到适当得平衡。
特点
因为硬盘寻址时间相较于计算机上其他部件的运行速度来说不是一般的慢,所以常用相同工作负载下的硬盘访问性能来比较和。通常,顺序读取数据要比随机访问更快[1]。而且,硬盘寻址时间的提升比起CPU速度的进步要慢得多 (参看 摩尔定律),在使用硬盘作为存储媒介的系统上这种情况很可能还会持续一段时间。下面简单罗列了一些选择还是的权衡依据。当然,如果能够把数据全放在内存中,那么使用内存数据库性能会更好。
- 在只需要根据某几来聚合数据的时候,按的数据组织方式更有效。因为这样只需要读取一部分数据,要比读取全部数据更快。
- 当只需要修改某一值的时候,按的数据组织方式更有效。因为可以直接找到某数据并修改,而与中的其他无关。
- 当需要某的多数据的时候,按的数据组织方式更有效。当中数据不是太多的情况下一次硬盘寻址就可以获得该的所有数据。
- 在新增数据的时候,如果各都有值,那么按的数据组织方式会更有效,因为只需要一次硬盘寻址就可以写入整的全部数据。
在实际应用中,面向的数据存储架构,更适用于OLTP-频繁交互事务的场景。面向的数据存储架构,更适用于OLAP-(如数据仓库)这样在海量数据(可能达到 terabyte规模)中进行有限复杂查询的场景。
实现
自由和开源软件
数据库名字 | 实现语言 | 注释 |
---|---|---|
Apache Druid | Java | 开始于2011年,用于低延迟大规模的摄取和查询。可从Imply Data获得的支持和扩展。 |
Apache Kudu | C++ | 发行于2016年,用以使Apache Hadoop生态系统完全。 |
Apache Pinot | Java | 开源于2015年,用于实时低延迟分析。可从StarTree获得支持和扩展。 |
Calpont InfiniDB | C++ | |
ClickHouse | C++ | 发行于2016年,用于分析实时更新的数据。 |
CrateDB | Java | |
C-Store | ||
DuckDB | C++ | 可嵌入的、进程内、面向列的SQL OLAP RDBMS。 |
Databend | Rust | 可伸缩和可靠的Serverless Data Warehouse。 |
InfluxDB | Go | 时间序列数据库 |
Greenplum数据库 | C | 可从VMware获得支持和扩展。 |
MapD | C++ | |
MariaDB ColumnStore | C & C++ | 曾经的Calpont InfiniDB。 |
Metakit | C++ | |
MonetDB | C | 开源(自从2004年)列式关系DBMS先驱。 |
PostgreSQL cstore fdw[2] vops[3] | C | cstore_fdw使用ORC格式。 |
StarRocks | Java & C++ | 开源、统一的分析平台,用于批量和实时分析。可从CelerData获得支持和扩展。 |
平台即服务(PaaS)
- Amazon Redshift
- Microsoft Azure SQL Data Warehouse
- Google BigQuery
- Oracle Autonomous Datawarehouse Cloud Service
- Snowflake Computing
- MariaDB SkySQL
- Actian Avalanche
- Vertica Accelerator
- CelerData
参见
- 数据仓库
- 面向列的DBMS列表
- AOS与SOA
- RCFile
引用
- The Star Schema Benchmark and Augmented Fact Table Indexing (页面存档备份,存于), Pat & Betty O’Neil, Xuedong Chen and Stephen Revilak, TPC Technology Conference 8/24/09
- . [2023-01-19]. (原始内容存档于2023-01-19).
- . [2023-01-19]. (原始内容存档于2023-01-19).