关于DIMMQ: Discardable In-Memory Materialized Query

简介:

背景

最近在看CBO在不同系统里的实现方式,比如flink里在编译时对plan的CBO优化,以及运行时的CBO: HiveApache Calcite(即 Optiq)的一些内容。
今天第一次看到DIMMQ的概念,聊聊我的几点看法。


从数据重用到query重用

DIMMQ的全称是Discardable In-Memory Materialized Query,提出这个概念,本质上还是为了解决数据重用。只是这次数据的重用不是磁盘上的replication,或是内存里的RDD,而是更细粒度的query级别,具体data set是隐藏在DIMMQ这一层下的。

DIMMQ相当于是高级语言与底层存储的一层映射,原文中提到 Implementing DIMMQs will require changes at the query level (optimization queries in SQL and other languages such as Pig and Cascading) and also at the storage level.  高级语言包括Hive,Pig,Cascading,亦或是任何计算框架的表达层。在我看来,只要高级语言层能与DIMMQ进行一层翻译和映射,那么计算框架就可以在执行阶段,做到较好地重用存储层的数据。这种使用方式的与众不同之处,就是面向query,而不是直接面向数据。

以往直接面向数据的重用和locality,有很多。比如最直接的,在磁盘级别,做replication,比如HDFS,比如MongoDB的副本集。之后,出现了Spark RDD,做到任务内的,大部分可以in-memeory的数据重用。再到Tachyon,做到真正内存内的,跨任务的数据重用。这种面向数据的直接重用的坏处是,你需要知道这份数据的位置、它的分布情况、它的过期策略等等。这件事情,对应到DIMMQ里,认为是可以与上层语言、应用解耦的。原文有这样一句话  The core concepts — materialized queries, discardable data, and in-memory data — are loosely coupled and can be developed and improved independently of each other.

所以DIMMQ解决的是什么问题呢。类比在Hadoop体系里,对HDFS可以做一层 Discardable Distributed Memory,利用HCatalog也好,配合query optimizer也好,DIMMQ的存储部分的数据存放策略、过期策略、甚至是异构化存储,都是不暴露的。我认为这也是对存储层有了更高度的一层使用方式。解耦是肯定具备的。除了解耦之外,还有什么好处?

文章中还提到关系型数据库里的物化视图。我想,DIMMQ最直接的灵感一定是来源于物化视图。数据库如何导入数据,如何建立索引,在我们使用物化视图的时候我们都是不关心的。所以类似的,在一个分布式计算框架里,我使用pig、sql、hive去做计算,我也不关心底层的存储怎么load数据的,你底下可以是HDFS,也可以是别的存储系统,你索引是不是用b tree建的都没有关系,语言层关心的是具体查询会怎么落到计算、存储节点上,越快越好,能本地化就本地化,能复用数据就复用数据。今天DIMMQ让我们不用去知道数据有几个备份,分别在哪里,存储介质是磁盘、内存、还是SSD,用完了是不是要过期,多拷贝几份还放不放得下。DIMMQ需要上层语言做的,是rewrite query,DIMMQ本身不太像执行框架本身的组成部分,而是一种存储层的额外的meta管理,即与执行框架是不耦合的。

目前DIMMQ的直接使用场景是CBO。

总之我认为DIMMQ这个概念还是不错的,这个东西和RDD一样,理解的可能是一个概念,在不同系统里实现出来的形态可能是不一样的,但大家的目的都是相同的。老外对这种东西的理解及抽象能力,值得学习!


目录
相关文章
|
4月前
|
存储 关系型数据库 MySQL
InnoDB and MyISAM Index Statistics Collection
存储引擎收集表统计信息,供优化器使用,关键数据为平均值组大小,反映相同键前缀值的行数均值。该值影响索引效率,值越大,索引查找行数越多,效用越低。MySQL通过调整`innodb_stats_method`和`myisam_status`系统变量控制统计方法,涉及NULL值处理,如nulls_equal将所有NULL视为同一值组,可能影响索引使用决策。通过设置变量可优化统计信息收集,提升查询性能。
|
4月前
|
JSON 关系型数据库 MySQL
EXPLAIN Extra Information
`EXPLAIN` 输出的 `Extra` 列提供了 MySQL 解析查询的附加信息。此列可能的值及其对应的 JSON 属性如下: - **Using filesort / using_filesort**:需额外排序。 - **Using temporary / using_temporary_table**:需创建临时表。 - **Deleting all rows**:删除所有行。 - **Distinct / distinct**:寻找不同值。 - **FirstMatch(tbl_name)**:使用半连接策略。
1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause
1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause
212 0
1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause
|
SQL Oracle 关系型数据库
Unsafe query: ‘Update‘ statement without ‘where‘ updates all table rows at once
Unsafe query: ‘Update‘ statement without ‘where‘ updates all table rows at once
702 0
0227show all segment level statistics
[20180227]show all segment level statistics.txt https://orainternals.wordpress.com/2013/06/12/dude-where-is-my-redo/ REM Author : Ri...
1020 1