If users are expected to be online and modifying state concurrently then it sounds like using realtime matches is a better idea. Perhaps use the approach suggested in this thread and persist match state when users disconnect, but keep it in memory while they’re online and playing.