Hypercore distributes signed log-based structures addressed by pubkey. It embeds indexes in each log entry to make this perform well; for instance Hyperbee is a b-tree over a log. (See https://github.com/hypercore-protocol/p2p-indexing-and-searc... for how that works.)
IPFS distributes content-addressed blobs which interlink to form DAGs. Mutability is supported by pubkey (or similar) pointers to recent hashes.
I work with Hypercore. It’s often a matter of preference between them.