# Building Efficient Query Engines in a High-Level Language

Save this PDF as:

Size: px
Start display at page:

## Transcription

5 case class HashJoin[B](leftChild: Operator, rightchild: Operator, hash: Record=>B, cond: (Record,Record)=>Boolean) extends Operator { 4 val hm = HashMap[B,ArrayBuffer[Record]]() 5 var it: Iterator[Record] = null 6 def next() : Record = { 7 var t: Record = null 8 if (it == null!it.hasnext) { 9 t = rightchild.findfirst { e => 0 hm.get(hash(e)) match { case Some(hl) => it = hl.iterator; true case None => it = null; false } 4 } 5 } 6 if (it == null!it.hasnext) return null 7 else return it.collectfirst { 8 case e if cond(e,t) => conc(e, t) 9 } get 0 } } (a) The starting Volcano-style implementation. case class HashJoin[B](leftChild: Operator, rightchild: Operator, hash: Record=>B, cond: (Record,Record)=>Boolean) extends Operator { 4 val hm = HashMap[B,ArrayBuffer[Record]]() 5 var it: Iterator[Record] = null 6 def next(t: Record) { 7 var res: Record = null 8 while (res = { 9 if (it == null!it.hasnext) { 0 hm.get(hash(t)) match { case Some(hl) => it = hl.iterator case None => it = null } 4 } 5 if (it == null!it.hasnext) null 6 else it.collectfirst { 7 case e if cond(e,t) => conc(e, t) 8 } get 9 }!= null) parent.next(res) 0 } } (b) After the first two steps of the algorithm. case class HashJoin[B](leftChild: Operator, rightchild: Operator, hash: Record=>B, cond: (Record,Record)=>Boolean) extends Operator { 4 val hm = HashMap[B,ArrayBuffer[Record]]() 5 var it: Iterator[Record] = null 6 def next(t: Record) { 7 if (it == null!it.hasnext) { 8 hm.get(hash(t)) match { 9 case Some(hl) => it = hl.iterator 0 case None => it = null } } while (it!=null && it.hasnext) it.collectfirst { 4 case e if cond(e,t) => parent.next(conc(e,t)) 5 } 6 } 7 } case class HashJoin[B](leftChild: Operator, rightchild: Operator, hash: Record=>B, cond: (Record,Record)=>Boolean) extends Operator { 4 val hm = HashMap[B,ArrayBuffer[Record]]() 5 def next(t: Record) { 6 hm.get(hash(t)) match { 7 case Some(hl) => hl.foreach { e => 8 if (cond(e,t)) parent.next(conc(e,t)) 9 } 0 case None => {} } } } (c) After the third step of the algorithm. (d) The final result after additional optimizations. Figure 5: Transforming a HashJoin from a Volcano engine to a Push Engine. The lines highlighted in red and blue are removed and added, respectively. All branches and intermediate iterators are automatically eliminated. The open function (not shown) is handled accordingly. we reach a materialization point. This organization significantly improves cache locality and branch prediction [5]. However, this dataflow optimization comes at the cost of requiring an API change (from an iterator to a consumer/producer model). This in turn necessitates rewriting all operators: with traditional approaches, this is a challenging and error-prone task considering that the logic of each individual operator is likely spread over multiple code fragments of complicated low-level software [5]. Given the two types of engines, there exists a methodological way to obtain one from the other. Thus, LegoBase implements both the Volcano model and a push engine, which we mechanically derived from Volcano. We present the high-level ideas of this conversion next, using the HashJoin operator as an example (Figure 5). A physical query plan consists of a set of operators in a tree structure. For each operator, we can extract its children as well as its (single) parent. Operators call the next function of other children operators in the Volcano model to make progress in processing a tuple. An operator can be the caller, the callee or even both depending on its position in the tree (e.g. an operator with no children is only the callee, but an operator in an intermediate position is both). Given a set of operators, we must take special care to (a) reverse the dataflow (turning callees to callers and vice versa) as well as (b) handle stateful operators in a proper way. The optimization handles these cases in the following three steps: Turning callees to callers: When calling a next function in the Volcano model, a single tuple is returned by the callee. In contrast, in a push model, operators call their parents whenever they have a tuple ready. The necessary transformation is straightforward: instead of letting callees return a single tuple, we remove this return statement. Then, we put the whole operator logic inside a while loop which continues until the value that would be returned in the original callee operator is null (operator has completed execution). For each tuple encountered in this loop, we call the next function of the original parent. For scan operators, who are only callees, this step is enough to port these operators to the push-style engine. Turning callers to callees: The converse of the above modification should be performed: the original callers should be converted to callees. To do this, we remove the call to the next function of the child in the original caller, since in the push engine the callee calls the next function of the parent. However, we still need a tuple to process. Thus, this step changes all next functions to take a record as argument, which corresponds to the value that would be returned from a callee in the Volcano engine. Observe that the call to next may be explicit or implicit through functional abstractions like the This assumes no block-style processing, where multiple tuples are first materialized and then returned as a unit. In general, LegoBase avoids materialization whenever possible. 857

7 trait HashMapOpsGen extends HashMapOpsExp { override def lowernode[a](sym: Sym[A], rhs: Def[A]) = rhs match { 4 case HashMapNew[K,V](size,h,eq)=> sym.atphase(lowering){ 5 // Create new IR node for array storing only values 6 val sym = new Array[V](size) 7 // Keep hash and equal functions in new IR node 8 sym.attributes += "hash" -> h 9 sym.attributes += "equals" -> eq 0 sym // The IR node now represents an array } case HashMapGetOrElseUpd(m,k,v)=> sym.atphase(lowering){ // var m now represents an array instead of a hash map 4 // Extract functions 5 val hashf = m.attributes("hash") 6 val equalf = m.attributes("equals") 7 // Get bucket 8 var h = hashf(v) // Inlines hash function 9 var elem = m(h) 0 // Search for element & inline equals function while (elem!= null &&!equalf(elem, k)) elem = elem.next // Not found: create new elem / update pointers 4 if (elem == null) { 5 elem = v() 6 elem.next = m(h) 7 m(h) = elem 8 } 9 elem // The IR node now represents an array element 0 } } // Fill remaining operations accordingly } 4 5 trait StructOpsExpOpt extends StructOpsExp { 6 override def struct[t](elems: Seq[(String,Any)]) = { 7 // Transparently append next field 8 val fields = ("next", manifest[t]) :: elems 9 val name = structname(fields) 40 super.struct(name, fields) 4 } 4 } Figure 7: Specializing HashMaps by converting them to native arrays. The operations are mapped to a set of primitive C constructs. number of expensive memory allocations on the critical path. Second, hashing and comparison functions are called for every lookup. These function calls are usually virtual, causing significant overhead on the critical path. Finally, the data-structures may have to be resized during runtime in order to efficiently accommodate more data. These resizing operations are a significant bottleneck, especially for long-running, computationally expensive queries. Next, we resolve all these issues with our compiler, without changing a single line of the base code of the operators that use these data-structures. This property shows that our approach is practical, in contrast to the complicated, low-level approaches followed by query compilers so far. The optimization, which is shown in Figure 7, takes place during the lowering phase of the compiler (Section.), where high-level Scala IR nodes are mapped to low-level C constructs. It makes use of the following three observations: For our workloads, the information stored on the key is usually a subset of the attributes of the value. Thus, the generic hash maps store redundant data. To avoid this, we convert the hash map to an array that stores only the values, and not the associated key (lines 4-). Then, since we know that the inserted elements are chained together in a hash list, we provision for the next pointer when these are first allocated (e.g. at data loading, outside the critical path, lines 5-4). Thus, we no longer need the keyvalue-next container and we manage to reduce the amount of memory allocations significantly. Second, the hash and equal functions are themselves IR nodes in LMS. Thus, we can automatically inline the body of those functions wherever they are called (lines 8 and of Figure 7), as described in Section.. This significantly reduces the number of function calls (to almost zero), considerably improving branch prediction and cache locality. Finally, to avoid costly maintenance operations on the critical path, we preallocate in advance all the necessary memory space that may be required for the hash map during execution. This is done by specifying a size parameter when allocating the datastructure (line 4). Currently, we obtain this size by performing worst-case analysis on a given query, which means that we possibly allocate much more space that what is actually needed. However, we believe that database statistics can make this estimation very accurate. Finally, we note that data-structure specialization is an example of intra-operator optimization and, thus, each operator can specialize its own data-structures by using similar optimizations.. Changing Data Layout A long-running debate in database literature is the one between row and column stores [, 4, 7]. Even though there are many significant differences between the two approaches in all levels of the database stack, the central contrasting point is the data-layout, i.e. the way data is organized and grouped together. By default LegoBase uses the row layout, since this intuitive data organization facilitated fast development of the relational operators. However, we quickly noted the benefits of using a column layout for efficient data processing. One solution would be to go back and redesign the whole query engine; however this misses the point of our compiler framework. In this section we show how the transition from the row to the column layout can be expressed as an optimization 4. The optimization of Figure 8 performs a conversion from an array of records (row layout) to a record of arrays (column layout), where each array in the column layout stores the values for one attribute. The optimization takes place during the construction of IR nodes concerning arrays, and overrides the corresponding methods, thus providing the new behaviour. For example, when constructing a new array, array_new is called. As with all our optimizations, type information determines the applicability of an optimization: here it is performed only if the array elements are of record type (lines 5,6,7). Otherwise, this transformation is a NOOP and the original code is generated (e.g. an array of Integers remains unchanged). Each optimized operation is basically a straightforward rewriting to a set of operations on the underlying record of arrays. Consider, for example, an update to an array of records (arr(n) = v), where v is a record. We know that the staged representation of arr will be a record of arrays, and that v has the same attributes as arr. So for each of those attributes we extract the corresponding array from arr (line 8) and field from v (line 0); then we can perform the update operation on the extracted array (line 0). This optimization also reveals another benefit of using a staging compiler: developers can create new abstractions in their optimizations, which will be in turn optimized away in subsequent optimization passes. For example, array_apply results in record reconstruction by extracting the individual record fields from the record of arrays (lines 8-9) and then building a new record to hold the result (line ). This intermediate record can be automatically removed using dead code elimination (DCE), as shown in 4 We must note that just changing the data layout does not mean that LegoBase becomes a column store. There are other important aspects which we do not yet handle, and which we plan to investigate in future work. 859

9 Slowdown to LegoBase LLVM GCC Q Q Q Q4 Q5 Q6 Q7 Q8 Q9 Q0 Q Q Q Q4 Q5 Q6 Q7 Q8 Q9 Q0 Q Q Speedup to DBX Volcano-Style (LLVM) Volcano-Style (GCC) Compiler of HyPer Compiler of HyPer (sim.) LegoBase (Scala) LegoBase (C) Q Q Q Q4 Q5 Q6 Q7 Q8 Q9 Q0 Q Q Q Q4 Q5 Q6 Q7 Q8 Q9 Q0 Q Q TPCH Queries Figure 0: Performance of a Volcano-style engine compiled with LLVM and GCC. Figure : Performance comparison of LegoBase (C and Scala programs) with the code generated by the query compiler of [5]. two compilers, but this turns out to be a very delicate and complicated task as developers can specify flags which actually make performance worse. We argue that it is instead more beneficial for database developers to invest their effort in developing high-level optimizations, like those presented so far in this paper. Second, we show that the limited optimization scope of existing query compilers makes them miss significant optimization opportunities. To do so, we use the compiler of the HyPer database [5] which employs LLVM, a push engine and operator inlining 6. We also simulate this system in LegoBase by enabling the corresponding optimizations in our architecture 7. The results are presented in Figure. We see that, for both the simulated and actual Hy- Per compilers, performance is significantly improved by.5 and.44 on average, respectively. In addition, for 0 out of TPC-H queries, our simulation actually generates code that performs better than that of HyPer. This is because we inline not only the operators interfaces but also all data-structures and utilities leading to fewer function calls and better cache locality 8. More importantly, this figure shows that by using the data layout and data structures optimizations of LegoBase (which are not performed by the query compiler of HyPer), we can get an additional 5. speedup, for a total average 7.7 performance improvement with all optimizations enabled. This is a result of the improved cache locality and branch prediction, as shown in Figure. More specifically, there is an improvement of 0% and.54 on average for the two metrics, respectively, between DBX and LegoBase. In addition, the maximum, average and minimum difference in the number of CPU instructions executed in HyPer is.98,.54, and 5% more, respectively compared to LegoBase. The data-structure and column layout optimizations cannot be provided by existing query compilers as they target pre-compiled DBMS components which exist outside their optimization scope. This shows that, by extending the optimization scope, LegoBase can outperform existing compilation techniques for all TPC-H queries. Finally, we prove that the abstraction without regret vision necessitates our source-to-source compilation to C. To do so, we present performance results for the best Scala program; that is the program generated by applying all optimizations to the Scala output. 6 We also experimented with another in-memory DBMS that compiles SQL queries to native C++ code on-the-fly. However, we were unable to configure the system so that it performs well compared to the other systems. Thus, we omit its results from this section. 7 In its full generality, the transformation between a Volcano and a push engine is still under development. For the results presented here, we have implemented the push version directly since, in our case, the code of the push engine turns out to be significantly simpler and easier to understand than the Volcano code. 8 We note that the simulated and actual HyPer systems may use different physical query plans and data-structures implementation. These are the main reasons for the different performance observed in Figure between the two systems in some queries. We observe that the performance of Scala cannot compete with that of the optimized C code, and is on average.5 slower. Profiling information gathered with the perf tool of Linux reveals the following three reasons for the worse performance of Scala: (a) There are 0% to.4 more branch mispredictions, (b) The percentage of LLC misses is 0% to.8 higher, and more importantly, (c) Scala executes up to 5.5 more CPU instructions 9. Of course, these inefficiencies are to a great part due to the Java Virtual Machine and not specific to Scala. Note that the optimized Scala program is competitive to DBX: for 8 out of queries, Scala outperforms the commercial DBX system. This is because we remove all abstractions that incur significant overhead for Scala. For example, the performance of Q8, which builds a large hash map, is improved by 45 when applying our data-structure specializations. 4.. Impact of Compiler Optimizations From the results presented so far, we observe that our optimizations do not equally benefit the performance of all queries, however they never result in negative performance impact. Here, we provide additional information about the performance improvement expected when applying one of our optimizations. These results are presented in Figure. In general, the impact of an optimization depends on the characteristics of a query. For the data-structure specialization (Figure a), the improvement is proportional to the amount of datastructure operations performed. We observe that the hash map abstraction performs respectably for few operations. However, as we increase the amount of data that are inserted into these maps, their performance significantly drops and, thus, our specialization gives significant performance benefits. For the column layout optimization (Figure b), the improvement is proportional to the percentage of attributes in the input relations that are actually used. TPC-H queries reference 4% - 68% and, for this range, the optimization gives a.5 to 5% improvement, which degrades as more attributes are referenced. This is expected as the benefits of the column layout are evident when this layout can skip a number of unused attributes, thus significantly reducing cache misses. Synthetic queries on TPC-H data referencing 00% of the attributes show that, in this case, the column layout actually yields no benefit, and it is slightly worse than the row layout. This figure also shows that the performance improvement of both optimizations is not directly dependent on the number of operators, as queries with the same number of operators can exhibit completely different behaviour regarding data-structure and attributes references. For the inlining optimization (Figure c) we observe that, when all operators are considered, inlining does not improve performance as we move from three to seven operators. This is because the improvement obtained from inlining depends on which operators are 9 These results were confirmed with Intel s VTune profiler. 86

10 Speedup Speedup Number of operators Number of DS operations (millions) Speedup Speedup Number of operators.5 TPC-H queries Percentage of attributes used Speedup Speedup Number of operators Number of joins Speedup More operators Q Q6 Q4 Q Q Q4 Q5 Q7 Q9 Q Q Q6 Q8 Q0 Q Q Q0 Q5 Q7 Q9 Q Q8 (a) Data Structure Opt. (b) Change Data Layout (c) Operator Inlining (d) Push Engine Opt. Figure : Impact of different optimizations on query execution time. The baseline is a Volcano-style engine. Branch Mispred. Cache Misses Q Q Q Q Q Q Q4 Q4 Q5 Q5 Q6 Q6 Q7 Q7 Q8 Q8 Q9 Q9 Q0 Q0 Q Q Q Q Q Q Q4 Q4 DBX Hyper LegoBase Q5 Q6 Q7 Q8 Q9 Q0 Q Q Q5 Q6 Q7 Q8 Q9 Q0 Q Q Coding Effort Scala LOC Average Speedup Operator Inlining 0.07 Push Engine Opt. Week 400 [6].6 Data Structure Opt. 4 Days 59.6 Change Data Layout Days 0.8 Other Misc. Opt. Days 4 0 LegoBase Operators Month 48 LMS Modifications Months 95 Various Utilities Week 58 Total 4 Months Figure : Percentage of cache misses and branch mispredictions for DBX, HyPer and LegoBase for all TPC-H queries. being inlined. We observe that if we consider inlining only join operators then the performance improves almost linearly as the number of join operators in a query plan increases. This is an important observation, as for very large queries, our system may have to choose which operators to inline (e.g. to avoid the code not fitting in the instruction cache). If that is the case, this experiment shows that the compiler framework should merit inlining joins instead of simpler operators (e.g. scans or aggregations). Finally, the performance improvement gained by the pull to push optimization (Figure d) depends on the complexity of the execution path of a query. This is a hard metric to visualize, as the improvement depends not only on how many operators are used, but also on their type, their position in the overall query plan and how much each of them affects branch prediction and cache locality. For instance, queries Q5 to Q in the figure have the same number of operators, but the performance improvement gained varies significantly. At the same time Q has half the number of operators, but this optimization helps more: the push engine significantly simplifies the complex execution paths of the Left Outer Join operator used by this query. A similar observation about the complexity of execution paths holds for Q as well. 4. Productivity Evaluation An important point of this paper is that the performance of query engines can be improved without much programming effort. Next, we present the productivity/performance evaluation of our system, which is summarized in Table. We observe two things. First, by programming at a high-level we can provide a fully functional system within a small amount of time and lines of code required. For LegoBase, the majority of this effort was invested in extending the LMS compiler so that it generates C code (LMS by default outputs Scala). As a result of the reduced code size, we spent less time on debugging the system, thus focusing on developing new useful optimizations. Development of LegoBase required, including debugging time, four months for only one programmer. Second, each optimization requires only Table : Programming effort required for each LegoBase component along with the average speedup obtained from using it. a few hundred lines of high-level code to provide significant performance improvements. More specifically, for 900 LOC Lego- Base is improved by 7.7, as we described in the previous section. Source-to-source compilation is critical to achieving this behaviour, as the combined size of the operators and optimizations of Lego- Base is 40 times less than the code size for all TPC-H queries written in C. Finally, in contrast to low-level query compilers which must themselves provide operator inlining, LMS provides this optimization for free. We believe these properties prove the productivity merit of the abstraction without regret vision. 4. Compilation Overheads Finally, we analyze the compilation time for the C programs of all TPC-H queries. Our results are presented in Figure 4, where the y-axis corresponds to the time to (a) optimize an incoming query in our system and generate the C code, and, (b) the time CLang requires before producing the final C executable. We see that, in general, all TPC-H queries require less than.5 seconds to compile. We argue that this is an acceptable compilation overhead, especially for analytical queries like those in TPC-H that are typically known in advance and which process huge amounts of data. In this case, a compilation overhead of some seconds is negligible compared to the total execution time. This result proves that our approach can be used in practice for quickly compiling query engines. In addition, the optimization time is, as expected, proportional to the number of joins in its physical query plan. This is because our compiler must optimize more data-structures and operators as the number of joins increases. Finally, we note that if we generate Scala code instead of C, then compiling the final optimized Scala programs requires 7. more time on average. To some extent this is expected as calling the Scala 0 The improvement of these optimizations is counted among the other optimizations. One exception to this rule is Q. This query uses the Window Operator which is expensive to optimize in our implementation. 86

### ProTrack: A Simple Provenance-tracking Filesystem

ProTrack: A Simple Provenance-tracking Filesystem Somak Das Department of Electrical Engineering and Computer Science Massachusetts Institute of Technology das@mit.edu Abstract Provenance describes a file

### Characteristics of Java (Optional) Y. Daniel Liang Supplement for Introduction to Java Programming

Characteristics of Java (Optional) Y. Daniel Liang Supplement for Introduction to Java Programming Java has become enormously popular. Java s rapid rise and wide acceptance can be traced to its design

### In-Memory Data Management for Enterprise Applications

In-Memory Data Management for Enterprise Applications Jens Krueger Senior Researcher and Chair Representative Research Group of Prof. Hasso Plattner Hasso Plattner Institute for Software Engineering University

### Java Virtual Machine: the key for accurated memory prefetching

Java Virtual Machine: the key for accurated memory prefetching Yolanda Becerra Jordi Garcia Toni Cortes Nacho Navarro Computer Architecture Department Universitat Politècnica de Catalunya Barcelona, Spain

### Interpreters and virtual machines. Interpreters. Interpreters. Why interpreters? Tree-based interpreters. Text-based interpreters

Interpreters and virtual machines Michel Schinz 2007 03 23 Interpreters Interpreters Why interpreters? An interpreter is a program that executes another program, represented as some kind of data-structure.

### Compiling Scala to LLVM

Compiling Scala to LLVM Geoff Reedy University of New Mexico Scala Days 2011 Motivation Why Scala on LLVM? Compiles to native code Fast startup Efficient implementations Leverage LLVM optimizations/analyses

### Object Oriented Database Management System for Decision Support System.

International Refereed Journal of Engineering and Science (IRJES) ISSN (Online) 2319-183X, (Print) 2319-1821 Volume 3, Issue 6 (June 2014), PP.55-59 Object Oriented Database Management System for Decision

### 8. Query Processing. Query Processing & Optimization

ECS-165A WQ 11 136 8. Query Processing Goals: Understand the basic concepts underlying the steps in query processing and optimization and estimating query processing cost; apply query optimization techniques;

### Benchmarking Cassandra on Violin

Technical White Paper Report Technical Report Benchmarking Cassandra on Violin Accelerating Cassandra Performance and Reducing Read Latency With Violin Memory Flash-based Storage Arrays Version 1.0 Abstract

### The Sierra Clustered Database Engine, the technology at the heart of

A New Approach: Clustrix Sierra Database Engine The Sierra Clustered Database Engine, the technology at the heart of the Clustrix solution, is a shared-nothing environment that includes the Sierra Parallel

### MAGENTO HOSTING Progressive Server Performance Improvements

MAGENTO HOSTING Progressive Server Performance Improvements Simple Helix, LLC 4092 Memorial Parkway Ste 202 Huntsville, AL 35802 sales@simplehelix.com 1.866.963.0424 www.simplehelix.com 2 Table of Contents

Dana Robinson HDF5 THG 2014-02-24 Document Version 4 As an aid for debugging, the existing ad-hoc metadata cache logging functionality will be made more robust. The improvements will include changes to

### Raima Database Manager Version 14.0 In-memory Database Engine

+ Raima Database Manager Version 14.0 In-memory Database Engine By Jeffrey R. Parsons, Senior Engineer January 2016 Abstract Raima Database Manager (RDM) v14.0 contains an all new data storage engine optimized

Chapter 7 Linked Lists In order to use linked lists, you need to learn how to allocate memory dynamically on the heap and you need to learn about objects. Recall that local variables are temporary which

### In-Memory Databases Algorithms and Data Structures on Modern Hardware. Martin Faust David Schwalb Jens Krüger Jürgen Müller

In-Memory Databases Algorithms and Data Structures on Modern Hardware Martin Faust David Schwalb Jens Krüger Jürgen Müller The Free Lunch Is Over 2 Number of transistors per CPU increases Clock frequency

### Jonathan Worthington Scarborough Linux User Group

Jonathan Worthington Scarborough Linux User Group Introduction What does a Virtual Machine do? Hides away the details of the hardware platform and operating system. Defines a common set of instructions.

### Studio 4. software for machine vision engineers. intuitive powerful adaptable. Adaptive Vision 4 1

Studio 4 intuitive powerful adaptable software for machine vision engineers Introduction Adaptive Vision Studio Adaptive Vision Studio software is the most powerful graphical environment for machine vision

### CS 2112 Spring 2014. 0 Instructions. Assignment 3 Data Structures and Web Filtering. 0.1 Grading. 0.2 Partners. 0.3 Restrictions

CS 2112 Spring 2014 Assignment 3 Data Structures and Web Filtering Due: March 4, 2014 11:59 PM Implementing spam blacklists and web filters requires matching candidate domain names and URLs very rapidly

### High-Volume Data Warehousing in Centerprise. Product Datasheet

High-Volume Data Warehousing in Centerprise Product Datasheet Table of Contents Overview 3 Data Complexity 3 Data Quality 3 Speed and Scalability 3 Centerprise Data Warehouse Features 4 ETL in a Unified

### Persistent Binary Search Trees

Persistent Binary Search Trees Datastructures, UvA. May 30, 2008 0440949, Andreas van Cranenburgh Abstract A persistent binary tree allows access to all previous versions of the tree. This paper presents

### Advanced compiler construction. General course information. Teacher & assistant. Course goals. Evaluation. Grading scheme. Michel Schinz 2007 03 16

Advanced compiler construction Michel Schinz 2007 03 16 General course information Teacher & assistant Course goals Teacher: Michel Schinz Michel.Schinz@epfl.ch Assistant: Iulian Dragos INR 321, 368 64

### Parquet. Columnar storage for the people

Parquet Columnar storage for the people Julien Le Dem @J_ Processing tools lead, analytics infrastructure at Twitter Nong Li nong@cloudera.com Software engineer, Cloudera Impala Outline Context from various

### FP-Hadoop: Efficient Execution of Parallel Jobs Over Skewed Data

FP-Hadoop: Efficient Execution of Parallel Jobs Over Skewed Data Miguel Liroz-Gistau, Reza Akbarinia, Patrick Valduriez To cite this version: Miguel Liroz-Gistau, Reza Akbarinia, Patrick Valduriez. FP-Hadoop:

### Oracle Big Data SQL Technical Update

Oracle Big Data SQL Technical Update Jean-Pierre Dijcks Oracle Redwood City, CA, USA Keywords: Big Data, Hadoop, NoSQL Databases, Relational Databases, SQL, Security, Performance Introduction This technical

### Oracle BI EE Implementation on Netezza. Prepared by SureShot Strategies, Inc.

Oracle BI EE Implementation on Netezza Prepared by SureShot Strategies, Inc. The goal of this paper is to give an insight to Netezza architecture and implementation experience to strategize Oracle BI EE

### Accelerating Enterprise Applications and Reducing TCO with SanDisk ZetaScale Software

WHITEPAPER Accelerating Enterprise Applications and Reducing TCO with SanDisk ZetaScale Software SanDisk ZetaScale software unlocks the full benefits of flash for In-Memory Compute and NoSQL applications

### Data Management for Portable Media Players

Data Management for Portable Media Players Table of Contents Introduction...2 The New Role of Database...3 Design Considerations...3 Hardware Limitations...3 Value of a Lightweight Relational Database...4

### The Insieme Compiler Frontend: A Clang-based C/C++ Frontend. Bernhard Höckner

The Insieme Compiler Frontend: A Clang-based C/C++ Frontend Master Thesis in Computer Science by Bernhard Höckner submitted to the Faculty of Mathematics, Computer Science and Physics of the University

### Distributed Aggregation in Cloud Databases. By: Aparna Tiwari tiwaria@umail.iu.edu

Distributed Aggregation in Cloud Databases By: Aparna Tiwari tiwaria@umail.iu.edu ABSTRACT Data intensive applications rely heavily on aggregation functions for extraction of data according to user requirements.

### 11.1 inspectit. 11.1. inspectit

11.1. inspectit Figure 11.1. Overview on the inspectit components [Siegl and Bouillet 2011] 11.1 inspectit The inspectit monitoring tool (website: http://www.inspectit.eu/) has been developed by NovaTec.

### RevoScaleR Speed and Scalability

EXECUTIVE WHITE PAPER RevoScaleR Speed and Scalability By Lee Edlefsen Ph.D., Chief Scientist, Revolution Analytics Abstract RevoScaleR, the Big Data predictive analytics library included with Revolution

### Performance Tuning for the Teradata Database

Performance Tuning for the Teradata Database Matthew W Froemsdorf Teradata Partner Engineering and Technical Consulting - i - Document Changes Rev. Date Section Comment 1.0 2010-10-26 All Initial document

### Write Barrier Removal by Static Analysis

Write Barrier Removal by Static Analysis Karen Zee and Martin Rinard Laboratory for Computer Science Massachusetts Institute of Technology Cambridge, MA 02139 {kkz, rinard@lcs.mit.edu ABSTRACT We present

### Architectures for Big Data Analytics A database perspective

Architectures for Big Data Analytics A database perspective Fernando Velez Director of Product Management Enterprise Information Management, SAP June 2013 Outline Big Data Analytics Requirements Spectrum

### language 1 (source) compiler language 2 (target) Figure 1: Compiling a program

CS 2112 Lecture 27 Interpreters, compilers, and the Java Virtual Machine 1 May 2012 Lecturer: Andrew Myers 1 Interpreters vs. compilers There are two strategies for obtaining runnable code from a program

### Instruction Set Architecture (ISA)

Instruction Set Architecture (ISA) * Instruction set architecture of a machine fills the semantic gap between the user and the machine. * ISA serves as the starting point for the design of a new machine

### MicroStrategy Course Catalog

MicroStrategy Course Catalog 1 microstrategy.com/education 3 MicroStrategy course matrix 4 MicroStrategy 9 8 MicroStrategy 10 table of contents MicroStrategy course matrix MICROSTRATEGY 9 MICROSTRATEGY

Top Ten Questions to Ask Your Primary Storage Provider About Their Data Efficiency May 2014 Copyright 2014 Permabit Technology Corporation Introduction The value of data efficiency technologies, namely

### Glossary of Object Oriented Terms

Appendix E Glossary of Object Oriented Terms abstract class: A class primarily intended to define an instance, but can not be instantiated without additional methods. abstract data type: An abstraction

### SAP HANA SAP s In-Memory Database. Dr. Martin Kittel, SAP HANA Development January 16, 2013

SAP HANA SAP s In-Memory Database Dr. Martin Kittel, SAP HANA Development January 16, 2013 Disclaimer This presentation outlines our general product direction and should not be relied on in making a purchase

### ABSTRACT 1. INTRODUCTION. Kamil Bajda-Pawlikowski kbajda@cs.yale.edu

Kamil Bajda-Pawlikowski kbajda@cs.yale.edu Querying RDF data stored in DBMS: SPARQL to SQL Conversion Yale University technical report #1409 ABSTRACT This paper discusses the design and implementation

### MapReduce. MapReduce and SQL Injections. CS 3200 Final Lecture. Introduction. MapReduce. Programming Model. Example

MapReduce MapReduce and SQL Injections CS 3200 Final Lecture Jeffrey Dean and Sanjay Ghemawat. MapReduce: Simplified Data Processing on Large Clusters. OSDI'04: Sixth Symposium on Operating System Design

### What's New in SAS Data Management

Paper SAS034-2014 What's New in SAS Data Management Nancy Rausch, SAS Institute Inc., Cary, NC; Mike Frost, SAS Institute Inc., Cary, NC, Mike Ames, SAS Institute Inc., Cary ABSTRACT The latest releases

### Architecting for the next generation of Big Data Hortonworks HDP 2.0 on Red Hat Enterprise Linux 6 with OpenJDK 7

Architecting for the next generation of Big Data Hortonworks HDP 2.0 on Red Hat Enterprise Linux 6 with OpenJDK 7 Yan Fisher Senior Principal Product Marketing Manager, Red Hat Rohit Bakhshi Product Manager,

### In-memory Tables Technology overview and solutions

In-memory Tables Technology overview and solutions My mainframe is my business. My business relies on MIPS. Verna Bartlett Head of Marketing Gary Weinhold Systems Analyst Agenda Introduction to in-memory

### EFFICIENT EXTERNAL SORTING ON FLASH MEMORY EMBEDDED DEVICES

ABSTRACT EFFICIENT EXTERNAL SORTING ON FLASH MEMORY EMBEDDED DEVICES Tyler Cossentine and Ramon Lawrence Department of Computer Science, University of British Columbia Okanagan Kelowna, BC, Canada tcossentine@gmail.com

### An Overview of a Compiler

An Overview of a Compiler Department of Computer Science and Automation Indian Institute of Science Bangalore 560 012 NPTEL Course on Principles of Compiler Design Outline of the Lecture About the course

### Bringing Big Data Modelling into the Hands of Domain Experts

Bringing Big Data Modelling into the Hands of Domain Experts David Willingham Senior Application Engineer MathWorks david.willingham@mathworks.com.au 2015 The MathWorks, Inc. 1 Data is the sword of the

### Generating code for holistic query evaluation Konstantinos Krikellas 1, Stratis D. Viglas 2, Marcelo Cintra 3

Generating code for holistic query evaluation Konstantinos Krikellas 1, Stratis D. Viglas 2, Marcelo Cintra 3 School of Informatics, University of Edinburgh, UK 1 k.krikellas@sms.ed.ac.uk 2 sviglas@inf.ed.ac.uk

### Removing Performance Bottlenecks in Databases with Red Hat Enterprise Linux and Violin Memory Flash Storage Arrays. Red Hat Performance Engineering

Removing Performance Bottlenecks in Databases with Red Hat Enterprise Linux and Violin Memory Flash Storage Arrays Red Hat Performance Engineering Version 1.0 August 2013 1801 Varsity Drive Raleigh NC

### Impala: A Modern, Open-Source SQL Engine for Hadoop. Marcel Kornacker Cloudera, Inc.

Impala: A Modern, Open-Source SQL Engine for Hadoop Marcel Kornacker Cloudera, Inc. Agenda Goals; user view of Impala Impala performance Impala internals Comparing Impala to other systems Impala Overview:

### MapReduce With Columnar Storage

SEMINAR: COLUMNAR DATABASES 1 MapReduce With Columnar Storage Peitsa Lähteenmäki Abstract The MapReduce programming paradigm has achieved more popularity over the last few years as an option to distributed

### low-level storage structures e.g. partitions underpinning the warehouse logical table structures

DATA WAREHOUSE PHYSICAL DESIGN The physical design of a data warehouse specifies the: low-level storage structures e.g. partitions underpinning the warehouse logical table structures low-level structures

### Quantifind s story: Building custom interactive data analytics infrastructure

Quantifind s story: Building custom interactive data analytics infrastructure Ryan LeCompte @ryanlecompte Scala Days 2015 Background Software Engineer at Quantifind @ryanlecompte ryan@quantifind.com http://github.com/ryanlecompte

### Oracle Enterprise Manager 13c Cloud Control

Oracle Enterprise Manager 13c Cloud Control ORACLE TUNING PACK FOR ORACLE DATABASE SUPPORTS CONTAINER DATABASES ORACLE TUNING PACK FOR ORACLE DATABASE Oracle Tuning Pack for Oracle Database offers an extremely

### PART IV Performance oriented design, Performance testing, Performance tuning & Performance solutions. Outline. Performance oriented design

PART IV Performance oriented design, Performance testing, Performance tuning & Performance solutions Slide 1 Outline Principles for performance oriented design Performance testing Performance tuning General

### Understanding SQL Server Execution Plans. Klaus Aschenbrenner Independent SQL Server Consultant SQLpassion.at Twitter: @Aschenbrenner

Understanding SQL Server Execution Plans Klaus Aschenbrenner Independent SQL Server Consultant SQLpassion.at Twitter: @Aschenbrenner About me Independent SQL Server Consultant International Speaker, Author

### In-Memory Columnar Databases HyPer. Arto Kärki University of Helsinki 30.11.2012

In-Memory Columnar Databases HyPer Arto Kärki University of Helsinki 30.11.2012 1 Introduction Columnar Databases Design Choices Data Clustering and Compression Conclusion 2 Introduction The relational

### Binary search tree with SIMD bandwidth optimization using SSE

Binary search tree with SIMD bandwidth optimization using SSE Bowen Zhang, Xinwei Li 1.ABSTRACT In-memory tree structured index search is a fundamental database operation. Modern processors provide tremendous

### Maximizing Hadoop Performance and Storage Capacity with AltraHD TM

Maximizing Hadoop Performance and Storage Capacity with AltraHD TM Executive Summary The explosion of internet data, driven in large part by the growth of more and more powerful mobile devices, has created

### MS SQL Performance (Tuning) Best Practices:

MS SQL Performance (Tuning) Best Practices: 1. Don t share the SQL server hardware with other services If other workloads are running on the same server where SQL Server is running, memory and other hardware

### White Paper. Optimizing the Performance Of MySQL Cluster

White Paper Optimizing the Performance Of MySQL Cluster Table of Contents Introduction and Background Information... 2 Optimal Applications for MySQL Cluster... 3 Identifying the Performance Issues.....

### An Oracle White Paper October 2013. Oracle Data Integrator 12c New Features Overview

An Oracle White Paper October 2013 Oracle Data Integrator 12c Disclaimer This document is for informational purposes. It is not a commitment to deliver any material, code, or functionality, and should

### Chapter 13 File and Database Systems

Chapter 13 File and Database Systems Outline 13.1 Introduction 13.2 Data Hierarchy 13.3 Files 13.4 File Systems 13.4.1 Directories 13.4. Metadata 13.4. Mounting 13.5 File Organization 13.6 File Allocation

### Chapter 13 File and Database Systems

Chapter 13 File and Database Systems Outline 13.1 Introduction 13.2 Data Hierarchy 13.3 Files 13.4 File Systems 13.4.1 Directories 13.4. Metadata 13.4. Mounting 13.5 File Organization 13.6 File Allocation

### Scalable Data Analysis in R. Lee E. Edlefsen Chief Scientist UserR! 2011

Scalable Data Analysis in R Lee E. Edlefsen Chief Scientist UserR! 2011 1 Introduction Our ability to collect and store data has rapidly been outpacing our ability to analyze it We need scalable data analysis

### SQL Server 2012 Performance White Paper

Published: April 2012 Applies to: SQL Server 2012 Copyright The information contained in this document represents the current view of Microsoft Corporation on the issues discussed as of the date of publication.

### Fact Sheet In-Memory Analysis

Fact Sheet In-Memory Analysis 1 Copyright Yellowfin International 2010 Contents In Memory Overview...3 Benefits...3 Agile development & rapid delivery...3 Data types supported by the In-Memory Database...4

### Seeking Fast, Durable Data Management: A Database System and Persistent Storage Benchmark

Seeking Fast, Durable Data Management: A Database System and Persistent Storage Benchmark In-memory database systems (IMDSs) eliminate much of the performance latency associated with traditional on-disk

### Testing Database Performance with HelperCore on Multi-Core Processors

Project Report on Testing Database Performance with HelperCore on Multi-Core Processors Submitted by Mayuresh P. Kunjir M.E. (CSA) Mahesh R. Bale M.E. (CSA) Under Guidance of Dr. T. Matthew Jacob Problem

### EMC DATA DOMAIN SISL SCALING ARCHITECTURE

EMC DATA DOMAIN SISL SCALING ARCHITECTURE A Detailed Review ABSTRACT While tape has been the dominant storage medium for data protection for decades because of its low cost, it is steadily losing ground

### SAP HANA - Main Memory Technology: A Challenge for Development of Business Applications. Jürgen Primsch, SAP AG July 2011

SAP HANA - Main Memory Technology: A Challenge for Development of Business Applications Jürgen Primsch, SAP AG July 2011 Why In-Memory? Information at the Speed of Thought Imagine access to business data,

### III Big Data Technologies

III Big Data Technologies Today, new technologies make it possible to realize value from Big Data. Big data technologies can replace highly customized, expensive legacy systems with a standard solution

### 09336863931 : provid.ir

provid.ir 09336863931 : NET Architecture Core CSharp o Variable o Variable Scope o Type Inference o Namespaces o Preprocessor Directives Statements and Flow of Execution o If Statement o Switch Statement

### Data processing goes big

Test report: Integration Big Data Edition Data processing goes big Dr. Götz Güttich Integration is a powerful set of tools to access, transform, move and synchronize data. With more than 450 connectors,

### CompuScholar, Inc. Alignment to Utah's Computer Programming II Standards

CompuScholar, Inc. Alignment to Utah's Computer Programming II Standards Course Title: TeenCoder: Java Programming Course ISBN: 978 0 9887070 2 3 Course Year: 2015 Note: Citation(s) listed may represent

### Can the Elephants Handle the NoSQL Onslaught?

Can the Elephants Handle the NoSQL Onslaught? Avrilia Floratou, Nikhil Teletia David J. DeWitt, Jignesh M. Patel, Donghui Zhang University of Wisconsin-Madison Microsoft Jim Gray Systems Lab Presented

### A Comparative Study on Vega-HTTP & Popular Open-source Web-servers

A Comparative Study on Vega-HTTP & Popular Open-source Web-servers Happiest People. Happiest Customers Contents Abstract... 3 Introduction... 3 Performance Comparison... 4 Architecture... 5 Diagram...

### From Faust to Web Audio: Compiling Faust to JavaScript using Emscripten

From Faust to Web Audio: Compiling Faust to JavaScript using Emscripten Myles Borins Center For Computer Research in Music and Acoustics Stanford University Stanford, California United States, mborins@ccrma.stanford.edu

### Oracle9i Release 2 Database Architecture on Windows. An Oracle Technical White Paper April 2003

Oracle9i Release 2 Database Architecture on Windows An Oracle Technical White Paper April 2003 Oracle9i Release 2 Database Architecture on Windows Executive Overview... 3 Introduction... 3 Oracle9i Release

### Chapter 3: Operating-System Structures. Common System Components

Chapter 3: Operating-System Structures System Components Operating System Services System Calls System Programs System Structure Virtual Machines System Design and Implementation System Generation 3.1

### Parallel Data Preparation with the DS2 Programming Language

ABSTRACT Paper SAS329-2014 Parallel Data Preparation with the DS2 Programming Language Jason Secosky and Robert Ray, SAS Institute Inc., Cary, NC and Greg Otto, Teradata Corporation, Dayton, OH A time-consuming

### Operating Systems: Internals and Design Principles. Chapter 12 File Management Seventh Edition By William Stallings

Operating Systems: Internals and Design Principles Chapter 12 File Management Seventh Edition By William Stallings Operating Systems: Internals and Design Principles If there is one singular characteristic

### White Paper. Thirsting for Insight? Quench It With 5 Data Management for Analytics Best Practices.

White Paper Thirsting for Insight? Quench It With 5 Data Management for Analytics Best Practices. Contents Data Management: Why It s So Essential... 1 The Basics of Data Preparation... 1 1: Simplify Access

### Mimer SQL Real-Time Edition White Paper

Mimer SQL Real-Time Edition - White Paper 1(5) Mimer SQL Real-Time Edition White Paper - Dag Nyström, Product Manager Mimer SQL Real-Time Edition Mimer SQL Real-Time Edition is a predictable, scalable

### ESS event: Big Data in Official Statistics. Antonino Virgillito, Istat

ESS event: Big Data in Official Statistics Antonino Virgillito, Istat v erbi v is 1 About me Head of Unit Web and BI Technologies, IT Directorate of Istat Project manager and technical coordinator of Web

### Enterprise Service Bus

We tested: Talend ESB 5.2.1 Enterprise Service Bus Dr. Götz Güttich Talend Enterprise Service Bus 5.2.1 is an open source, modular solution that allows enterprises to integrate existing or new applications

### Sawmill Log Analyzer Best Practices!! Page 1 of 6. Sawmill Log Analyzer Best Practices

Sawmill Log Analyzer Best Practices!! Page 1 of 6 Sawmill Log Analyzer Best Practices! Sawmill Log Analyzer Best Practices!! Page 2 of 6 This document describes best practices for the Sawmill universal

### Big data big talk or big results?

Whitepaper 28.8.2013 1 / 6 Big data big talk or big results? Authors: Michael Falck COO Marko Nikula Chief Architect marko.nikula@relexsolutions.com Businesses, business analysts and commentators have

### Syntax Check of Embedded SQL in C++ with Proto

Proceedings of the 8 th International Conference on Applied Informatics Eger, Hungary, January 27 30, 2010. Vol. 2. pp. 383 390. Syntax Check of Embedded SQL in C++ with Proto Zalán Szűgyi, Zoltán Porkoláb

### Lecture 1: Data Storage & Index

Lecture 1: Data Storage & Index R&G Chapter 8-11 Concurrency control Query Execution and Optimization Relational Operators File & Access Methods Buffer Management Disk Space Management Recovery Manager

### BENCHMARKING CLOUD DATABASES CASE STUDY on HBASE, HADOOP and CASSANDRA USING YCSB

BENCHMARKING CLOUD DATABASES CASE STUDY on HBASE, HADOOP and CASSANDRA USING YCSB Planet Size Data!? Gartner s 10 key IT trends for 2012 unstructured data will grow some 80% over the course of the next

### An Oracle White Paper June 2012. High Performance Connectors for Load and Access of Data from Hadoop to Oracle Database

An Oracle White Paper June 2012 High Performance Connectors for Load and Access of Data from Hadoop to Oracle Database Executive Overview... 1 Introduction... 1 Oracle Loader for Hadoop... 2 Oracle Direct

### Xcode Project Management Guide. (Legacy)

Xcode Project Management Guide (Legacy) Contents Introduction 10 Organization of This Document 10 See Also 11 Part I: Project Organization 12 Overview of an Xcode Project 13 Components of an Xcode Project

### GENERIC and GIMPLE: A New Tree Representation for Entire Functions

GENERIC and GIMPLE: A New Tree Representation for Entire Functions Jason Merrill Red Hat, Inc. jason@redhat.com 1 Abstract The tree SSA project requires a tree representation of functions for the optimizers

### Comp 411 Principles of Programming Languages Lecture 34 Semantics of OO Languages. Corky Cartwright Swarat Chaudhuri November 30, 20111

Comp 411 Principles of Programming Languages Lecture 34 Semantics of OO Languages Corky Cartwright Swarat Chaudhuri November 30, 20111 Overview I In OO languages, data values (except for designated non-oo

### CitusDB Architecture for Real-Time Big Data

CitusDB Architecture for Real-Time Big Data CitusDB Highlights Empowers real-time Big Data using PostgreSQL Scales out PostgreSQL to support up to hundreds of terabytes of data Fast parallel processing

### SAP HANA PLATFORM Top Ten Questions for Choosing In-Memory Databases. Start Here

PLATFORM Top Ten Questions for Choosing In-Memory Databases Start Here PLATFORM Top Ten Questions for Choosing In-Memory Databases. Are my applications accelerated without manual intervention and tuning?.