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)
- Host: GitHub
- URL: https://github.com/sfu-dis/tabular
- Owner: sfu-dis
- License: apache-2.0
- Created: 2024-07-22T06:56:18.000Z (10 months ago)
- Default Branch: master
- Last Pushed: 2025-03-15T06:01:56.000Z (2 months ago)
- Last Synced: 2025-03-15T06:29:58.965Z (2 months ago)
- Language: C++
- Homepage:
- Size: 569 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
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.