An open API service indexing awesome lists of open source software.

https://github.com/sfu-dis/tabular

Tabular: Efficiently Building Efficient Indexes (VLDB 2025)
https://github.com/sfu-dis/tabular

Last synced: 2 months ago
JSON representation

Tabular: Efficiently Building Efficient Indexes (VLDB 2025)

Awesome Lists containing this project

README

        

# Tabular: Efficiently Building Efficient Indexes

Tabular is a new parallel programming library that models data structures as ACID relational tables to provide concurrency and persistence transparently.

Tabular turns a single-threaded in-memory index into a concurrent, persistent counterpart without requiring the developer using parallel programming techniques, easing programming effort.

More details are described in our VLDB 2025 paper below (preprint [here](https://www.cs.sfu.ca/~tzwang/tabular.pdf)). If you use our work, please cite:
```
Tabular: Efficiently Building Efficient Indexes.
Ziyi Yan, Mohamed Farouk Drira, Tianxun Hu and Tianzheng Wang.
VLDB 2025
```

## Setup
### Hugepages
```
echo | sudo tee /sys/kernel/mm/hugepages/hugepages-1048576kB/nr_hugepages
```
### Dependencies

#### Build tools
- gcc
- cmake
- python
- cpplint
#### Libraries
- glog
- gtest
- tbb
- jemalloc

## Build
```shell
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release # RelWithDebInfo, Debug
make -j`nproc`
```

## Index Benchmarks
### Variants
Hand-crafted:
- `btree_olc_bench_256`
- `hashtable_olc_bench_256`
- `art_olc_bench`

Tabular:
- `btree_inline_tabular_bench_256`
- `hashtable_inline_tabular_bench_256`
- `art_tabular_bench`

Naive-OCC:
- `btree_inline_tabular_materialized_bench_256`
- `hashtable_inline_tabular_materialized_bench_256`
- `art_tabular_materialized_bench`

Naive-MVCC:
- `btree_tabular_bench_256`
- `hashtable_mvcc_tabular_bench_256`

Pessimistic Locking:
- `btree_lc_stdrw_bench_256`
- `btree_lc_tbbrw_bench_256`
- `hashtable_lc_stdrw_bench_256`
- `hashtable_lc_tbbrw_bench_256`
- `art_lc_stdrw_bench`
- `art_lc_tbbrw_bench`

Other indexes:
- `bptree_bench_1K_16_16`
- `masstree_bench`

### Workload Types
- `C`: Lookup-only
- `G`: Lookup-mostly
- `A`: Balanced
- `H`: Update-mostly
- `F`: Update-only

### Command-line interface
```shell
# Volatile
$BUILD_DIR/benchmarks/ycsb/ycsb_ --workload --threads --records --duration
# Persistent (only works for Tabular indexes)
$BUILD_DIR/benchmarks/ycsb/ycsb_ --workload --threads --records --duration --persistent --log-dir=
```

## TPC-C Benchmarks
```shell
$BUILD_DIR/benchmarks/tpcc/tpcc_masstree_bench --duration --threads --scale-factor
$BUILD_DIR/benchmarks/tpcc/tpcc_tabular_btree_bench --duration --threads --scale-factor
```

## Notes
To minimize NUMA effect, run benchmarks with `numactl --membind 0` or `numactl --interleave 0,1,..,` when threads are within one socket or across `N` sockets.

Every benchmark binary accepts `--help` to print complete available options.