1.1.3 • Published 4 years ago

hotfilter v1.1.3

Weekly downloads
2
License
ISC
Repository
github
Last release
4 years ago

HotFilter

HotFilter is a library for noticing recurring data. Given a value, it will return the number of times it has (probably) seen that value recently.

const HotFilter = require("hotfilter");

let width = 16;
let depth = 3;
let filter = new HotFilter(width, depth);

for (let item of items) {
    if (filter.touch(item) > 3) {
        // item has probably been seen more than 3 times recently
    }
}

API

new HotFilter (width, depth, demoteAt)

Creates a new filter with depth stages of width bits.

NameDefaultDescription
widthSize of each stage, in bits as a power of 2
depthThe number of filter stages
demoteAt0.01The probability at which stages are demoted

HotFilter is similar to a bloom filter, but with a temporal component. It has depth bitfields of 2^width bits, which replace the traditional multiple hash functions of a bloom filter.

Every time touch() is run, it marks that key in the deepest stage which has not yet seen it. Rather than the single shared field used by bloom filters, this allows for the gradual insertion of values over time while still retaining the high efficiency of bloom filters.

Whenever the probability of collision in the first stage rises above demoteAt, the first stage is discarded (the second stage becomes the first stage etc.) and a new stage is added at the end.

.touch(key)

Marks key as seen, and returns the number of times this key has recently been seen, where 'recently' means within the demotion lifetime of the filter stages.

Note that the greatest number which this method can return is one more than the configured depth.

.get(key)

Get the current depth for key.

1.1.3

4 years ago

1.1.2

4 years ago

1.1.1

4 years ago

1.0.2

4 years ago

1.1.0

4 years ago

1.0.1

4 years ago

1.0.0

4 years ago