0

我希望用户输入他们的兴趣,这些兴趣可能已经在系统中,也可能不在系统中,并将它们存储在无模式数据库(具体来说是 GAE 存储)中,以便我可以轻松发现具有相似兴趣的用户。

我正在尝试做的一个类似示例是 LinkedIn 的技能表格。

我熟悉如何在 SQL 数据存储中完成此操作,但我正在尝试扩展我对无模式数据存储的了解。任何帮助将非常感激。

4

1 回答 1

0
  1. 创建一个具有“兴趣”类型的实体。让数据存储区自动为这些实体生成 id - 当您从 User 实体引用它们时,这将占用更少的空间。该实体可能具有单一属性(例如“兴趣”或“文本”)。

当用户输入新兴趣时,您检查是否已存在具有此兴趣的实体。如果是,则将此实体的 id 添加到用户的兴趣列表中。如果没有,你首先为这个兴趣保存一个新的实体,然后使用这个实体的 id。

  1. 创建一个类型为“用户”的实体。该实体将具有属性“利益”。您可以在此属性中保存一组感兴趣的 id。

例如,在 Java 中,使用低级 Datastore 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;
}

请注意,属性“interests”已编入索引,因此您可以运行查询来查找具有特定兴趣的所有用户。

于 2014-11-29T22:03:15.453 回答