cfilter

package module
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 7, 2016 License: MIT Imports: 3 Imported by: 0

README

cfilter: Cuckoo Filter implementation in Go

GoDoc Build Status

Cuckoo filter is a Bloom filter replacement for approximated set-membership queries. Cuckoo filters support adding and removing items dynamically while achieving even higher performance than Bloom filters. For applications that store many items and target moderately low false positive rates, cuckoo filters have lower space overhead than space-optimized Bloom filters. Some possible use-cases that depend on approximated set-membership queries would be databases, caches, routers, and storage systems where it is used to decide if a given item is in a (usually large) set, with some small false positive probability. Alternatively, given it is designed to be a viable replacement to Bloom filters, it can also be used to reduce the space required in probabilistic routing tables, speed longest-prefix matching for IP addresses, improve network state management and monitoring, and encode multicast forwarding information in packets, among many other applications.

Cuckoo filters provide the flexibility to add and remove items dynamically. A cuckoo filter is based on cuckoo hashing (and therefore named as cuckoo filter). It is essentially a cuckoo hash table storing each key's fingerprint. Cuckoo hash tables can be highly compact, thus a cuckoo filter could use less space than conventional Bloom filters, for applications that require low false positive rates (< 3%).

For details about the algorithm and citations please refer to the original research paper, "Cuckoo Filter: Better Than Bloom" by Bin Fan, Dave Andersen and Michael Kaminsky.

Interface

A cuckoo filter supports following operations:

  • Insert(item): insert an item to the filter
  • Lookup(item): return if item is already in the filter (may return false positive results like Bloom filters)
  • Delete(item): delete the given item from the filter. Note that to use this method, it must be ensured that this item is in the filter (e.g., based on records on external storage); otherwise, a false item may be deleted.
  • Size(): return the total number of items currently in the filter

Example Usage

import "github.com/irfansharif/cfilter"

cf := cfilter.NewCFilter()

cf.Insert([]byte("bongiorno"))  // inserts 'bongiorno' to the filter
cf.Lookup([]byte("hola"))       // looks up 'hola' in the filter, may return false positive
cf.Size()                       // returns 1 (given only 'bongiorno' was added)
cf.Delete([]byte("bonjour"))    // tries deleting 'bonjour' from filter, may delete false item

Authors

Irfan Sharif irfanmahmoudsharif@gmail.com

Documentation

Overview

Package cfilter is an implementation of the Cuckoo filter, a Bloom filter replacement for approximated set-membership queries. Cuckoo filters support adding and removing items dynamically while achieving even higher performance than Bloom filters.

As documented in the original implementation:

Cuckoo filters provide the flexibility to add and remove items dynamically. A
cuckoo filter is based on cuckoo hashing (and therefore named as cuckoo
filter). It is essentially a cuckoo hash table storing each key's fingerprint.
Cuckoo hash tables can be highly compact, thus a cuckoo filter could use less
space than conventional Bloom filters, for applications that require low false
positive rates (< 3%).

For details about the algorithm and citations please refer to the original research paper, "Cuckoo Filter: Better Than Bloom" by Bin Fan, Dave Andersen and Michael Kaminsky (https://www.cs.cmu.edu/~dga/papers/cuckoo-conext2014.pdf).

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type CFilter

type CFilter struct {
	// contains filtered or unexported fields
}

CFilter represents a Cuckoo Filter, a probabilistic data store for approximated set membership queries

func NewCFilter

func NewCFilter() *CFilter

NewCFilter returns a new CFilter object. It's Insert, Lookup, Delete and Size behave as their names suggest.

func (*CFilter) Delete

func (cf *CFilter) Delete(item []byte) bool

Delete removes an element (in byte-array form) from the Cuckoo Filter, returns true if element existed prior and false otherwise.

func (*CFilter) Insert

func (cf *CFilter) Insert(item []byte) bool

Insert adds an element (in byte-array form) to the Cuckoo filter, returns true if successful and false otherwise.

func (*CFilter) Lookup

func (cf *CFilter) Lookup(item []byte) bool

Lookup checks if an element (in byte-array form) exists in the Cuckoo Filter, returns true if found and false otherwise.

func (*CFilter) Size

func (cf *CFilter) Size() uint

Size returns the total number of elements added to the Cuckoo Filter.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL