{
  "slug": "f2",
  "term": "F2",
  "aliases": [
    "F2Kv",
    "FASTER v2"
  ],
  "definition": "F2 is a key-value store that separates write-hot and write-cold record logs and uses a dedicated read cache for frequently read disk records.",
  "note": "Placement: Its hot tier uses a hybrid log with in-place updates. Both hot-to-cold and cold-to-cold compaction copy live records into the cold log, keeping cleaning traffic away from the hot tail. [f2-paper]\n\nIndexing: The cold tier groups hash entries into disk-backed chunks with a smaller in-memory index. Reducing index memory can require an extra lookup before fetching a record; it is not a free reduction in read cost. [f2-paper]\n\nFalse absence: A reader can follow an old hash chain while compaction relocates a matching record and removes its original address. The pinned code checks a compaction-truncation counter after a pending read returns NotFound, then retries over the newly introduced range. A miss on the old chain is not sufficient evidence that the key is absent. [f2-retry]\n\nDeletion: A hot-tier tombstone stops a read without falling through to an older cold-tier value. This rule appears in both the immediate and asynchronous read paths. [f2-read]",
  "status": "research",
  "advantages": [],
  "limitations": [
    {
      "text": "The 2025 evaluation disables persistence layers, compression and checksums where supported. Its throughput results do not establish performance with durable acknowledgements enabled.",
      "citationIds": [
        "f2-paper"
      ]
    }
  ],
  "related": [
    "hybrid-log",
    "value-log",
    "key-value-separation",
    "lsm-tombstone"
  ],
  "supersedes": [],
  "supersededBy": [],
  "firstSeen": null,
  "lastSeen": null,
  "updated": "2026-11-15",
  "citations": [
    {
      "id": "f2-paper",
      "title": "Kanellis et al. From FASTER to F2: Evolving Concurrent Key-Value Store Designs for Large Skewed Workloads. PVLDB 18(12), 2025, sections 4-8.",
      "url": "https://www.vldb.org/pvldb/vol18/p4910-kanellis.pdf",
      "accessed": "2026-11-15"
    },
    {
      "id": "f2-retry",
      "title": "FASTER C++ source, revision 332ea7d: pending-read retry after compaction truncation.",
      "url": "https://github.com/microsoft/FASTER/blob/332ea7da532a688acf648ee60c4f63a1caeaf1f7/cc/src/core/faster.h#L1001-L1041",
      "accessed": "2026-11-15"
    },
    {
      "id": "f2-read",
      "title": "FASTER C++ source, revision 332ea7d: F2Kv immediate and asynchronous reads.",
      "url": "https://github.com/microsoft/FASTER/blob/332ea7da532a688acf648ee60c4f63a1caeaf1f7/cc/src/core/f2.h#L301-L400",
      "accessed": "2026-11-15"
    },
    {
      "id": "f2-docs",
      "title": "FASTER documentation: FasterKV C++ Port, F2Kv configuration and API.",
      "url": "https://microsoft.github.io/FASTER/docs/fasterkv-cpp/#f2kv",
      "accessed": "2026-11-15"
    }
  ],
  "provenance": [
    "Source synthesis of the final 2025 paper (DOI 10.14778/3750601.3750615) and pinned C++ implementation, not an engine benchmark or crash-recovery reproduction.",
    "F2Kv is a C++ component; the alias FASTER v2 names the paper's design, not a blanket claim about every FASTER package or language binding. [f2-docs]"
  ]
}
