在无模式数据存储中存储用户兴趣列表

时间:2014-11-29 21:21:45

标签: google-app-engine schemaless

我希望让用户输入他们的兴趣,这些兴趣可能已经存在或者可能不存在于系统中,并将它们存储在无模式数据库(具体的GAE存储)中,以便我可以轻松地发现具有类似功能的用户利益。

我想要做的一个类似的例子是LinkedIn的技能形式。

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

1 个答案:

答案 0 :(得分:0)

  1. 创建一个实体"兴趣"。让数据存储区自动为这些实体生成ID - 当您从User实体引用它们时,这将占用更少的空间。该实体可能只有一个属性(例如"兴趣"或"文字")。
  2. 当用户输入新兴趣时,您可以检查具有此兴趣的实体是否已存在。如果是,则将该实体的id添加到用户的兴趣列表中。如果不是,则首先为此兴趣保存一个新实体,然后使用该实体的id。

    1. 使用kind" User"创建一个实体。该实体将拥有一个属性" interest"。您可以在此属性中保存一组感兴趣的ID。
    2. 例如,在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;
      }
      

      请注意该物业&#34;兴趣&#34;已建立索引,因此您可以运行查询以查找具有特定兴趣的所有用户。