Nine entries, each from a different family. Close cousins are collapsed: React Query stands in for SWR and Relay, Nix stands in for Bazel and Buck, Dagster stands in for Luigi and Prefect and Airflow. Content-addressed storage (Git, OCI, IPFS) is folded into Nix because for a subsystem designer it's the derivation stance that's instructive; pure object dedup is a weaker commitment.
1. Spark — lineage-based recovery with opt-in materialization (also Flink, Beam)
What you reach for: df.cache() or df.persist(StorageLevel.MEMORY_AND_DISK).