Elasticsearch实战—ES数据建模与Mysql对比实现 一对一模型
我们如何把Mysql的模型合理的在ES中去实现? 就需要你对要存储的数据足够的了解,及对应用场景足够的深入分析,才能建立一个合适的模型,便于你后期扩展
实体之间的关系:
-
一对一 模型
一对一(1:1):一个实体最多只能能另一个实体相关联,另一个实体如是。
例:一个只能有一张身份证。 -
一对多 模型
一对多(1:n): 一个实体可以和别的实体任意关联(他们只能和前面的实体关联)
例:一个班有多名学生。 -
多对多 模型
多对多:(n:n):一个实体可以和别的实体任意关联(他们也可以和前面的实体任意关联)
例:一个学生可以选择多门课程,一门课程对应多名学生。
1.一对一 模型
我们现在有两个模型, 一个商品Product, 一个属性 Attribute , 我们对比下一对一模型如何处理 ,一个商品有一个属性
1.1 Mysql建模
对于一对一的数据模型, mysql 可以用2个表 来在Mysql中实现 一对一, 查 produce_id的同时, 再根据 attribute_id属性id去 关联 查属性表查出商品和商品属性的关系
#关联查询
select * from product left join addribute on product.product_id = attribute.product_id;
Table :produce 商品表 基本信息
字段 | 类型 |
---|---|
id | 唯一主键,自增 |
product_id | 商品id |
attribute_id | 属性id |
product_name | 商品名称 |
product_price | 商品价格 |
Table :attribute属性表
字段 | 类型 |
---|---|
id | 唯一主键,自增 |
attribute_id | 属性id |
product_id | 商品id |
product_number | 商品数量 |
product_address | 商品产地 |
product_remark | 商品标签 |
produce 商品id 字段product_id 的关联属性id 字段attribute_id 轻易的获取两个表的对应关系
既可以通过 produce 商品id 字段 获取属性表 attribute_id 的属性信息
也可以通过 属性表 attribute_id 查出拥有这些属性的所有 的商品product_id
这样我们可以 在Mysql中轻易的实现 两个表结构的关联 实现1:1的商品及属性模型
1.2 Index ES 模型
对于ES 这种1:1的 我们应该如何查询, 正常来说 不会用两个 索引库去存储两份数据, 我们一般都是采用大宽表去实现这种逻辑,我们会把商品及商品的属性 公用一个商品Index库, 通过一个id去关联该商品所有的唯一性信息
- 去除掉 attribute_id的 表信息
- 把属性表 所有的这些属性 全都和商品 product_id绑定在一起
- 多字段形成大宽表 去实现1:1 ES模型设计
为什么要这样设计?
- 方便查询
- 没有任何冗余数据
- 操作简单, 一次性就能搜索出所有的结果字段
Table :produce 商品表 基本信息
字段 | 类型 |
---|---|
id | 唯一主键,自增 |
product_id | 商品id |
product_name | 商品名称 |
product_price | 商品价格 |
product_number | 商品数量 |
product_address | 商品产地 |
product_remark | 商品标签 |
xxxx_xxx | 商品xxx等 |
下面创建Index mapping结构, 大宽表
{
"product":{
"mappings":{
"_doc":{
"dynamic":"strict",
"_all":{
"enabled":false
},
"properties":{
"productId":{
"type":"keyword"
},
"productName":{
"type":"text",
"analyzer":"ik_max_word"
},
"productNumber":{
"type":"integer"
},
"productAddress":{
"type":"integer"
},
"productRemark":{
"type":"integer"
},
"xxx":{
"type":"keyword"
}
}
}
}
}
}
本文章 分析了 1:1 模型 一个商品Product, 一个属性 Attribute ,对比了mysql如何处理及ES如何设置mappings结构文章来源:https://www.toymoban.com/news/detail-498696.html
下一篇 我们着重讲解下 Mysql的一对多 1:n 模型及 ES的一对多模型如何建立文章来源地址https://www.toymoban.com/news/detail-498696.html
到了这里,关于Elasticsearch实战(二十二)---ES数据建模与Mysql对比 一对一模型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!