How to filter properly users presences on many nodes? Do I need to implement CRDT or Gen_Server via global is sufficient?

I have Genservers with simple_one_for_one strategy registered via global module which stores cells that belongs to users. Each time new user joins I filter Phoenix.Presence.list state to get users that belongs to current user cells, so that current user will receive only scoped users list. I also intercept presence_diff event and check if each user is in the same cells as joined user, furthermore I have custom function to broadcast manually presence_diff when user changes cells. I feel that this is bad approach especially for many nodes on production, so my question is if via global Genserver will replicate cells state so that it would be possible to associate users as described above with presences state/diffs on each node? Or have I to implement own CRDT ORSWOT to share cells state (I think without diffs) and then associate them with users presences to filter which cells should see given user?