通过【应用层join】或者【数据冗余】实现实现用户与博客的关联

    通过应用层join实现用户与博客的关联

构造用户与博客数据

PUT /users/_doc/1
{
  "name":"夏明",
  "email":"xiaming@qq.com",
  "birthday":"2012-01-01"
}

PUT /blogs/_doc/1
{
  "title":"盛夏的果实",
  "content":"阳光明媚,万里晴空",
  "userId":1
}

  关联查询

GET /users/_search
{
  "query":{
    "term":{
      "name.keyword": {
        "value":"夏明"
      }
    }
  }
}

GET /blogs/_search
{
  "query":{
    "bool":{
      "filter":{
        "terms": {
          "userId": [
            1
          ]
        }
      }
    }
  }
}

  万个用户的博客,可能第一次搜索,会得到1万个userId , 第二次搜索的时候,要放入terms中1万个userId,才能进行搜索,这个时候性能比较差了 。

通过数据冗余实现用户与博客的关联

  冗余数据就是说将可能会进行搜索的条件和要搜索的数据,放在一个doc中

PUT /blogs/_doc/1
{
  "title":"盛夏的果实",
  "content":"果实可以不可以",
  "userInfo":{
    "userId":1,
    "username":"夏明"
  }
}

  冗余数据就是说将可能会进行搜索的条件和要搜索的数据,放在一个doc中

GET /blogs/_search
{
  "query":{
    "term":{
      "userInfo.username.keyword": {
        "value":"夏明"
      }
    }
  }
}

  性能高,不需要执行两次搜索,数据冗余,维护成本高 ,每次username变化了,同时要更新user type和blog type

  对于es这种NoSQL类型的数据存储来讲,都是冗余模式

posted on 2021-09-23 08:23  溪水静幽  阅读(59)  评论(0)    收藏  举报