Storage of multidimensional arrays based on arbitrary tiling
论文标题: Storage of multidimensional arrays based on arbitrary tiling
作者: Furtado P Baumann PProceedings - International Conference on Data Engineering (1999) 480-489
DOI: 10.1109/icde.1999.754964
专业词汇:
multidimensional discrete data (MDD):多维离散数据
On-line Analytical Processing(OLAP):联机分析处理,相对于OLTP,操作以读为主
MOLAP表示基于多维数据组织的OLAP实现(Multidimensional OLAP)
tile:切片,对数组的访问单元
tiling:平铺,支持任何分割成不相交的多维区间以及n维空间的不完全覆盖和 MDD 的逐渐增长
Blob(Binary long Object)是二进制长对象的意思,Blob通常用于存储大文件,典型的Blob内容是一张图片或者一个声音文件
Rasdaman- 阵列数据库系统
ODMG 是支持以对象形式对数据建模的数据库管理系统。
文章目录
- 0. Abstract
- 1. Introduction
- 2. Motivation
- 存储管理的任务很明确:
- 常规平铺的缺点:
- 3.Multidimensional Discrete Data
- Some terms
- Definition (spatial) domain of m :
- Current (spatial) domain
- 4. Arbitrary Multidimensional Tiling
- 5. The Storage Manager for MDD
- 5.1 Access Patterns
- 5.2 Tiling Strategies
- Aligned Tiling
- Partitioning the Dimensions
- 分片的步骤
- Area of Interest
- Statistic Tiling
- Performance Comparison
0. Abstract
我们描述了四种策略和各自的平铺算法,并展示了它们在减少磁盘访问和范围查询后处理时间方面的有效性测量。
1. Introduction
一个 MDD 对象由一个可能的稀疏数组组成规则多维网格中某些基本类型的单元格。
虽然分块(平铺)已经被广泛应用了,但是使用平铺来适应不同的访问模式还没有被充分利用。
2. Motivation
以统一的方式处理MDD,独立于应用程序、维度、单元类型和其他属性,不仅可行,而且具有优势。
存储管理的任务很明确:
- 支持数据模型
- 要能够管理不同的单元类型和维度
- 管理数据的插入,删除导致的稀疏性、增加和收缩
- 优化最常见的数据访问类型
- 对MDD的访问是范围查询,即检索包含在多维区间内的所有单元格,从而产生原始对象的“子 MDD”
- 为了优化对 MDD 的独立访问,必须最小化检索到的数据量以及数据库页面的数量。
- 由于访问存储系统针对整个页面,应定义tile以使数据库页面尽可能完整,即切片(tile)大小应近似为存储系统页面大小的整数倍。
- 另外,由于tile是对数组的访问单位,因此希望尽量减少访问的tile的数量,但同时对tile的大小施加一个上限,以确保它们可以方便地被访问。
- 最小化存储空间。
常规平铺的缺点:
- 不考虑特定访问的确切位置,只考虑访问的子区间的形状
- 唯一可能的优化是选择最小化每次操作访问的图块数量的图块格式。
- 无法使数组分区适应数组不同部分中数据的分布和属性
下面,我们介绍一个访问模型和一个存储试图克服这些限制的 MDD 年龄方法。
存储方法基于任意平铺,在调整 MDD 对象的存储结构以访问模式方面允许最大的灵活性。
在有关对任意平铺支持中最重要的问题 是 tiling算法的需求和给用户足够的机制(mechanism)去利用tiling的灵活性。
我们方法的一些关键原则首先被提出在[9]中,描述了多媒体数据存储管理中任意平铺和多维R±树状索引的组合。这些概念随后被扩展到 RasDaMan 系统 [4],除了用于调整存储的应用程序接口外,还开发了完整的存储管理器和平铺策略。
3.Multidimensional Discrete Data
Some terms
定义了底层 MDD 类型系统的主要概念
多维离散数据对象(MDD) m 是一组固定类型 T(base type)的单元格(cell),因此具有固定的单元格大小(cell size)。
每个cell对应一个多元空间域MDD对象的元素。
Definition (spatial) domain of m :
DmD_mDm 是一个d维离散坐标集(S=S1×...×SdS = S_1 \times ...\times S_dS=S1×...×Sd)的子区间(Subinterval) ,其中 Si,i=1,...dS_i,i=1,...dSi,i=1,...d是一个有限全序离散集,并且d是m的维度(dimension)
Dm=[m.l1:m.u1,...,m.ld:m.ud],wherem.l1≤m.ui,i=1,..dandli,ui∈SiD_m = [m.l_1:m.u_1,...,m.l_d:m.u_d],\\ where\ m.l_1 \le m.u_i,i=1,..d\ and\ l_i,u_i \in S_i Dm=[m.l1:m.u1,...,m.ld:m.ud],where m.l1≤m.ui,i=1,..d and li,ui∈Si
l:low,u:upper
MDD 对象单元格的坐标(x1,...,xd)(x_1,...,x_d)(x1,...,xd),满足li≤xi≤mil_i \le x_i \le m_ili≤xi≤mi
A total ordering of the points in the coordinates set is assumed.
定义<关系:
x<y⇔∃k∈1..d:xk<ykandxi=yi,i=1,...,k−1x<y \Leftrightarrow \exist_{k\in 1..d}:x_k<y_k\ and\ x_i=y_i,i=1,...,k - 1 x<y⇔∃k∈1..d:xk<yk and xi=yi,i=1,...,k−1
一个无界表示为 *
,例如(第k维上界无界):
[m.l1:m.u1,...m.lk:m.u∗,...,m.ld:m.ud],[m.l_1:m.u_1,...m.l_k:m.u_*,...,m.l_d:m.u_d], [m.l1:m.u1,...m.lk:m.u∗,...,m.ld:m.ud],
Current (spatial) domain
这是包含当前存在于对象中的所有单元格的定义域的最小 d 维区间。
定义域是 MDD 对象的固定属性,而当前域是随时间变化的对象属性。
无限定义域的概念对于定义实例具有不同的、可能变化的当前域的 MDD 类型很重要。 对当前域的支持导致使用的存储空间最小化。
对于 MDD 对象的存储,假定根据坐标的顺序对单元进行隐式排序。 MDD在持久存储介质中的存储需要默认排序,这是线性的。 使用中间存储系统不会改变这种状态,因为即使是数据库或文件系统也只提供阵列的线性存储(作为数据库系统中的 BLOB)。
上面为 MDD 对象制定的空间域定义不仅包括大多数编程语言支持的通常的多维数组。 例如,坐标可以是一年中的日子、月份、公司生产的产品模型或应用领域的其他离散实体。 但是,始终可以建立从这些坐标集到 ZdZ^dZd 的子区间的映射,并且该映射必须在比存储管理更高的级别上完成。 考虑到这一点,并且为了简化下一节中的解释,下面的讨论将假设映射到作为ZdZ^dZd的子区间的坐标集已经在 DBMS 的更高级别完成。 然后可以互换使用术语 MDD 对象或数组。
4. Arbitrary Multidimensional Tiling
多维平铺定义将 MDD 对象划分为多维子数组。 tile 是 MDD 对象的多维子数组,其维度与其所属的 MDD 相同。 一个具有空间域的 MDD 对象的tile:
Dm=[m.l1:m.u1,...,m.ld:m.ud],Dt=[t.l1:t.u1,...,t.ld:t.ud]D_m = [m.l_1:m.u_1,...,m.l_d:m.u_d],\\ D_t =[t.l_1:t.u_1,...,t.l_d:t.u_d] Dm=[m.l1:m.u1,...,m.ld:m.ud],Dt=[t.l1:t.u1,...,t.ld:t.ud]
- 当一个 tile 插入当前对象,current domain 会更新,会被设置成包括所有域的d维最小子区间
- tiles 总是有固定边界。
- for t.li=t.uit.l_i = t.u_it.li=t.ui,可以定义一个tile(作为slice),在i方向的长度为一。
多维数组的特定切片是数组的一组不相交的tiles。 已插入 MDD 对象中的tile不必完全覆盖当前域。 留空的区域被认为被具有默认值的单元格覆盖。 这取决于应用领域的不同使用方式,例如在 OLAP 中,它可能表示缺少维度值的组合。
tiling 分为两种,一种是aligned,一种是nonaligned的。
然而,在我们的例子中,线性平铺可以沿着不同的方向完成,而对于 BLOB,它只能沿着一个方向完成,并且与对象的多维空间域无关(因为线性化阵列的一部分不是矩形的) ,在一般情况下,结果分区不是对象的子数组)。
支持任意平铺的系统能够使用对齐和非对齐平铺方案以及空间的部分覆盖来管理对象。 未对齐的图块可以有不同的大小,因此不可能使所有图块以最佳方式适应系统页面大小。 可能必须在块大小和反映访问模式的配置之间找到折衷方案。 然而,同样在支持对齐平铺的系统中,由于多维性和具有不同尺寸的边界平铺,这样的最佳尺寸是不可能实现的。
5. The Storage Manager for MDD
In RasDaMan, 一个MDD 对象是由一个多维tiles的集合和在tiles上建的索引组成。
每个tile被存储在一个单独的BLOB中;而索引信息存储空间信息。
对于对象的多维子区间的每次访问,索引都会返回与查询区域相交的tile,以供系统进一步处理。
在下一节中,我们会讨论平铺策略的选择受到不同应用领域的数据访问需求的启发。
为实现 data independence, 物理存储层对用户是透明的。
5.1 Access Patterns
对 ADD 对象访问类型的详细研究导致将单个区域访问细分为几种情况:
- a.访问所有对象
- b.访问与该对象有相同维度的多维子区域
- c.访问由沿一个或多个方向选择线性范围产生的多维子区域
- d.获取一个部分(section),维度更少的MDD
(a)->
aligned tiling(single tile 是一种特例)是最好的策略。
(b)->
nonaligned tiling scheme
结合方案(a),根据不同类型访问的相对频率,背景(无直接访问区域)regularly tiled(平均划分)的混合解决方案可能是最佳解决方案。
© 经常出现在MOLAP应用中。
维度元素的父级(层次结构的第一级,在最详细的一个之后)将是平铺的典型候选者,因为必须同时访问对应于每个父级的单元格以计算子聚合。
在这个数据立方体中,通过处理对应于沿维度显示的维度元素的父级的单元格来执行子聚合,例如,产品和区域的类型。 如果平铺反映了层次结构,则计算子聚合的各个访问同时对同一平铺的单元格进行操作。
此类访问的最佳平铺,保证每次计算读取的最小数据量,将是由与所示轴正交的超平面定义的平铺。 由于细分是不规则的(例如,某些类型的产品比其他产品具有更多的模型),因此规则的平铺不足以支持这种类型的细分。
可以预期,这样的空间细分也很适合此类对象中类型 (b) 的访问,因为由于访问语义,这些操作是针对与空间细分定义的分区相对应的子区域进行的。 这种空间的细分将导致对齐或部分对齐的平铺。
(d)->
有优先的访问方向,最有效的tiling是对齐的平铺,其中平铺沿着这些方向延伸。
5.2 Tiling Strategies
对访问类型和相应空间细分的研究促使我们向最终用户展示平铺策略。 被认为与平铺相关的策略反映了上一节中讨论的不同访问类型的细分类型:根据指定的平铺配置对齐平铺,通过沿域的轴定义分区进行平铺,以及根据感兴趣的区域进行平铺。 此外,如果没有为 MDD 对象指定切片策略(默认切片是对齐的),则会执行默认切片,并且基于访问统计的自动切片会为对象导出最佳切片。
Aligned Tiling
如果用户指定的图块配置对应的图块大小不同于 MaxTileSize,则图块将被平均拉伸一个因子f:
f=MaxTileSize/(CellSize×r1...×rd)df = \sqrt[d]{MaxTileSize/(CellSize \times r_1 ... \times r_d )} f=dMaxTileSize/(CellSize×r1...×rd)
该范围的某些元素可以是“无限的”(用“*”表示),这意味着应该沿该方向最大化tile的长度。
该范围的一个元素,rdj=∗r_{d_j} = *rdj=∗,被用来声明一个优先的扫描方向。
就是说可以定义一个优先顺序,有k个方向 rdj=∗r_{d_j} = *rdj=∗,1≤d1<...<dk≤d,j=1,...,k1\le d_1<...<d_k\le d ,j = 1,...,k1≤d1<...<dk≤d,j=1,...,k,那么tile的长度尽可能先满足方向dkd_kdk,之后满足dk−1d_{k-1}dk−1,直到完成d1d_1d1 或 达到最大tile的size。
Figure 4实际上就是[∗,1,∗][*,1,*][∗,1,∗] ,分别对应x,y,z坐标轴(优先满足x和z坐标扫描,y坐标长度取1)
Partitioning the Dimensions
directional tiling:输入参数是空间的某些或所有维度的一组分区:
{(i,pi,1,...,pi,ni)},i=1,...,d,ni≥1\{(i,p_{i,1},...,p_{i,{n_i}})\},i=1,...,d,n_i\ge1 {(i,pi,1,...,pi,ni)},i=1,...,d,ni≥1
- 如果 ni=1n_i = 1ni=1,也就是说在该方向上不进行分区。
分片的步骤
- Tiles 首先按照超平面 xi=pi,j,j=1,...,nix_i = p_{i,j},j=1,...,n_ixi=pi,j,j=1,...,ni进行划分
- 如果超出了 MaxTileSize则将两个超平面内的cell继续细分
- 超出 , nonaligned
- 从未超出,aligned
- 继续细分采取 aligned tiling algorithm
作为定向平铺输入的轴分区定义了一组 MDD 的等向多维分区。
Area of Interest
“感兴趣区域”是MDD对象中频繁访问到的子数组。
这个可以作为tiling的提示,但是独立于tiles。
一个“感兴趣区域”可以包含于一个tile,也可以包含一组相邻的tiles
Statistic Tiling
通过对MDD访问的序列自动计算感兴趣的区域。(聚类)
提出两个阈值:FrequencyThreshold
,DistanceThreshold
只有距离在距离阈值以内才能合并两个区域
只有出现次数大于频率阈值才能当做同一类感兴趣区域
Performance Comparison
实验组为上述提到的tiling strategy;对照组为aligned tiling strategy(在相关系统中使用的策略)
- Directional tiling
- areas of interest
同一类感兴趣区域
Storage of multidimensional arrays based on arbitrary tiling相关推荐
- C ++ 数组 | 多维数组(MultiDimensional Arrays)_2
多维数组(MultiDimensional Arrays) C ++支持多维数组. C ++数组可以是任何维度:1到 'n' . 它们使用以下格式初始化: typeOfVariable arrayNa ...
- 深入解析Tensor索引中的Indexing Multi-dimensional arrays问题
写在前面 最近小弟做了一些实验,但是发现我写的代码虽然能够跑通,但是对于gpu的利用率始终在一个比较低的水平,这就很难受,别人的代码2h就跑完了,我得10h,经过排查发现究其原因就是代码的并行化成都不 ...
- Java-基础题目集-Chapter 8,9 Multidimensional Arrays ,Objects and Classes
一.单选题 1.What is the output of the following program?(D) public class Test {public static void main(S ...
- 成功解决IndexError: shape mismatch: indexing arrays could not be broadcast together with shapes (100,)
成功解决IndexError: shape mismatch: indexing arrays could not be broadcast together with shapes (100,) 目 ...
- arrays中copyof复制两个数组_Core Java - Arrays
int 要找出一个array有多少个elements,使用array.length. array一旦被创建之后,无法更改它的大小(size).如果需要动态增加一个数组的大小,可以使用array lis ...
- Chapter 3. Strings, Vectors and Arrays -C++ Primer 5 notes
Chapter 3. Strings, Vectors and Arrays What does built-in types include? chapter 2 array maybe more? ...
- solidity数据类型(四)storage memory calldata modifier前置条件 继承 接口合约 导入库 using...for solc编译
1 数据存储位置 数据测存储类型有storage 和 memory 函数的传入参数和返回参数 都是 memory类型(external函数的入参为calldata类型,只可读,不可重写) 函数局部变量 ...
- the development of c language(转)
c语言之父Dennis Ritchie 写的关于c语言开发历史的文章,来自这里 lisp专家Richard P.Gabriel 的<the Rise of Worse is Better > ...
- 数据结构面试题编程题_您下次编程面试时应该了解的顶级数据结构
数据结构面试题编程题 by Fahim ul Haq 通过Fahim ul Haq Niklaus Wirth, a Swiss computer scientist, wrote a book in ...
最新文章
- 工作10年后,再看String s = new String(xyz) 创建了几个对象?
- 【OpenCV 4开发详解】图像上绘制几何图形
- HDU2083排序题
- 2019年1月份A项目面试纪要
- Linux系统Sudo基本用法
- 学习旧岛小程序 (1) flex 布局
- innerhtml js执行_JS 中 DOM 操作
- 利物浦大学的vlog网站
- CSS之实现二级菜单动态出现
- Kubernetes 部署 Mysql 8.0 数据库(单节点)
- web-midi-api
- 一代霸主的没落——诺基亚
- Google发布了Google Sketchup,完全免费
- win10关机慢!windows10关机慢
- 基于SSM框架流浪猫救援网站的设计与实现 毕业设计-附源码201502
- 图新地球 “请选择目标图层后再下载”
- 红蓝对抗,学习整理 -------雷神众测
- IE可以上网其他浏览器上不了
- 数据分析系列学习之My SQL(一)初识My SQL
- 《全程软件测试》读书心得
热门文章
- 视频教程-微信公众平台深度开发v2.0第3季——二维码、模板消息-微信开发
- Telegram android版 源码分析(二) ——设置代理
- 聚焦网络攻击|知道创宇云安全2018年度网络安全态势报告
- 用python画靶盘九个_““python程序设计:画一个射箭运动所用的箭靶.从小到大分别黄,红,蓝,黑,白色的同...
- 安卓产品方案开发广告机案例
- 用HEdit解决因修改用户文件夹名在打开pip时遇到Fatal error in launcher: Unable to create process using 的问题
- ABP框架—从项目下载到运行详细讲解
- openinstall的价值就是帮助App开发者成功
- python3 输入一个数然后输出他的平方_汇编实验(输入一个数输出其平方值)
- python怎么计算百分比_python计算两个数的百分比方法