ElasticSearch一对多关系方案

一、前言

使用MySQL做为存储,表与表之间有很多是一对多关系,比如订单和订单商品明细,客户和客户地址等等,但是因为ES本身是扁平化文档结构,一般不同索引之间是没有关系的,ES在处理这种关系时相比MySQL并不擅长,不过也提供了几种方式来支持这种关系,下面就以客户和客户地址(一个客户有多个地址)为例来讲述一下各种类型存储的优缺点,正好我们本周一个迭代要把客户数据迁移到ES中。


客户基本信息:first、last、code、email
客户地址信息:city、address

二、数组

ES中其实不存在专用的数组类型,默认情况任何字段都可以包含0个或多个值,不过数组中所有值都必须具有相同的数据类型。

1、基本类型数组

注:addr准备存入多个地址,这里定义为text即可,定义时并没有关键字来设置为数组类型。

注:可以放0或多个值,只要类型一致或可以强制转换就可以存入。

注:可以通过模糊查询查找到该DOC文档。

2、对象数组

注:这个其实就是ES中基本的Object类型

注:addr可以放内嵌对象。

注:对象数组查询结果存在边界问题,查city="Brisbane"并且

address="Ngungug"会把记录给查出来,像地址这里要求不严格的场景是没有什么问题,但是如果是订单内嵌产品列表,我要查出产品编码和价格是指定值的时候,其实是需要严格匹配数组中一个对象,而不是在整个数组中匹配。这个主要是因为ES对JSON对象数据是压扁了存储。

上面的数据实际内部的存储如下,这样存储是丢失了city与address之间映射关系。

三、嵌套

nested(嵌套)类型是object数据类型特殊版本,可以在对象中嵌套对象或者在字段中存储键值对。

1、定义嵌套结构

注:嵌套结构使用nested类型定义。

2、插入文档数据

注:嵌套结构中可以放多个地址信息,另外ES中的put和post指令区别,put需要指定文档ID作用在指定文档上,POST不需要指定文档ID,它是作用在集合上,这个概念源自HTTP协议,HTTP协议定义put操作是幂等的,而POST操作是非幂等的。

3、根据嵌套中内容去查询文档

如果查询换成如下,就不会查出数据,这个就是嵌套结构和对象数组的区别。

对象数据和嵌套存储的区别,使用命令

get _cat/indices?v 查看ES内部真实的文档数量。

可以看出使用nested结构 nested子文档在ES内部其实也是独立的子文档,只是在我们做查询时,ES内部帮我们做了Join处理,所以相对来讲nested在做查询时性能是不如普通内部对象。

四、父子文档

1、定义父子结构

注:使用join表示父子关联结构,relations里的custmoer是父文档,customerAddr是子文档。

2、插入父文档数据

注:这里join_field.name指定了该文档是父文档

3、插入子文档数据

注:这里join_field.name指定了该文档是子文档,parent指定了其父文档类型。请求中设置了routing确保了父子文档在相同的分片上。

4、查询

get customer_parent/_search{}

注:返回父子两个文档

get customer_parent/_doc/customer1

注:只返回父文档的数据

使用has_child查询 :根据子文档条件查询父文档内容

注:只返回父文档内容

使用has_parent查询:根据父文档条件查询子文档内容。

注:只返回子文档内容

五、ES一对多关系几种类型对比

注:我们的客户数据更新很少,大多数情况下是查询,所以最终采用的是nested结构。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
云数据库方案设计 云数据库的云化改造 面向云化环境,数据库在多个方面需要进行改造,包括快捷的安装部署,提供数据 库的动态伸缩和资源隔离,以及监控、迁移、备份等一体化管理,以适应云环境中自动 安装部署、一体化监控管理,资源动态分配等需求。 快速安装及部署 1.1 一键部署和分钟级实例的创建: 1. 准备好预置数据库的docker镜像 a. 初始化好空数据目录(也支持根据场景预置数据) b. 数据库配置文件放置在docker镜像之外,通过映射的方式进入镜像内部 2. 用户选择实例资源后(CPU、内存),系统自动计算最佳设置 a. 用户选择实例的内存、CPU数量,使用场景(OLTP、OLAP) b. 根据用户选择,自动调整、优化参数(共享缓存、work_mem、等等) 3. 使用docker镜像加载外置配置文件启动数据 1.2 多种部署方式 1. 单机(单独的docker镜像) 2. 主备 和 负载均衡 a). 配置好的三个独立docker镜像,分别扮演主机、备机、读写分离节点 b). 三个节点配置文件都在外部,映射到内部运行 c). 启动时,根据用户的资源选择和网络场景,自动规划配置文件内容 3. KADB 集群 a). 根据角色配置好独立的docker镜像,分别扮演数据节点、协调器节点等 b). 节点的配置文件都放在外部,映射到内部运行 c). 根据用户设置的资源,场景,自动分配节点数量,配置节点参数. 在线伸缩 云环境中,支持在线调整任何一个实例使用的资源。对于数据库而言,若分配的资 源,包括CPU、内存、磁盘等资源发生变化,数据库同样需要对于资源的变化实施生效。 CPU变化时,主要影响数据库的并发连接数和并行参数,在金仓云数据库中,并发连 接数和并行参数可以动态调整。 内存发生变化时,数据库的共享内存,排序内存等内存分配支持动态调整,动态扩 展。 磁盘发生变化时,数据库可以配置表空间的存储,以及表存储,分区的存储,动态 使用新增资源。 另外,随着实际业务的增长,数据库集群的负载可能超出初始设计的承受能力,使 得处理能力下降,不再满足业务需求,所以数据库集群支持在线扩展能力,即在不影响 系统正常使用的情况下,增加数据库的数据处理能力。 资源隔离 KingbaseES云数据库支持多租户模式,以实现多个租户之间的资源隔离。 每个租户创建自己的数据库,各自的数据库从元信息、用户数据到内存、以及日志 信息,都是彼此隔离的。每个租户的数据库不可以彼此访问。 各个租户的数据库可以方便的迁移和加载,支持各自的备份和恢复。 一体化管理 使用 KEM 监控数据库运行状态 a). 支持自主监控(由KEM主动呈现) b). 支持将收集的数据汇集到其他管理平台 使用 WEB 对象管理工具管理数据库对象 a). 单机形式的数据库对象管理 b). 主备形式的数据库对象管理 c). KADB集群数据库对象管理 二、向非关系存储大数据处理进行扩展 通用数据库 通用数据库按照处理业务的类型,分为交易型数据库和分析型数据库。 1. 交易数据库 主要用于交易类型的业务处理,例如:业务流程电子化,其他业务系统。面向所有 参与业务流程的人员。对数据的操作特点是:大量短、频、快的增删改操作。 2. 分析型数据库 主要用于统计分析,数据挖掘应用。面向决策者和分析人员。对数据库的操作特点 是:大量数据入库,大量复杂查询。 云上的数据库需要有这两种数据库,来应对更多的用户应用需求。 与大数据平台的互访 大数据计算平台,例如Spark、HIVE等,需要支持大数据计算平台与数据库互访。以 大数据计算平台为中心,建立分析平台。 1. 大数据计算平台访问数据库 a)大数据计算平台Spark: 可以提供JdbcRDD来访问单机数据库系统,并且根据某列对表进行分区,并行读取, 提升效率。对于集群数据库,Spark工作进程可以对每一个存储节点进行数据读取,通过 这种并行的方式提升效率。 b)大数据计算平台HIVE: 需要在HIVE中注册数据库表信息,将数据库的表映射成HIVE表,通过Hive- SQL进行数据读取,并在HIVE中进行运算。 2. 数据库访问大数据计算平台 大数据计算平台可以将数据,例如计算结果,写入到数据库中,再在数据库中, 利用SQL对数据进行分析。 云数据集成 3.1 与RDS的数据集成 数据库使用外部表技术,可以访问RDS中的其他数据。 支持多种格式的数据; 支持访问和更新数据。 同时,使用迁移工具实现到RDS的数据集成。 3.2.与大数据存储平台的数据集成 数据库提供外部表技术,可以将交易型和分析型数据库与其他存储平台对接,在数 据库内部,通过外部表访问大数据存储平台中的数据,包括: a)与HDFS对接:外部表访问引擎(读写模块),通过调用HDFS的访问接口(
云数据库方案设计 云数据库的云化改造 面向云化环境,数据库在多个方面需要进行改造,包括快捷的安装部署,提供数据 库的动态伸缩和资源隔离,以及监控、迁移、备份等一体化管理,以适应云环境中自动 安装部署、一体化监控管理,资源动态分配等需求。 快速安装及部署 一键部署和分钟级实例的创建: 1. 准备好预置数据库的docker镜像 a. 初始化好空数据目录(也支持根据场景预置数据) b. 数据库配置文件放置在docker镜像之外,通过映射的方式进入镜像内部 2. 用户选择实例资源后(CPU、内存),系统自动计算最佳设置 a. 用户选择实例的内存、CPU数量,使用场景(OLTP、OLAP) b. 根据用户选择,自动调整、优化参数(共享缓存、work_mem、等等) 3. 使用docker镜像加载外置配置文件启动数据 多种部署方式 1. 单机(单独的docker镜像) 2. 主备 和 负载均衡 a). 配置好的三个独立docker镜像,分别扮演主机、备机、读写分离节点 b). 三个节点配置文件都在外部,映射到内部运行 c). 启动时,根据用户的资源选择和网络场景,自动规划配置文件内容 3. KADB 集群 a). 根据角色配置好独立的docker镜像,分别扮演数据节点、协调器节点等 b). 节点的配置文件都放在外部,映射到内部运行 c). 根据用户设置的资源,场景,自动分配节点数量,配置节点参数. 在线伸缩 云环境中,支持在线调整任何一个实例使用的资源。对于数据库而言,若分配的资源 ,包括CPU、内存、磁盘等资源发生变化,数据库同样需要对于资源的变化实施生效。 CPU变化时,主要影响数据库的并发连接数和并行参数,在金仓云数据库中,并发连 接数和并行参数可以动态调整。 内存发生变化时,数据库的共享内存,排序内存等内存分配支持动态调整,动态扩展 。 磁盘发生变化时,数据库可以配置表空间的存储,以及表存储,分区的存储,动态使 用新增资源。 另外,随着实际业务的增长,数据库集群的负载可能超出初始设计的承受能力,使得 处理能力下降,不再满足业务需求,所以数据库集群支持在线扩展能力,即在不影响系 统正常使用的情况下,增加数据库的数据处理能力。 资源隔离 KingbaseES云数据库支持多租户模式,以实现多个租户之间的资源隔离。 每个租户创建自己的数据库,各自的数据库从元信息、用户数据到内存、以及日志信 息,都是彼此隔离的。每个租户的数据库不可以彼此访问。 各个租户的数据库可以方便的迁移和加载,支持各自的备份和恢复。 一体化管理 使用 KEM 监控数据库运行状态 a). 支持自主监控(由KEM主动呈现) b). 支持将收集的数据汇集到其他管理平台 使用 WEB 对象管理工具管理数据库对象 a). 单机形式的数据库对象管理 b). 主备形式的数据库对象管理 c). KADB集群数据库对象管理 二、向非关系存储大数据处理进行扩展 通用数据库 通用数据库按照处理业务的类型,分为交易型数据库和分析型数据库。 1. 交易数据库 主要用于交易类型的业务处理,例如:业务流程电子化,其他业务系统。面向所有 参与业务流程的人员。对数据的操作特点是:大量短、频、快的增删改操作。 2. 分析型数据库 主要用于统计分析,数据挖掘应用。面向决策者和分析人员。对数据库的操作特点 是:大量数据入库,大量复杂查询。 云上的数据库需要有这两种数据库,来应对更多的用户应用需求。 与大数据平台的互访 大数据计算平台,例如Spark、HIVE等,需要支持大数据计算平台与数据库互访。以 大数据计算平台为中心,建立分析平台。 1. 大数据计算平台访问数据库 a)大数据计算平台Spark: 可以提供JdbcRDD来访问单机数据库系统,并且根据某列对表进行分区,并行读取, 提升效率。对于集群数据库,Spark工作进程可以对每一个存储节点进行数据读取,通过 这种并行的方式提升效率。 b)大数据计算平台HIVE: 需要在HIVE中注册数据库表信息,将数据库的表映射成HIVE表,通过Hive- SQL进行数据读取,并在HIVE中进行运算。 2. 数据库访问大数据计算平台 大数据计算平台可以将数据,例如计算结果,写入到数据库中,再在数据库中,利用 SQL对数据进行分析。 云数据集成 与RDS的数据集成 数据库使用外部表技术,可以访问RDS中的其他数据。 支持多种格式的数据; 支持访问和更新数据。 同时,使用迁移工具实现到RDS的数据集成。 .与大数据存储平台的数据集成 数据库提供外部表技术,可以将交易型和分析型数据库与其他存储平台对接,在数 据库内部,通过外部表访问大数据存储平台中的数据,包括: a)与HDFS对接:外部表访问引擎(读写模块),通过调用HDFS的访问接口(InputF ormat,Out
云数据库方案设计 云数据库的云化改造 面向云化环境,数据库在多个方面需要进行改造,包括快捷的安装部署,提供数据库的动态伸缩和资源隔离,以及监控、迁移、备份等一体化管理,以适应云环境中自动安装部署、一体化监控管理,资源动态分配等需求。 快速安装及部署 1.1 一键部署和分钟级实例的创建: 1. 准备好预置数据库的docker镜像 a. 初始化好空数据目录(也支持根据场景预置数据) b. 数据库配置文件放置在docker镜像之外,通过映射的方式进入镜像内部 2. 用户选择实例资源后(CPU、内存),系统自动计算最佳设置 a. 用户选择实例的内存、CPU数量,使用场景(OLTP、OLAP) b. 根据用户选择,自动调整、优化参数(共享缓存、work_mem、等等) 云数据库方案设计全文共6页,当前为第1页。 3. 使用docker镜像加载外置配置文件启动数据 云数据库方案设计全文共6页,当前为第1页。 1.2 多种部署方式 1. 单机(单独的docker镜像) 2. 主备 和 负载均衡 a). 配置好的三个独立docker镜像,分别扮演主机、备机、读写分离节点 b). 三个节点配置文件都在外部,映射到内部运行 c). 启动时,根据用户的资源选择和网络场景,自动规划配置文件内容 3. KADB 集群 a). 根据角色配置好独立的docker镜像,分别扮演数据节点、协调器节点等 b). 节点的配置文件都放在外部,映射到内部运行 c). 根据用户设置的资源,场景,自动分配节点数量,配置节点参数. 在线伸缩 云环境中,支持在线调整任何一个实例使用的资源。对于数据库而言,若分配的资源,包括CPU、内存、磁盘等资源发生变化,数据库同样需要对于资源的变化实施生效。 CPU变化时,主要影响数据库的并发连接数和并行参数,在金仓云数据库中,并发连接数和并行参数可以动态调整。 云数据库方案设计全文共6页,当前为第2页。内存发生变化时,数据库的共享内存,排序内存等内存分配支持动态调整,动态扩展。 云数据库方案设计全文共6页,当前为第2页。 磁盘发生变化时,数据库可以配置表空间的存储,以及表存储,分区的存储,动态使用新增资源。 另外,随着实际业务的增长,数据库集群的负载可能超出初始设计的承受能力,使得处理能力下降,不再满足业务需求,所以数据库集群支持在线扩展能力,即在不影响系统正常使用的情况下,增加数据库的数据处理能力。 资源隔离 KingbaseES云数据库支持多租户模式,以实现多个租户之间的资源隔离。 每个租户创建自己的数据库,各自的数据库从元信息、用户数据到内存、以及日志信息,都是彼此隔离的。每个租户的数据库不可以彼此访问。 各个租户的数据库可以方便的迁移和加载,支持各自的备份和恢复。 一体化管理 使用 KEM 监控数据库运行状态 a). 支持自主监控(由KEM主动呈现) b). 支持将收集的数据汇集到其他管理平台 云数据库方案设计全文共6页,当前为第3页。 云数据库方案设计全文共6页,当前为第3页。 使用 WEB 对象管理工具管理数据库对象 a). 单机形式的数据库对象管理 b). 主备形式的数据库对象管理 c). KADB集群数据库对象管理 二、向非关系存储大数据处理进行扩展 通用数据库 通用数据库按照处理业务的类型,分为交易型数据库和分析型数据库。 交易数据库 主要用于交易类型的业务处理,例如:业务流程电子化,其他业务系统。面向所有参与业务流程的人员。对数据的操作特点是:大量短、频、快的增删改操作。 分析型数据库 主要用于统计分析,数据挖掘应用。面向决策者和分析人员。对数据库的操作特点是:大量数据入库,大量复杂查询。 云上的数据库需要有这两种数据库,来应对更多的用户应用需求。 与大数据平台的互访 云数据库方案设计全文共6页,当前为第4页。大数据计算平台,例如Spark、HIVE等,需要支持大数据计算平台与数据库互访。以大数据计算平台为中心,建立分析平台。 云数据库方案设计全文共6页,当前为第4页。 大数据计算平台访问数据库 a)大数据计算平台Spark: 可以提供JdbcRDD来访问单机数据库系统,并且根据某列对表进行分区,并行读取,提升效率。对于集群数据库,Spark工作进程可以对每一个存储节点进行数据读取,通过这种并行的方式提升效率。 b)大数据计算平台HIVE: 需要在HIVE中注册数据库表信息,将数据库的表映射成HIVE表,通过Hive-SQL进行数据读取,并在HIVE中进行运算。 数据库访问大数据计算平台 大数据计算平台可以将数据,例如计算结果,写入到数据库中,再在数据库中,利用SQL对数据进行分析。 云数据集成 3.1 与RDS的数据集成 数据库使用外部表技术,可以访问RDS中的其他数据。 支持多种格式的数据; 支持访问和更新数据

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值