五十七、Elasticsearch数据建模--通过数据冗余实现用
2017-07-21 本文已影响55人
编程界的小学生
1、需求
查询小鱼儿这个人发了哪些博客
2、方案
用冗余数据,采用文档数据模型,进行数据建模,实现用户和博客的关联
3、数据准备
准备用户:
POST /website/users
{
"id" : 1,
"name": "小鱼儿",
"email": "xiaoyuer@sina.com",
"birthday": "1980-01-01"
}
准备博客
POST /website/blogs
{
"id" : 1,
"title": "小鱼儿的第一篇博客",
"content": "大家好,我是小鱼儿。。。",
"userInfo": {
"userId": 1,
"username": "小鱼儿"
}
}
4、实现
GET /website/blogs/_search
{
"query": {
"term": {
"userInfo.userId": "1"
}
}
}
就不需要走应用层的join,先搜一个数据,找到id,再去搜另一份数据
直接走一个有冗余数据的type即可,指定要的搜索条件,即可搜索出自己想要的数据来
5、优缺点
优点:性能高,不需要执行两次搜索
缺点:数据冗余,维护成本高 --> 每次如果你的username变化了,同时要更新user type和blog type
一般来说,对于es这种NoSQL类型的数据存储来讲,都是冗余模式....
若有兴趣,欢迎来加入群,【Java初学者学习交流群】:458430385,此群有Java开发人员、UI设计人员和前端工程师。有问必答,共同探讨学习,一起进步!
欢迎关注我的微信公众号【Java码农社区】,会定时推送各种干货:
qrcode_for_gh_577b64e73701_258.jpg