pouya1364/probabilistic-laravel

Laravel package integration for probabilistic-php — Bloom Filter, Counting Bloom Filter, Cuckoo Filter, Count-Min Sketch, and HyperLogLog via the service container and a Facade.

Maintainers

Package info

github.com/pouya1364/probabilistic-laravel

pkg:composer/pouya1364/probabilistic-laravel

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v0.1.0 2026-06-21 10:13 UTC

This package is auto-updated.

Last update: 2026-06-21 10:37:39 UTC


README

Laravel integration for pouya1364/probabilistic-php. Define named, pre-configured probabilistic data structures once in config, then resolve them anywhere in your app — the same pattern Laravel uses for cache stores, queue connections, and database connections.

Supported structures: Bloom Filter, Counting Bloom Filter, Cuckoo Filter, Count-Min Sketch, and HyperLogLog. See the core library for the algorithm documentation.

Requirements

  • PHP 8.2+
  • Laravel 10, 11, 12, or 13

Installation

composer require pouya1364/probabilistic-laravel

The service provider and the Probabilistic facade are registered automatically via package auto-discovery — no manual registration needed.

Publish the config file:

php artisan vendor:publish --tag=probabilistic-config

This creates config/probabilistic.php.

Configuration

Each structure type holds any number of independently named instances, so a single app can size several filters differently for different purposes. Keys are written in snake_case.

// config/probabilistic.php

return [
    'bloom_filters' => [
        'emails_seen' => ['expected_items' => 100000, 'false_positive_rate' => 0.01],
    ],
    'counting_bloom_filters' => [
        'active_sessions' => ['expected_items' => 50000, 'false_positive_rate' => 0.01],
    ],
    'cuckoo_filters' => [
        'rate_limited_ips' => ['expected_items' => 100000],
    ],
    'count_min_sketches' => [
        'page_view_counts' => ['width' => 2000, 'depth' => 5],
    ],
    'hyperloglogs' => [
        'unique_visitors' => ['precision' => 14],
    ],
];
Group Parameters
bloom_filters expected_items (int), false_positive_rate (float)
counting_bloom_filters expected_items (int), false_positive_rate (float)
cuckoo_filters expected_items (int)
count_min_sketches width (int), depth (int)
hyperloglogs precision (int, default 14)

Each instance is built once, on first access, and reused for the lifetime of the request.

Usage

Facade

use ProbabilisticLaravel\Facades\Probabilistic;

$emails = Probabilistic::bloomFilter('emails_seen');
$emails->add('jane@example.com');

if ($emails->mightContain('jane@example.com')) {
    // probably seen before
}

Probabilistic::hyperLogLog('unique_visitors')->add($visitorId);
$estimate = Probabilistic::hyperLogLog('unique_visitors')->estimate();

Available accessors (each takes an optional instance name, defaulting to 'default'):

Probabilistic::bloomFilter('emails_seen');
Probabilistic::countingBloomFilter('active_sessions');
Probabilistic::cuckooFilter('rate_limited_ips');
Probabilistic::countMinSketch('page_view_counts');
Probabilistic::hyperLogLog('unique_visitors');

The facade exposes a @method static docblock for each accessor, so IDEs autocomplete the methods and their return types.

Without the facade

If you prefer not to use facades, resolve the manager from the container or inject it directly — both return the same singleton instance:

// Container
$manager = app('probabilistic');
$filter = $manager->bloomFilter('emails_seen');
use ProbabilisticLaravel\ProbabilisticManager;

final class SignupController
{
    public function __construct(private readonly ProbabilisticManager $probabilistic) {}

    public function store(): void
    {
        $this->probabilistic->bloomFilter('emails_seen')->add(/* ... */);
    }
}

Listing configured instances

php artisan probabilistic:list

Prints a table of every configured instance and its parameters, grouped by structure type. Empty groups are omitted.

Related packages

Testing

composer test

License

MIT