{
  "slug": "monkey",
  "term": "Monkey",
  "aliases": [
    "Optimal Navigable Key-Value Store"
  ],
  "definition": "Monkey is an LSM-tree tuning design that jointly allocates Bloom-filter memory and selects buffer and merge settings to balance modeled lookup and update costs.",
  "note": "For absent point queries, its filter allocation minimizes the sum of false-positive probabilities rather than giving every run the same bits per entry. In the continuous model, active filters give smaller runs more bits per entry; with scarce memory, some larger runs receive no filter. [monkey-paper]\n\nScope: this is a SIGMOD 2017 research design implemented over LevelDB, not a claim about current RocksDB defaults. Its main experiments disabled the block cache; Appendix F separately studies caching. [monkey-paper]\n\nHesela derives and tests activation thresholds for a fixed three-run illustration. These are model results, not database latency measurements. [hesela]",
  "status": "research",
  "advantages": [],
  "limitations": [],
  "related": [
    "bloom-filter",
    "lsm-tree",
    "leveled-compaction",
    "tiered-compaction",
    "read-amplification"
  ],
  "supersedes": [],
  "supersededBy": [],
  "firstSeen": null,
  "lastSeen": null,
  "citations": [
    {
      "id": "monkey-paper",
      "title": "Dayan, Athanassoulis and Idreos. Monkey: Optimal Navigable Key-Value Store. SIGMOD 2017, 79-94. DOI: 10.1145/3035918.3064054. Sections 4.1, 5 and Appendix F.",
      "url": "https://cs-people.bu.edu/mathan/publications/sigmod17-dayan.pdf",
      "accessed": "2026-11-10"
    },
    {
      "id": "hesela",
      "title": "Hesela: when a run starts receiving filter memory.",
      "url": "https://hesela.com/analyses/bloom-filters-lsm-read-cost/#filter-activation",
      "accessed": "2026-11-10"
    }
  ],
  "updated": "2026-11-10",
  "provenance": [
    "Primary-source synthesis and independently checked continuous-model calculation; no engine execution."
  ]
}
