Clast.BloomFilter
0.2.0
dotnet add package Clast.BloomFilter --version 0.2.0
NuGet\Install-Package Clast.BloomFilter -Version 0.2.0
<PackageReference Include="Clast.BloomFilter" Version="0.2.0" />
<PackageVersion Include="Clast.BloomFilter" Version="0.2.0" />
<PackageReference Include="Clast.BloomFilter" />
paket add Clast.BloomFilter --version 0.2.0
#r "nuget: Clast.BloomFilter, 0.2.0"
#:package Clast.BloomFilter@0.2.0
#addin nuget:?package=Clast.BloomFilter&version=0.2.0
#tool nuget:?package=Clast.BloomFilter&version=0.2.0
Clast.BloomFilter
Parquet-format Split Block Bloom Filter (SBBF) with a generic-key facade. AVX2 and ARM NEON accelerated, with a scalar fallback.
Overview
Clast.BloomFilter provides a Split Block Bloom Filter laid out exactly the way the Apache Parquet specification does, so the bytes round-trip with Parquet column-chunk bloom filters and other SBBF implementations. Each block is 256 bits (8 × uint32); a probe touches a single block so the entire query fits in one cache line.
- Two layers.
SplitBlockBloomFilter/SplitBlockBloomFilterBuilderwork in raw bytes and pre-hashedulongkeys — the surface you serialize.BloomFilter<T>/BloomFilterBuilder<T>wrap it with anIHash64<T>for typed, in-process use over arbitrary key types. - SIMD accelerated. AVX2 on x86-64 and ARM NEON on ARM64 take the fast path; a portable scalar fallback runs everywhere else. Hashing is xxHash64.
- Pluggable hashing.
Hash64.Default<T>()mirrorsEqualityComparer<T>.Default, with specializations for the common primitives and aGetHashCode-based fallback for anything else.
Example
using Clast.BloomFilter;
// Build a typed filter sized for ~1000 distinct keys at 1% FPP.
var builder = BloomFilterBuilder<string>.WithCapacity(
expectedDistinct: 1000, fpp: 0.01, maxBytes: 1 << 20);
foreach (var key in keys)
builder.Add(key);
var filter = builder.Build();
if (filter.MightContain("foo"))
{
// Definitely-not vs. probably-yes — go look in the real index.
}
// Serialize the raw bitset to disk in Parquet SBBF wire format.
File.WriteAllBytes("filter.bin", filter.Inner.Data.ToArray());
// Round-trip.
var bytes = File.ReadAllBytes("filter.bin");
var loaded = new BloomFilter<string>(new SplitBlockBloomFilter(bytes));
Target frameworks
netstandard2.0net8.0net10.0
The SIMD-accelerated paths require net8.0 or later (they use the System.Runtime.Intrinsics APIs). The netstandard2.0 build uses the scalar implementation on every platform.
License
Licensed under the Apache License, Version 2.0.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- System.IO.Hashing (>= 9.0.0)
- System.Memory (>= 4.5.5)
-
net10.0
- System.IO.Hashing (>= 9.0.0)
-
net8.0
- System.IO.Hashing (>= 9.0.0)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Clast.BloomFilter:
| Package | Downloads |
|---|---|
|
EngineeredWood.Parquet
A pure-managed Apache Parquet reader and writer for .NET that speaks Apache Arrow, with predicate pushdown, column statistics, and Bloom filters. Preliminary 0.1.0 — APIs may change before 1.0.0. |
GitHub repositories
This package is not used by any popular GitHub repositories.