Будучи новичком в Google Cloud Datastore, я хотел бы убедиться, что я на правильном пути.
Что мне нужно:
- отношение многие ко многим
- само отношение должно содержать данные, описывающие отношение
- strong consistency is required both ways:
- from user entity to all the data entities that this user has permissions to
- от объекта данных всем пользователям, у которых есть на это разрешение
Вот что я придумал:
@Entity
public class User {
@Id String userId;
}
@Entity
public class PermissionIndex {
@Id long id;
@Parent Key<User> user;
List<Ref<Permission>> permissions;
}
@Entity
public class Permission {
@Id long id;
boolean writePermission;
boolean managePermission;
@Load Ref<Data> data; //So that Data entities can be retrieved with strong
//consistency after looking up Permission entities
//for a specific User entity
@Load Ref<User> user; //So that User entities can be retrieved with strong
//consistency after looking up Permission entities
//for a specific Data entity
}
@Entity
public class DataIndex {
@Id long id;
@Parent Key<Data> data;
List<Ref<Permission>> permissions;
}
@Enti.
public class Data {
@Id String dataId;
@Id String actualData;
}
Если я правильно понимаю эту реализацию, единственный способ отфильтровать объекты данных конкретного пользователя — это получить все объекты разрешений и отфильтровать объекты данных в памяти, я прав?
Есть ли лучший способ реализовать его, все еще выполняя требования?
ОБНОВЛЕНИЕ:
Насколько я понимаю, эта реализация позволит мне реализовать логику, которая будет извлекать данные, обеспечивая строгую согласованность (имея идентификатор пользователя - запрос предка для извлечения всех объектов разрешений, а затем использование get_by_key для извлечения объектов данных).
Мне интересно, следует ли мне подходить к этому по-другому, поскольку у меня нет большого опыта работы с хранилищем данных/объективацией.