myssql查询同一id数据根据类型查询成一条数据_Elasticsearch系列---数据建模实战

d738aeb7428a9ac9b1808dca1839e05d.png

概要

本篇以实际案例为背景,介绍不同技术组件对数据建模的特点,并以ES为背景,介绍常用的联合查询的利弊,最后介绍了一下文件系统分词器path_hierarchy和嵌套对象的使用。

数据模型对比

实际项目中,电商平台系统常见的组合Java、Mysql和Elasticsearch,以基础的部门-员工实体为案例。

JavaBean类型定义

如果是JavaBean类型,会这样定义

public class Department {
 private Long id;
 private String name;
 private String desc;
 private List<Long> userIds;
}

public class Employee {
 private Long id;
 private String name;
 private byte gender;
 private Department dept;
}

数据库模型定义

如果是关系型数据库(mysql),会这样建表

create table t_department (
 id bigint(20) not null auto_increment,
 name varchar(30) not null,
 desc varchar(80) not null,
 PRIMARY KEY (`id`)
)

create table t_employee (
 id bigint(20) not null auto_increment,
 name varchar(30) not null,
 gender tinyint(1) not null,
 dept_id bigint(20),
 PRIMARY KEY (`id`)
)

依据数据库三范式设计表,每个实体设计成独立的表,用主外键约束进行关联,按照现有的数据表规范,已经不再使用外键约束了,外键约束放在应用层控制。

ES文档数据模型

如果es的文档数据模型,会这样设计document

{
 "deptId": 1,
 "deptname": "CEO办公室",
 "desc":"这一个有情怀的CEO",
 "employee":[
  {
   "userId":1,
   "name":Lily,
   "gender":0
  },
  {
   "userId":2,
   "name":Lucy,
   "gender":0
  },
  {
   "userId":3,
   "name":Tom,
   "gender":1
  }
 ]
}

es更类似面向对象的数据模型,将所有关联的数据放在一个document里。

JOIN查询

我们以博客网站为案例背景,建立博客网站中博客与用户的数据模型。

将用户与博客分别建立document,分割实体,类似数据库三范式,并使用关键field(userId)建立依赖关系

先建立两个实体document,放一条示例数据

PUT /blog/user/1
{
  "id":1,
  "username":"Lily",
  "age":18
}

PUT /website/article/1
{
  "title":"my frist blog",
  "content":"this is my first blog, thank you",
  "userId":1
}

需求:要查询用户名Lily发表的博客 步骤:1)查询用户document,根据名字Lily查询到它的userId; 2)根据第一步查询返回的userId,重新组装请求报文,查询博客docuem

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值