通过【应用层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类型的数据存储来讲,都是冗余模式
立志如山 静心求实
浙公网安备 33010602011771号