divided user datastore into more smaller datastores

This is to reduce read/write when we only want to update partial areas
of the user struct