|The following Wikipedia contributors may be personally or professionally connected to the subject of this article. Relevant policies and guidelines may include conflict of interest, autobiography, and neutral point of view.|
- (non-AfC-reviewer comment) If possible, it would be great to get a layman explanation in the introduction, the guideline Wikipedia:Make technical articles understandable might be of help. Would also be useful to mention what the use cases are. – Þjarkur (talk) 00:52, 17 March 2019 (UTC)
A cuckoo filter is a space-efficient probabilistic data structure to serve approximated set-membership queries like a Bloom filter. A cuckoo filter can also delete existing items, which is not supported by Bloom filters. In addition, for applications that store many items and target moderately low false positive rates, cuckoo filters can achieve lower space overhead than space-optimized Bloom filters.
Cuckoo filters were first described in 2014.
Algorithm description[edit | edit source]
A cuckoo filter uses a 4-way set-associative hash table based on cuckoo hashing to store the fingerprints of all items. Particularly, the two potential buckets in the table for a given item '"`UNIQ--postMath-00000001-QINU`"' required by cuckoo hashing are calculated by the following two hash functions (termed as partial-key cuckoo hashing):
Applying the above two hash functions to construct a cuckoo hash table enables item relocation based only on fingerprints when retrieving the original item is impossible. As a result, when inserting a new item that requires to relocate an existing item '"`UNIQ--postMath-00000004-QINU`"', the other possible location '"`UNIQ--postMath-00000005-QINU`"' in the table for this item '"`UNIQ--postMath-00000006-QINU`"' kicked out from bucket '"`UNIQ--postMath-00000007-QINU`"' is calculated by
Based on partial-key cuckoo hashing, the hash table can achieve both highly-utilization (thanks to cuckoo hashing), and compact because only fingerprints are stored. Lookup and delete operations of cuckoo filter are straightforward. There are a maximum of two locations to check by '"`UNIQ--postMath-00000009-QINU`"' and '"`UNIQ--postMath-0000000A-QINU`"'. If found, the appropriate lookup or delete operation can be performed in '"`UNIQ--postMath-0000000B-QINU`"' time. More theoretical analysis of cuckoo filter can be found in related literatures.
Comparison to Bloom filters[edit | edit source]
A cuckoo filter is similar to a Bloom filter in way that they both are very fast and compact, and they may both return false positives answers to set-membership queries:
- A space-optimal Bloom filters use '"`UNIQ--postMath-0000000C-QINU`"' bits of space per inserted key, where '"`UNIQ--postMath-0000000D-QINU`"' is the false positive rate. A cuckoo filter requires '"`UNIQ--postMath-0000000E-QINU`"' where '"`UNIQ--postMath-0000000F-QINU`"' is the hash table load factor which can be '"`UNIQ--postMath-00000010-QINU`"' based on cuckoo filters' setting. Note that, the information theoretical lower bound requires '"`UNIQ--postMath-00000011-QINU`"' bits for each item.
- On a positive lookup, a space-optimal Bloom filter requires a constant '"`UNIQ--postMath-00000012-QINU`"' memory accesses into the bit array, whereas a cuckoo filter require constant two lookups at most.
- Cuckoo filters have degraded insertion speed after reaching a load threshold when table expanding is recommended. In contrast, Bloom filters can keep inserting new items at the cost of higher false positive rate before expansion.
Limitations[edit | edit source]
- A cuckoo filter can only delete items that are known to be inserted before.
- Insert can fail and rehashing is required like other cuckoo hash table. Note that, the amortized insertion complexity is still '"`UNIQ--postMath-00000013-QINU`"'
References[edit | edit source]
Others articles of the Topic Computer programming : PWCT (software), Koseven (framework), Ada Lovelace, Lua (programming language), Observable (Computing), AdoptOpenJDK, GrapheneOS
Some use of "" in your query was not closed by a matching "".Some use of "" in your query was not closed by a matching "".
- Michael D. Mitzenmacher. "Bloom Filters, Cuckoo Hashing, Cuckoo Filters, Adaptive Cuckoo Filters, and Learned Bloom Filters".
- Fan, Bin; Andersen, Dave G.; Kaminsky, Michael; Mitzenmacher, Michael D. (2014). Cuckoo filter: Practically better than Bloom. Proc. 10th ACM Int. Conf. Emerging Networking Experiments and Technologies (CoNEXT '14). pp. 75–88. doi:10.1145/2674005.2674994. ISBN 9781450332798.
- David Eppstein (22 June 2016). Cuckoo filter: Simplification and analysis. In 15th Scandinavian Symposium and Workshops on Algorithm Theory, SWAT 2016. Reykjavik, Iceland. pp. 8:1–8:12.
- Noah Fleming. "Cuckoo Hashing and Cuckoo Filters" (PDF).
- Pagh, Rasmus; Rodler, Flemming Friche (2001). "Cuckoo Hashing". Algorithms — ESA 2001. Lecture Notes in Computer Science. 2161. pp. 121–133. doi:10.1007/3-540-44676-1_10. ISBN 978-3-540-42493-2.
[edit | edit source]
This article "Cuckoo filter" is from Wikipedia. The list of its authors can be seen in its historical and/or the page Edithistory:Cuckoo filter. Articles copied from Draft Namespace on Wikipedia could be seen on the Draft Namespace of Wikipedia and not main one.