Both Apollo Client and Relay provide great State Managers for storing GraphQL responses with component updates on data changes. Under the hood they are using Cache Normalization that reduces data redundancy. More details can be found here for Apollo and here for Relay. This Normalization is a killer feature for Modern Web Apps - it helps to keep in sync displayable data of some entity in different parts of your application. But this Normalization has performance problems on big data sets.
Apollo Client was originally created as lightweight alternative of Relay. Apollo re-implemented basic functionality keeping in mind developer experience and bundle size. But conceptually Apollo Client 2