Skip to content

Implementation of Google Dremel's storage engine in a custom in-memory DB with query compilation.

Notifications You must be signed in to change notification settings

andreas-zimmerer/imlab-dremel

Repository files navigation

IMLAB-DREMEL

Implement Google Dremel's storage engine in a custom in-memory DB.

The project started out as a small in-memory database written in C++.

The database used Bison and Flex to parse SQL schema information and queries in a REPL environment. Queries were executed by generating query-specific code at runtime as it was proposed in the paper "Efficiently Compiling Efficient Query Plans for Modern Hardware" by T. Neumann. It further implemented "Morsel Driven Parallelism" by Leis et al to efficiently utilize multiple cores during query execution. Also, similar to Hyper, transactions were executing in isolation by utilizing the fork system call.

Later, the database was extended to support nested data by using Google Dremel's memory layout.

Dremel

Benchmark (2020-01-13):

Run on (8 X 2300 MHz CPU s)
2020-01-13 23:51:29
***WARNING*** CPU scaling is enabled, the benchmark real time measurements may be noisy and will incur extra overhead.
------------------------------------------------------------------------------
Benchmark                                       Time           CPU Iterations
------------------------------------------------------------------------------
BM_Construct_Complete_FSM                    2866 ns       2854 ns     308817   342.187k items/s
BM_Shredding_nLanguage/1                     2339 ns       2305 ns     229130   423.709k items/s
BM_Shredding_nLanguage/2                     2472 ns       2469 ns     285045   395.547k items/s
BM_Shredding_nLanguage/4                     3483 ns       3480 ns     199078   280.642k items/s
BM_Shredding_nLanguage/8                     5724 ns       5719 ns     126354   170.771k items/s
BM_Shredding_nLanguage/16                   10980 ns      10967 ns      69030   89.0465k items/s
BM_Shredding_nLanguage/32                   20692 ns      20670 ns      35912   47.2446k items/s
BM_Shredding_nLanguage/64                   39186 ns      39148 ns      17596   24.9456k items/s
BM_Shredding_nLanguage/128                  79295 ns      79207 ns       9867   12.3292k items/s
BM_Shredding_nLanguage/256                 153893 ns     153729 ns       4860   6.35248k items/s
BM_Shredding_nLanguage/512                 300106 ns     299793 ns       2341   3.25745k items/s
BM_Shredding_nLanguage/1024                626635 ns     625904 ns       1205   1.56024k items/s
BM_Load_Generated_Dataset/iterations:2        636 ms        636 ms          2   78.6293MB/s   7.86293k items/s
BM_Assemble_Document                         7438 ns       7433 ns      94086   131.383k items/s
BM_Assembly_Generated_Dataset/64             4303 ms       4299 ms          1   23.2629MB/s   372.207k items/s
BM_Assembly_Generated_Dataset/128            2822 ms       2819 ms          1   35.4741MB/s   283.793k items/s
BM_Assembly_Generated_Dataset/256            4128 ms       4123 ms          1   24.2542MB/s   97.0169k items/s
BM_Assembly_Generated_Dataset/512            4189 ms       4184 ms          1   23.9005MB/s   47.8011k items/s
BM_Assembly_Generated_Dataset/1024           4163 ms       4158 ms          1   24.0477MB/s   24.0477k items/s
BM_Assembly_Generated_Dataset/2048           4296 ms       4291 ms          1   23.3025MB/s   11.6512k items/s
BM_Assembly_Generated_Dataset/4096           4234 ms       4229 ms          1   23.6463MB/s   5.91158k items/s

About

Implementation of Google Dremel's storage engine in a custom in-memory DB with query compilation.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published