mpope

mpope

Efuse_filter, a Binary Fuse Filter NIF, They're faster and smaller than bloom, cuckoo, and xor filters

Hi all,

This is a zero dependency library that implements a NIF wrapper for a Binary Fuse Filter.

This library is available on GitHub and hex.pm.

Some may remember my previous NIF library, the exor_filter. This library is the successor. A Binary Fuse Filter is a probabilistic datastructure like bloom or xor filters, but they are smaller in size and faster to access.

Here is a small benchmark comparing access time against the xor_filter and a few bloom filters implemented in Erlang, Elixir and Rust. These results were measured using the exor_benchmark repo which has the results of the full benchmark.

Features:

  • Serialization and Deserialization to binary, so it can be sent over the wire.
  • A dirty NIF API for large inputs.
  • Incremental initialization, items can be added over time. Once initialized, no more items can be added, Binary Fuse Filters are immutable.
  • Custom hashing. By default this uses erlang:phash2/1. Passing pre-hashed data is supported.

Here is a small example of how to use it:

filter = :fuse8.new(["cat", "dog", "mouse"]),
:true = :fuse8.contain(filter, "cat"),
:false = :fuse8.contain(filter, "goose").

Thanks for reading!

Where Next?

Popular in Discussions Top

arcanemachine
https://nitter.net/josevalim/status/1744395345872683471 https://twitter.com/josevalim/status/1744395345872683471
New
Jayshua
I recently came across the javascript library htmx. It reminded me a lot of liveview so I thought the community here might be interested....
New
sashaafm
I’m trying to evaluate the best combo/stack for a BEAM Web app. Right now I’m exploring Yaws a bit, after having dealt with Phoenix for a...
New
cvkmohan
The upcoming Phoenix 1.6 release looks very interesting. Became a habit to watch the commits - and - what they are bringing in. phx.gen...
New
Nvim
Elixir appears to be a superior language to Python. I don’t see any advantage of Python over Elixir. Are there any?
New
WolfDan
After doing a port from a c++ library to my project in phoenix I’ve seen that I need a faster way to run this algorithm and I found this ...
New
fireproofsocks
I’ve been working on an Elixir project that has required a lot of scripting. I usually reach for Elixir because I like it more (and in th...
New
marciol
Please, let me know if this kind of discussion already took place in another topic . Hi all, how do you consider if is better to build ...
New
hazardfn
I suppose this question is effectively hackney vs. ibrowse but we are at a point in our project where we have to make a choice between th...
New
chulkilee
Here are the list of HTTP client libraries/wrappers, and some thoughts on HTTP client in general. I’d like to hear from others how they w...
New

Other popular topics Top

axelson
This post is a wiki (feel free to hit the edit button near the bottom right of this post to add your own changes!) This post collects co...
239 48475 226
New
9mm
I am constructing a JSON object (map) and I need to conditionally set a field. I’m trying to write proper elixir-way code… and I’m at a l...
New
Harrisonl
We have an ECS cluster with 4 services, where each task joins a single cluster, via discovery ECS discovery service. Currently when I de...
New
lessless
I believe there are people here who are dealing with CSV files import on the daily basis, and since Excel is a really popular tool there ...
New
JeremM34
Hello, how can I check the Phoenix version ? Thanks !
New
msaraiva
Surface is an experimental library built on top of Phoenix LiveView and its new LiveComponent API that aims to provide a more declarative...
564 43806 214
New
gausby
I asked this very same question on twitter and got some interesting feedback, but I thought it would be a good question to ask here as we...
1207 39523 209
New
rms.mrcs
Hi, I need to transform a list of numbers into a map where the keys are the indexes and the values are the original values of the list. ...
New
nsuchy
Hi. I’ve noticed that Windows Powershell has it’s own IEX command and you cannot access Elixir’s IEX due to the conflict. This isn’t a cr...
New
jaysoifer
Is there a way to rollback a specific migration and only that one (“skipping” all the other ones)? Would mix ecto.rollback -v 200809061...
New

We're in Beta

About us Mission Statement