Elasticsearch实战(二十二)---ES数据建模与Mysql对比 一对一模型

这篇具有很好参考价值的文章主要介绍了Elasticsearch实战(二十二)---ES数据建模与Mysql对比 一对一模型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Elasticsearch实战—ES数据建模与Mysql对比实现 一对一模型

我们如何把Mysql的模型合理的在ES中去实现? 就需要你对要存储的数据足够的了解,及对应用场景足够的深入分析,才能建立一个合适的模型,便于你后期扩展
实体之间的关系:

  1. 一对一 模型
    一对一(1:1):一个实体最多只能能另一个实体相关联,另一个实体如是。
    例:一个只能有一张身份证。

  2. 一对多 模型
    一对多(1:n): 一个实体可以和别的实体任意关联(他们只能和前面的实体关联)
    例:一个班有多名学生。

  3. 多对多 模型
    多对多:(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去关联该商品所有的唯一性信息

  1. 去除掉 attribute_id的 表信息
  2. 把属性表 所有的这些属性 全都和商品 product_id绑定在一起
  3. 多字段形成大宽表 去实现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结构

下一篇 我们着重讲解下 Mysql的一对多 1:n 模型及 ES的一对多模型如何建立文章来源地址https://www.toymoban.com/news/detail-498696.html

到了这里,关于Elasticsearch实战(二十二)---ES数据建模与Mysql对比 一对一模型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Redis、Elasticsearch(ES)、RocketMQ和MYSql 持久化对比

    在现代大数据和分布式系统中,数据持久化是一个至关重要的话题。本文将针对 Redis、Elasticsearch(ES)、 RocketMQ和MYSql 这四种常见的数据存储和消息队列系统进行持久化方面的对比分析,帮助读者更好地了解它们各自的特点和适用场景。 ### Redis 1. **特点**:    - 内存数据库

    2024年04月10日
    浏览(53)
  • ArduinoUNO实战-第二十二章-红外遥控实验

    Arduino基础入门篇25—红外遥控 Arduino与红外遥控握手 在日常生活中我们会接触到各式各样的遥控器,电视机、空调、机顶盒等都有专用的遥控器,很多智能手机也在软硬件上对红外遥控做了支持,可以集中遥控绝大部分家用电器。 当按下遥控器上某个按键,串口输出该按键的

    2024年02月16日
    浏览(33)
  • OpenCV C++案例实战二十二《手势识别》

    本文将使用OpenCV C++ 实现手势识别效果。本案例主要可以分为以下几个步骤: 1、手部关键点检测 2、手势识别 3、效果显示 接

    2024年02月05日
    浏览(69)
  • 云原生(二十二) | Kubernetes篇之Ingress案例实战

    文章目录 Ingress案例实战 一、基本配置 二、默认后端 三、路径重写 四、配置SSL

    2023年04月09日
    浏览(28)
  • Elasticsearch实战-数据同步(解决es数据增量同步)

    之前测试的数据都是一次从mysql导入到es,随着时间的推移,每天都有可能发生增删改查,不可能每次都全量同步,所以需要考虑增量同步问题。 缺点: 耦合性高,服务之间会相互影响 依赖消息队列的可靠性 启动:端口8099

    2024年02月11日
    浏览(61)
  • ElasticSearch7.3学习(二十二)----Text字段排序、Scroll分批查询场景解析

    场景:数据库中按照某个字段排序,sql只需写order by 字段名即可,如果es对一个 text field 进行排序,es中无法排序。因为文档入倒排索引表时,分词存入,es无法知道此字段的真实值。这样的结果往往不准确,因为分词后是多个单词,再排序就不是我们想要的结果了。 通常有两

    2024年02月08日
    浏览(35)
  • 自动化运维(二十二)Ansible实战 之Jenkins模块

    Ansible提供了一些模块,可以用来与Jenkins进行交互,执行各种操作,如创建任务、触发构建、获取构建结果等。通过使用这些模块,我们可以将Jenkins的配置和管理集成到Ansible的自动化流程中。 以下是一些常用的Ansible Jenkins模块: 1、jenkins_job模块 jenkins_job模块用于创建、更新或删除

    2024年04月16日
    浏览(32)
  • 【Elasticsearch】小白实战!ES使用Reindex迁移数据

    文章有点长,如果你想认真阅读,建议到我语雀文档上观看,格式友好 - ES 迁移工作 最近有一个需求是需要我负责将服务器A里的 ES 数据迁移到服务器B上,但是由于环境不通,所以就先在公司的测试环境和我本地上进行测试,因为之前没有接触过 ES 数据的迁移,所以上手时

    2024年02月05日
    浏览(25)
  • 云计算实战系列二十二(Python编程I)_pypy 扫描依赖包(1)

    先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《2024年最新网络安全全套学习资料》

    2024年04月22日
    浏览(23)
  • DataX实现Mysql与ElasticSearch(ES)数据同步

    jdk1.8及以上 python2 查看是否安装成功 查看python版本号,判断是否安装成功 在datax/job下,json格式,具体内容及主要配置含义如下 mysqlreader为读取mysql数据部分,配置mysql相关信息 username,password为数据库账号密码 querySql:需要查询数据的sql,也可通过colums指定需要查找的字段(

    2024年02月05日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包