Putting Pixels in Place: a Storage Layout Language for Scientific Data
Total Page:16
File Type:pdf, Size:1020Kb
Putting Pixels in Place: A Storage Layout Language for Scientific Data Peter Baumann 1, Shams Fezyabadi 2, Constantin Jucovschi 3 Center for Advanced Systems Engineering (CASE), Jacobs University Bremen Campus Ring 12, Bremen, Germany [email protected] [email protected] [email protected] Abstract— Array-like structures constitute a significant share of scientific data. As arrays are not adequately supported as first-class citizens in traditional database systems, array DBMS technology has emerged offering bespoke query and storage support. On physical level, one challenge in such systems is to find performance efficient partitionings (”tilings”) of large, multi- dimensional arrays. We propose a storage layout language for arrays which embeds into the query language and gives users comfortable, yet concise control over important physical tuning parameters. Further, this sub-language wraps several strategies which we have found useful in face of massive spatio-temporal data sets. We motivate the need for such a language through performance observations, describe Fig. 1. Sample 2-D and 3-D tilings tiling strategies implemented, and introduce the language making these accessible through DML statements. lishing partitionings have been proposed in literature, such as I. INTRODUCTION matrix paging in virtual memory [9], chunking [10][11][12] A decent part of the huge and massively growing scientific and tiling [13]. Investigations have revealed that partitionings data sets consists of regularly sampled phenomena. Such suitably adapted to a query workload can yield performance data structures can be stored conveniently as arrays, in a gains of 5.5 over a default partitioning [13]. This potential for programming language sense. Typically, each single array access performance improvement is confirmed in [12]. containing such spatio-temporal data acquisitions tends to In the rasdaman system, five strategies are currently imple- be large in itself, ranging into multi-Terabytes. It poses a mented which all are parametrized to give further fine-grain substantial challenge to database systems to maintain such control over the storage layout [8]. Figure 1 shows sample data with an adequate level of query support at a satisfying storage layouts of 2-D and 3-D rasdaman objects. performance. In the first step, this functionality has been provided via Array DBMSs such as rasdaman [1][2], AQL [3], AML [4], the C++ API. Handling this requires advanced programming MonetDB [5], TerraLib [6], and the announced SciDB [7] skills. As it turns out, upon database design and population support the array data structure as first-class citizens. Their administrators and possibly also users should have control query languages operate on arrays stored in various ways, over physical storage layout, and this not at the expense of such as BLOBs [8][6], NetCDF files [4], and tuple-based [5]. writing C++ code. Therefore, we have developed a physical All systems have in common that on physical level some storage layout language integrated with the rasdaman query partitioning is applied to the large arrays, be it coarse-grain (as language, which we present in this contribution. We address with BLOBs and NetCDF) or fine-grain (such as tuple-based the consequential question, how can a DBMS give control over storage). In particular for dense arrays, partitioning – which array storage layout in a suitable manner? has been introduced by the image processing community To this end, the remainder is structured as follows. The decades back – can be considered an established, commonly next section introduces basic terminology. Section III presents accepted technique. the storage layout sub-language and the different strategies Obviously, however, there is a large degree of freedom on supported. Related work is addressed in Section IV; Section V how to split arrays. This raises the question: what is the best concludes the paper. – or at least a good – array partitioning scheme? As it turns out, there is not a single optimal scheme, although for specific II. ARRAY MODEL AND TERMINOLOGY raster structures and query workloads good schemes can be We only need the basics of the overall array model. found as we will show below. Several strategies for estab- Although we use the rasdaman model [1] with its rasql query language [2], definitions generalize to virtually all array models we are aware of. An array has some dimension d ¡ 0 with an ordered list of axes (also called dimensions) a1; ::; ad. The extent of an array a, its spatial domain sdompaq, is an axis-parallel subset of Euclidean space Zd. Lower and upper bounds of array axis i are expressed as sdompaqris:lo and sdompaqris:hi, resp. Associated with each coordinate position within the Fig. 2. Types of tiling array’s domain are cells which all share the same cell type. A partitioning of an array into contiguous, non-overlapping is called cubed. Non-aligned tiling contains tiles whose faces sub-arrays – called tiles – is called a tiling. are not aligned with those of their neighbors. This can be Following the ODMG standard [14], arrays in rasdaman are partially aligned with still some hyperplanes shared or totally grouped into collections, the ODMG equivalent of relational non-aligned with no such sharing at all. tables. A rasdaman collection has two columns holding a The following two-pass algorithm inserts an array into the system-maintained OID and the array itself. Both collections database as a tile set. It is a refined version of the one originally and arrays are typed. proposed by Furtado [13]. The method, the code of which is III. ARRAY STORAGE LAYOUT SUB-LANGUAGE shown in Algorithm 1, takes an array a, a target collection c, a tiling specification tilingSpec, and a tile size limit In this section we present a storage layout language for tMax, measured in bytes, to generate a copy of the array data arrays. It allows to define parametrized tiling strategies along in the database which is tiled accordingly. the line introduced previously, and additionally supports spec- ification of the storage encoding inside tiles, compression Algorithm 1 TILEANDINSERTARRAY methods to be applied, and tile index methods. Require: a: array to be retiled and inserted. Looking at relational DBMSs we see that storage related Require: c: collection to receive the new array. directives are part of the DDL. This does not seem wise Require: tilingSpec: parameters describing the tile structure in the array case – too large is the divergence on object requested. level. Therefore, in rasdaman these storage directives are not Require: tMax: maximum tile size attached to array or collection type definition, but to the insert 1: Tiling tileDomain := tile( sdom(a), tilingSpec, tMax ); statement. 2: OID newArray := createArray( c ); The rasql statement for creating a new array instance 3: for all td in tileDomain do in some collection and initializing it with given values is 4: Tile t := m.intersect( td ); augmented with a series of optional storage clauses1: 5: newArray.insertTile( t ); insert into Name 6: end for values ArrayExpr ( StorageDirectives )? tile() A. Tiling Strategies At the heart of this algorithm is function which gener- ates a tiling. Like a virtual function, this is substituted by one The task we focus on can be described as follows: For an of the tiling strategies. Parameter tilingSpec contains further array to be created in the database, create a tiling which input specific to each algorithm. Additionally, all algorithms respects some given constraints. A tiling here is understood as respect the tile size limit. This is useful as a ”security belt” to a description of a set of tiles which together make up the array, not overly penalize queries not following the particular access without overlaps; such a tile description consists of an extent pattern for which the tiling has been generated. An experiment definition and does not contain any cell data, hence it is small comparing several open-source and commerical DBMSs shows in size. We first present the overall insertion algorithm and that a suitable tile size on today’s PC architectures is in then discuss the various strategies plugged into it. A detailed the range of a few Megabytes [15]. Function createArray() description of the rasdaman tiling strategies is available in [8]. establishes a new array in the given collection returning a Following [13], tiling can be categorized into aligned and persistent identifier. Subsequently, the new array is filled tile non-aligned (Figure 2). A tiling is aligned if tiles are de- by tile. This involves fetching input cell batches by calling fined through axis-parallel hyperplanes cutting all through the method intersect() and making the new tiles persistent through domain. Aligned tiling is further classified into regular and insertTile(). In the rasdaman C++ API, this functionality is aligned irregular depending on whether the parallel hyper- available through the class hierarchy shown in Figure 3. planes are equidistant (except possibly for border tiles) or not. 1) Aligned Tiling: In this scenario we assume some varying The special case of equally sized tile edges in all directions degree of knowledge about the subsetting patterns arriving with the queries. We may or may not know the lower corner 1In grammar expressions we enclose optional elements in ”(...)?” to avoid confusion with brackets, which can occur as terminals. Non-terminals are of the request box, the size of the box, or the shape (i.e., capitalized. edge size ratio) of the box. For example, map viewing clients Fig. 4. Aligned tiling examples Fig. 3. Tiling API class hierarchy in rasdaman typically send several requests of fixed extent per mouse click to maintain a cache of tiles in the browser for faster panning. So the extent of the tile is known – or at least that tiles are quadratically. The absolute location often is not known, unless Fig.