{
  "schemaVersion": 1,
  "slug": "bloom-filter-allocation",
  "kind": "dataset",
  "title": "Bloom filter allocation: equal memory, different lookup cost",
  "summary": "Fourteen deterministic cases compare equal bits per entry with optimized allocation across three invented runs. Expected probes, not measured latency.",
  "published": "2026-10-12",
  "updated": "2026-10-12",
  "generatedAt": "2026-10-12T00:23:47.762Z",
  "evidenceType": "analytical-model-evaluation",
  "method": "Assume every absent point lookup considers every run, all filter/index metadata is resident, and each false positive costs one equally weighted probe. Use p=exp(-b*ln(2)^2). Minimize sum(p_i) subject to sum(n_i*b_i)=budget and b_i>=0 using KKT conditions and 100-step bounded bisection. Run sizes: 10000, 100000, 1000000 entries. Average budgets: 0, 1, 2, 4, 8, 10, 12 bits per stored entry. No random sample or device I/O.",
  "sourceUrl": "https://cs-people.bu.edu/mathan/publications/sigmod17-dayan.pdf",
  "humanPage": "https://hesela.com/analyses/bloom-filters-lsm-read-cost/",
  "downloadPath": "/data/datasets/bloom-filter-allocation.csv",
  "codePath": "/research/bloom-allocation.mjs",
  "license": "CC0-1.0 for Hesela's original implementation and computed rows; cited papers and documentation retain their own rights.",
  "licenseUrl": "https://creativecommons.org/publicdomain/zero/1.0/",
  "rowCount": 42,
  "caseCount": 14,
  "columns": [
    {
      "name": "policy",
      "type": "string",
      "description": "equal: identical bits per entry; optimized: minimum sum of model false-positive probabilities."
    },
    {
      "name": "budgetBitsPerEntry",
      "type": "number",
      "description": "Total filter budget / total stored entries, bits per entry; not bytes."
    },
    {
      "name": "totalEntries",
      "type": "number",
      "description": "Sum of entries across the three invented runs, not distinct live database keys."
    },
    {
      "name": "budgetBits",
      "type": "number",
      "description": "Total ideal filter bit budget, excluding headers, indexes and caches."
    },
    {
      "name": "run",
      "type": "number",
      "description": "Run number, ascending by entry count; not a RocksDB level identifier."
    },
    {
      "name": "entries",
      "type": "number",
      "description": "Assumed stored entry count in this run."
    },
    {
      "name": "bitsPerEntry",
      "type": "number",
      "description": "Continuous ideal filter bits / this run's entries; not rounded hash counts."
    },
    {
      "name": "filterBits",
      "type": "number",
      "description": "Continuous allocated bits for this run; need not be an integer."
    },
    {
      "name": "falsePositiveProbability",
      "type": "number",
      "description": "Probability for a key absent from this run under exp(-bitsPerEntry * ln(2)^2); 1 means no filter."
    },
    {
      "name": "expectedProbes",
      "type": "number",
      "description": "Sum of run false-positive probabilities for one absent point lookup, repeated for each case's three rows."
    }
  ],
  "limits": [
    "Invented run sizes and deterministic arithmetic, not a measured database population.",
    "Continuous ideal approximation with optimal hash count, not exact finite Bloom-filter probabilities.",
    "Only absent point queries: no successful-query early exit, ranges, cache misses, CPU or compaction cost.",
    "No L0 overlap or key-range pruning model; no claimed RocksDB setting or latency improvement.",
    "Zero bits means the run is always probed, not that an empty Bloom filter rejects all keys.",
    "No confidence interval applies to these computed examples; model applicability remains uncertain.",
    "This is not a replication of Monkey's implementation, experimental workloads or full design-space optimizer."
  ],
  "citations": [
    {
      "id": "bloom",
      "title": "Burton H. Bloom. Space/time trade-offs in hash coding with allowable errors. Communications of the ACM 13(7), 422-426 (1970), method 2. DOI: 10.1145/362686.362692.",
      "url": "https://courses.cs.washington.edu/courses/csep521/21wi/readings/bloom_cacm.pdf",
      "accessed": "2026-10-12"
    },
    {
      "id": "monkey",
      "title": "Niv Dayan, Manos Athanassoulis and Stratos Idreos. Monkey: Optimal Navigable Key-Value Store. SIGMOD 2017, 79-94; sections 2, 4.1 and 5. DOI: 10.1145/3035918.3064054.",
      "url": "https://cs-people.bu.edu/mathan/publications/sigmod17-dayan.pdf",
      "accessed": "2026-10-12"
    },
    {
      "id": "rocks-bloom",
      "title": "RocksDB project. RocksDB Bloom Filter: statistics, full filters and implementation trade-offs. Documentation reviewed 12 October 2026.",
      "url": "https://github.com/facebook/rocksdb/wiki/RocksDB-Bloom-Filter",
      "accessed": "2026-10-12"
    }
  ],
  "artifacts": {
    "modelSha256": "27d18409e319c78d5ace7c8bd92f7a242d40427c66de3a05d19c74397333015d",
    "csvSha256": "531c5e6943f08ccaa58c5e06064e34106d47ea1f03603b6daf976dc0725d63f8"
  },
  "rows": [
    {
      "policy": "equal",
      "budgetBitsPerEntry": 0,
      "totalEntries": 1110000,
      "budgetBits": 0,
      "run": 1,
      "entries": 10000,
      "bitsPerEntry": 0,
      "filterBits": 0,
      "falsePositiveProbability": 1,
      "expectedProbes": 3
    },
    {
      "policy": "equal",
      "budgetBitsPerEntry": 0,
      "totalEntries": 1110000,
      "budgetBits": 0,
      "run": 2,
      "entries": 100000,
      "bitsPerEntry": 0,
      "filterBits": 0,
      "falsePositiveProbability": 1,
      "expectedProbes": 3
    },
    {
      "policy": "equal",
      "budgetBitsPerEntry": 0,
      "totalEntries": 1110000,
      "budgetBits": 0,
      "run": 3,
      "entries": 1000000,
      "bitsPerEntry": 0,
      "filterBits": 0,
      "falsePositiveProbability": 1,
      "expectedProbes": 3
    },
    {
      "policy": "optimized",
      "budgetBitsPerEntry": 0,
      "totalEntries": 1110000,
      "budgetBits": 0,
      "run": 1,
      "entries": 10000,
      "bitsPerEntry": 0,
      "filterBits": 0,
      "falsePositiveProbability": 1,
      "expectedProbes": 3
    },
    {
      "policy": "optimized",
      "budgetBitsPerEntry": 0,
      "totalEntries": 1110000,
      "budgetBits": 0,
      "run": 2,
      "entries": 100000,
      "bitsPerEntry": 0,
      "filterBits": 0,
      "falsePositiveProbability": 1,
      "expectedProbes": 3
    },
    {
      "policy": "optimized",
      "budgetBitsPerEntry": 0,
      "totalEntries": 1110000,
      "budgetBits": 0,
      "run": 3,
      "entries": 1000000,
      "bitsPerEntry": 0,
      "filterBits": 0,
      "falsePositiveProbability": 1,
      "expectedProbes": 3
    },
    {
      "policy": "equal",
      "budgetBitsPerEntry": 1,
      "totalEntries": 1110000,
      "budgetBits": 1110000,
      "run": 1,
      "entries": 10000,
      "bitsPerEntry": 1,
      "filterBits": 10000,
      "falsePositiveProbability": 0.618503137801576,
      "expectedProbes": 1.8555094134047279
    },
    {
      "policy": "equal",
      "budgetBitsPerEntry": 1,
      "totalEntries": 1110000,
      "budgetBits": 1110000,
      "run": 2,
      "entries": 100000,
      "bitsPerEntry": 1,
      "filterBits": 100000,
      "falsePositiveProbability": 0.618503137801576,
      "expectedProbes": 1.8555094134047279
    },
    {
      "policy": "equal",
      "budgetBitsPerEntry": 1,
      "totalEntries": 1110000,
      "budgetBits": 1110000,
      "run": 3,
      "entries": 1000000,
      "bitsPerEntry": 1,
      "filterBits": 1000000,
      "falsePositiveProbability": 0.618503137801576,
      "expectedProbes": 1.8555094134047279
    },
    {
      "policy": "optimized",
      "budgetBitsPerEntry": 1,
      "totalEntries": 1110000,
      "budgetBits": 1110000,
      "run": 1,
      "entries": 10000,
      "bitsPerEntry": 10.066947113725956,
      "filterBits": 100669.47113725956,
      "falsePositiveProbability": 0.007933229448822653,
      "expectedProbes": 0.8805884688193144
    },
    {
      "policy": "optimized",
      "budgetBitsPerEntry": 1,
      "totalEntries": 1110000,
      "budgetBits": 1110000,
      "run": 2,
      "entries": 100000,
      "bitsPerEntry": 5.274417925042236,
      "filterBits": 527441.7925042236,
      "falsePositiveProbability": 0.07933229448822654,
      "expectedProbes": 0.8805884688193144
    },
    {
      "policy": "optimized",
      "budgetBitsPerEntry": 1,
      "totalEntries": 1110000,
      "budgetBits": 1110000,
      "run": 3,
      "entries": 1000000,
      "bitsPerEntry": 0.4818887363585167,
      "filterBits": 481888.7363585167,
      "falsePositiveProbability": 0.7933229448822652,
      "expectedProbes": 0.8805884688193144
    },
    {
      "policy": "equal",
      "budgetBitsPerEntry": 2,
      "totalEntries": 1110000,
      "budgetBits": 2220000,
      "run": 1,
      "entries": 10000,
      "bitsPerEntry": 2,
      "filterBits": 20000,
      "falsePositiveProbability": 0.3825461314703953,
      "expectedProbes": 1.1476383944111859
    },
    {
      "policy": "equal",
      "budgetBitsPerEntry": 2,
      "totalEntries": 1110000,
      "budgetBits": 2220000,
      "run": 2,
      "entries": 100000,
      "bitsPerEntry": 2,
      "filterBits": 200000,
      "falsePositiveProbability": 0.3825461314703953,
      "expectedProbes": 1.1476383944111859
    },
    {
      "policy": "equal",
      "budgetBitsPerEntry": 2,
      "totalEntries": 1110000,
      "budgetBits": 2220000,
      "run": 3,
      "entries": 1000000,
      "bitsPerEntry": 2,
      "filterBits": 2000000,
      "falsePositiveProbability": 0.3825461314703953,
      "expectedProbes": 1.1476383944111859
    },
    {
      "policy": "optimized",
      "budgetBitsPerEntry": 2,
      "totalEntries": 1110000,
      "budgetBits": 2220000,
      "run": 1,
      "entries": 10000,
      "bitsPerEntry": 11.066947113725957,
      "filterBits": 110669.47113725958,
      "falsePositiveProbability": 0.004906727306996677,
      "expectedProbes": 0.5446467310766312
    },
    {
      "policy": "optimized",
      "budgetBitsPerEntry": 2,
      "totalEntries": 1110000,
      "budgetBits": 2220000,
      "run": 2,
      "entries": 100000,
      "bitsPerEntry": 6.274417925042236,
      "filterBits": 627441.7925042236,
      "falsePositiveProbability": 0.04906727306996678,
      "expectedProbes": 0.5446467310766312
    },
    {
      "policy": "optimized",
      "budgetBitsPerEntry": 2,
      "totalEntries": 1110000,
      "budgetBits": 2220000,
      "run": 3,
      "entries": 1000000,
      "bitsPerEntry": 1.4818887363585165,
      "filterBits": 1481888.7363585164,
      "falsePositiveProbability": 0.49067273069966777,
      "expectedProbes": 0.5446467310766312
    },
    {
      "policy": "equal",
      "budgetBitsPerEntry": 4,
      "totalEntries": 1110000,
      "budgetBits": 4440000,
      "run": 1,
      "entries": 10000,
      "bitsPerEntry": 4,
      "filterBits": 40000,
      "falsePositiveProbability": 0.14634154270296498,
      "expectedProbes": 0.439024628108895
    },
    {
      "policy": "equal",
      "budgetBitsPerEntry": 4,
      "totalEntries": 1110000,
      "budgetBits": 4440000,
      "run": 2,
      "entries": 100000,
      "bitsPerEntry": 4,
      "filterBits": 400000,
      "falsePositiveProbability": 0.14634154270296498,
      "expectedProbes": 0.439024628108895
    },
    {
      "policy": "equal",
      "budgetBitsPerEntry": 4,
      "totalEntries": 1110000,
      "budgetBits": 4440000,
      "run": 3,
      "entries": 1000000,
      "bitsPerEntry": 4,
      "filterBits": 4000000,
      "falsePositiveProbability": 0.14634154270296498,
      "expectedProbes": 0.439024628108895
    },
    {
      "policy": "optimized",
      "budgetBitsPerEntry": 4,
      "totalEntries": 1110000,
      "budgetBits": 4440000,
      "run": 1,
      "entries": 10000,
      "bitsPerEntry": 13.066947113725956,
      "filterBits": 130669.47113725956,
      "falsePositiveProbability": 0.0018770495494717307,
      "expectedProbes": 0.20835249999136207
    },
    {
      "policy": "optimized",
      "budgetBitsPerEntry": 4,
      "totalEntries": 1110000,
      "budgetBits": 4440000,
      "run": 2,
      "entries": 100000,
      "bitsPerEntry": 8.274417925042236,
      "filterBits": 827441.7925042236,
      "falsePositiveProbability": 0.018770495494717303,
      "expectedProbes": 0.20835249999136207
    },
    {
      "policy": "optimized",
      "budgetBitsPerEntry": 4,
      "totalEntries": 1110000,
      "budgetBits": 4440000,
      "run": 3,
      "entries": 1000000,
      "bitsPerEntry": 3.481888736358516,
      "filterBits": 3481888.736358516,
      "falsePositiveProbability": 0.18770495494717304,
      "expectedProbes": 0.20835249999136207
    },
    {
      "policy": "equal",
      "budgetBitsPerEntry": 8,
      "totalEntries": 1110000,
      "budgetBits": 8880000,
      "run": 1,
      "entries": 10000,
      "bitsPerEntry": 8,
      "filterBits": 80000,
      "falsePositiveProbability": 0.02141584712068372,
      "expectedProbes": 0.06424754136205116
    },
    {
      "policy": "equal",
      "budgetBitsPerEntry": 8,
      "totalEntries": 1110000,
      "budgetBits": 8880000,
      "run": 2,
      "entries": 100000,
      "bitsPerEntry": 8,
      "filterBits": 800000,
      "falsePositiveProbability": 0.02141584712068372,
      "expectedProbes": 0.06424754136205116
    },
    {
      "policy": "equal",
      "budgetBitsPerEntry": 8,
      "totalEntries": 1110000,
      "budgetBits": 8880000,
      "run": 3,
      "entries": 1000000,
      "bitsPerEntry": 8,
      "filterBits": 8000000,
      "falsePositiveProbability": 0.02141584712068372,
      "expectedProbes": 0.06424754136205116
    },
    {
      "policy": "optimized",
      "budgetBitsPerEntry": 8,
      "totalEntries": 1110000,
      "budgetBits": 8880000,
      "run": 1,
      "entries": 10000,
      "bitsPerEntry": 17.066947113725956,
      "filterBits": 170669.47113725956,
      "falsePositiveProbability": 0.0002746903267995986,
      "expectedProbes": 0.03049062627475542
    },
    {
      "policy": "optimized",
      "budgetBitsPerEntry": 8,
      "totalEntries": 1110000,
      "budgetBits": 8880000,
      "run": 2,
      "entries": 100000,
      "bitsPerEntry": 12.274417925042236,
      "filterBits": 1227441.7925042235,
      "falsePositiveProbability": 0.002746903267995984,
      "expectedProbes": 0.03049062627475542
    },
    {
      "policy": "optimized",
      "budgetBitsPerEntry": 8,
      "totalEntries": 1110000,
      "budgetBits": 8880000,
      "run": 3,
      "entries": 1000000,
      "bitsPerEntry": 7.481888736358516,
      "filterBits": 7481888.736358516,
      "falsePositiveProbability": 0.027469032679959836,
      "expectedProbes": 0.03049062627475542
    },
    {
      "policy": "equal",
      "budgetBitsPerEntry": 10,
      "totalEntries": 1110000,
      "budgetBits": 11100000,
      "run": 1,
      "entries": 10000,
      "bitsPerEntry": 10,
      "filterBits": 100000,
      "falsePositiveProbability": 0.008192549468178961,
      "expectedProbes": 0.024577648404536884
    },
    {
      "policy": "equal",
      "budgetBitsPerEntry": 10,
      "totalEntries": 1110000,
      "budgetBits": 11100000,
      "run": 2,
      "entries": 100000,
      "bitsPerEntry": 10,
      "filterBits": 1000000,
      "falsePositiveProbability": 0.008192549468178961,
      "expectedProbes": 0.024577648404536884
    },
    {
      "policy": "equal",
      "budgetBitsPerEntry": 10,
      "totalEntries": 1110000,
      "budgetBits": 11100000,
      "run": 3,
      "entries": 1000000,
      "bitsPerEntry": 10,
      "filterBits": 10000000,
      "falsePositiveProbability": 0.008192549468178961,
      "expectedProbes": 0.024577648404536884
    },
    {
      "policy": "optimized",
      "budgetBitsPerEntry": 10,
      "totalEntries": 1110000,
      "budgetBits": 11100000,
      "run": 1,
      "entries": 10000,
      "bitsPerEntry": 19.06694711372596,
      "filterBits": 190669.4711372596,
      "falsePositiveProbability": 0.00010508172186952488,
      "expectedProbes": 0.011664071127517267
    },
    {
      "policy": "optimized",
      "budgetBitsPerEntry": 10,
      "totalEntries": 1110000,
      "budgetBits": 11100000,
      "run": 2,
      "entries": 100000,
      "bitsPerEntry": 14.274417925042236,
      "filterBits": 1427441.7925042235,
      "falsePositiveProbability": 0.00105081721869525,
      "expectedProbes": 0.011664071127517267
    },
    {
      "policy": "optimized",
      "budgetBitsPerEntry": 10,
      "totalEntries": 1110000,
      "budgetBits": 11100000,
      "run": 3,
      "entries": 1000000,
      "bitsPerEntry": 9.481888736358519,
      "filterBits": 9481888.736358518,
      "falsePositiveProbability": 0.010508172186952493,
      "expectedProbes": 0.011664071127517267
    },
    {
      "policy": "equal",
      "budgetBitsPerEntry": 12,
      "totalEntries": 1110000,
      "budgetBits": 13320000,
      "run": 1,
      "entries": 10000,
      "bitsPerEntry": 12,
      "filterBits": 120000,
      "falsePositiveProbability": 0.003134028105931708,
      "expectedProbes": 0.009402084317795123
    },
    {
      "policy": "equal",
      "budgetBitsPerEntry": 12,
      "totalEntries": 1110000,
      "budgetBits": 13320000,
      "run": 2,
      "entries": 100000,
      "bitsPerEntry": 12,
      "filterBits": 1200000,
      "falsePositiveProbability": 0.003134028105931708,
      "expectedProbes": 0.009402084317795123
    },
    {
      "policy": "equal",
      "budgetBitsPerEntry": 12,
      "totalEntries": 1110000,
      "budgetBits": 13320000,
      "run": 3,
      "entries": 1000000,
      "bitsPerEntry": 12,
      "filterBits": 12000000,
      "falsePositiveProbability": 0.003134028105931708,
      "expectedProbes": 0.009402084317795123
    },
    {
      "policy": "optimized",
      "budgetBitsPerEntry": 12,
      "totalEntries": 1110000,
      "budgetBits": 13320000,
      "run": 1,
      "entries": 10000,
      "bitsPerEntry": 21.066947113725956,
      "filterBits": 210669.47113725956,
      "falsePositiveProbability": 0.00004019860618943484,
      "expectedProbes": 0.0044620452870272696
    },
    {
      "policy": "optimized",
      "budgetBitsPerEntry": 12,
      "totalEntries": 1110000,
      "budgetBits": 13320000,
      "run": 2,
      "entries": 100000,
      "bitsPerEntry": 16.274417925042233,
      "filterBits": 1627441.7925042233,
      "falsePositiveProbability": 0.0004019860618943489,
      "expectedProbes": 0.0044620452870272696
    },
    {
      "policy": "optimized",
      "budgetBitsPerEntry": 12,
      "totalEntries": 1110000,
      "budgetBits": 13320000,
      "run": 3,
      "entries": 1000000,
      "bitsPerEntry": 11.481888736358515,
      "filterBits": 11481888.736358516,
      "falsePositiveProbability": 0.004019860618943486,
      "expectedProbes": 0.0044620452870272696
    }
  ]
}
