Хранение списков интересов пользователей в хранилище данных без схемы
Я хочу, чтобы пользователи вводили свои интересы, которые могут быть, а могут и не присутствовать в системе, и сохраняли их в базе данных без схемы (хранилище GAE), чтобы я мог легко находить пользователей со схожими интересами.
Аналогичным примером того, что я пытаюсь сделать, является форма навыков LinkedIn.
Я знаком с тем, как это можно сделать в хранилище данных SQL, но я пытаюсь расширить свои знания о хранилищах данных без схемы. Любая помощь приветствуется.
1 ответ
- Создайте сущность с видом "Интерес". Сделайте так, чтобы хранилище данных генерировало идентификаторы автоматически для этих объектов - это займет меньше места, когда вы будете ссылаться на них из пользовательских объектов. Эта сущность может иметь одно свойство (например, "интерес" или "текст").
Когда пользователь вводит новый интерес, вы проверяете, существует ли объект с таким интересом. Если да, вы добавляете идентификатор этой сущности в список интересов пользователя. Если нет, сначала сохраните новый объект для этого интереса, а затем используйте идентификатор этого объекта.
- Создайте сущность с видом "Пользователь". У этого лица будет свойство "интересы". Вы можете сохранить коллекцию идентификаторов интересов в этом свойстве.
Например, в Java, используя низкоуровневый API хранилища данных, вы должны сделать:
public void saveUser(User user) {
Entity userEntity = user.getId() == null ? new Entity("User") : new Entity("User", user.getId());
if (user.getInterests() != null) {
// user.getInterests() returns a collection, e.g. an ArrayList<Long>
userEntity.setProperty("interests", user.getInterests());
}
datastore.put(userEntity);
}
public User getUser(Entity entity) {
User user = new User();
user.setId(entity.getKey().getId());
user.setInterests(entity.getProperty("interests"));
return user;
}
Обратите внимание, что свойство "интересы" проиндексировано, поэтому вы можете выполнить запрос, чтобы найти всех пользователей с определенным интересом.