All Projects → baotonglu → Dash

baotonglu / Dash

Licence: mit
Scalable Hashing on Persistent Memory

Projects that are alternatives of or similar to Dash

Pibench
Benchmarking framework for index structures on persistent memory
Stars: ✭ 46 (-46.51%)
Mutual labels:  index, nvm
pufferfish
An efficient index for the colored, compacted, de Bruijn graph
Stars: ✭ 94 (+9.3%)
Mutual labels:  hash, index
Postcss Hash Classname
PostCSS plugin to append hash string to your css class name.
Stars: ✭ 57 (-33.72%)
Mutual labels:  hash
Mhtextsearch
A fast full-text search library for Objective-C
Stars: ✭ 79 (-8.14%)
Mutual labels:  index
Bughunt
A weekly challenge where we share some code and you find a bug in it.
Stars: ✭ 68 (-20.93%)
Mutual labels:  hash
Symbolized
Hash with indifferent access, with keys stored internally as symbols.
Stars: ✭ 58 (-32.56%)
Mutual labels:  hash
Active enumerable
ActiveRecord like query methods for Ruby enumerable collections.
Stars: ✭ 73 (-15.12%)
Mutual labels:  hash
Pysonar2
PySonar2: an advanced semantic indexer for Python
Stars: ✭ 1,074 (+1148.84%)
Mutual labels:  index
Beamsplitter
💎 Beamsplitter - A new (possibly universal) hash that passes SMHasher. Built mainly with a random 10x64 S-box. Also in NodeJS
Stars: ✭ 83 (-3.49%)
Mutual labels:  hash
Biddle
Self-hosted application distribution
Stars: ✭ 66 (-23.26%)
Mutual labels:  hash
Signature Base
Signature base for my scanner tools
Stars: ✭ 1,212 (+1309.3%)
Mutual labels:  hash
Tinspin Indexes
Spatial index library with R*Tree, STR-Tree, Quadtree, CritBit, KD-Tree, CoverTree
Stars: ✭ 64 (-25.58%)
Mutual labels:  index
Cape
String encryption for Arduino, limited microcontrollers and other embedded systems.
Stars: ✭ 58 (-32.56%)
Mutual labels:  hash
Dotfiles
What tools and plugins I use for web development?
Stars: ✭ 73 (-15.12%)
Mutual labels:  nvm
Cryptonight
➿ Pure Go/ASM implementation of CryptoNight hash function with its variants, without any CGO binding.
Stars: ✭ 58 (-32.56%)
Mutual labels:  hash
Pictogrify
🎭 Generate unique pictograms from any text
Stars: ✭ 80 (-6.98%)
Mutual labels:  hash
Merkle Tools
Tools for creating Merkle trees, generating merkle proofs, and verification of merkle proofs.
Stars: ✭ 54 (-37.21%)
Mutual labels:  hash
Learned Indexes
Implementation of BTree part for paper 'The Case for Learned Index Structures'
Stars: ✭ 64 (-25.58%)
Mutual labels:  index
Digestif
Simple hash algorithms in OCaml
Stars: ✭ 69 (-19.77%)
Mutual labels:  hash
Pluck all
A more efficient way to get data from database. Like #pluck method but return array of hashes instead.
Stars: ✭ 83 (-3.49%)
Mutual labels:  hash

Dash: Scalable Hashing on Persistent Memory

Persistent memory friendly hashing index, to appear at VLDB 2020.

More details are described in our VLDB paper below. If you use our work, please cite:

Baotong Lu, Xiangpeng Hao, Tianzheng Wang, Eric Lo:
Dash: Scalable Hashing on Persistent Memory. 
PVLDB 13(8): 1147-1161 (2020)

What's included

  • Dash EH - Proposed Dash extendible hashing
  • Dash LH - Proposed Dash linear Hashing
  • CCEH - PMDK patched CCEH variant used in our benchmark
  • Level Hashing - PMDK patched level hashing variant used in our benchmark
  • Mini benchmark framework
  • Example program - how to integrate Dash to your application

Fully open-sourced under MIT license.

Building

Dependencies

We tested our build with Linux Kernel 5.5.3 and GCC 9.2. You must ensure that your Linux kernel version >= 4.17 and glibc >=2.29 since we use MAP_FIXED_NOREPLACE in our customized PMDK.

The external dependencies are our customized PMDK and epoch manager, which are also open-sourced.

Compiling

Assuming to compile under a build directory:

git clone https://github.com/baotonglu/dash.git
cd dash
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -DUSE_PMEM=ON .. 
make -j

Running benchmark

As stated in our paper, we run the tests in a single NUMA node with 24 physical CPU cores. We pin threads to physical cores compactly assuming thread ID == core ID (e.g., for a dual-socket system, we assume cores 0-23 are located in socket 0, and cores 24-47 in socket 1). To run benchmarks, use the test_pmem executable in the build directory. It supports the following arguments:

./build/test_pmem --helpshort
Usage: 
    ./build/test_pmem [OPTION...]

-index      the index to evaluate:dash-ex/dash-lh/cceh/level (default: "dash-ex")
-op         the type of operation to execute:insert/pos/neg/delete/mixed (default: "full")
-n          the number of warm-up workload (default: 0)
-p          the number of operations(insert/search/delete) to execute (default: 20000000)
-t          the number of concurrent threads (default: 1)
-r          search ratio for mixed workload: 0.0~1.0 (default: 1.0)
-s          insert ratio for mixed workload: 0.0~1.0 (default: 0.0)
-d          delete ratio for mixed workload: 0.0~1.0 (default: 0.0)
-e          whether to register epoch in application level: 0/1 (default: 0)
-k          the type of stored keys: fixed/variable (default: "fixed")
-vl         the length of the variable length key (default: 16)

Check out also the run.sh script for example benchmarks and easy testing of the hash tables.

Example program

To know how to integrate the Dash into your application, check out example.cpp under src. The executable is example under your build directory. Also check CMakeLists.txt to know how to link with dependencies (customized PMDK and epoch manager) for correct build.

Miscellaneous

We noticed a possible mmap bug on our testing environment: MAP_SHARED_VALIDATE is incompatible with MAP_FIXED_NOREPLACE (since Linux 4.17). To ensure safe memory mapping, we modified the original PMDK to use MAP_SHARED rather than MAP_SHARED_VALIDATE, which has the same functionality as the former one except for extra flag validation. For a more detailed explanation and minimal reproducible code, please check out our blog post about this issue.

Contact

For any questions, please contact us at [email protected] and [email protected].

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].