实现淘宝母婴订单实时查询和可视化|Flink-Learning实战营

news2024/7/2 4:12:56

为进一步帮助开发者学习使用 Flink,Apache Flink 中文社区近期发起 Flink-Learning 实战营项目。本次实战营通过真实有趣的实战场景帮助开发者实操体验 Flink,课程包括实时数据接入、实时数据分析、实时数据应用的场景实。并结合小松鼠助教模式,全方位帮助入营开发者轻松玩转 Flink,点击下方图片扫码即刻入营

Tips:点击「阅读原文」即刻入营~

6592f9067567485d8f27371f46343a17.png

本期将继续详细介绍 Flink- Learning 实战营。

实验简介

随着“全面二孩”政策落地、居民可支配收入稳步增加等因素的刺激,中国的母婴消费市场持续增长。与此同时,随着国民消费升级 90 后宝爸、宝妈人数剧增,消费需求与消费理念都发生了巨大的变化。据罗兰贝格最新公布的报告预计,已经经过了 16 个年头发展的母婴行业,到 2020 年,整体规模将达到 3.6 万亿元,2016-2020 年复合增速高达 17%,行业前景看起来一片光明。如此大好形势下,母婴人群在母婴消费上有什么特点?消费最高的项目是什么?

本场景中订单和婴儿信息存储在 MySQL 中,对于订单表,为了方便进行分析,我们让它关联上其对应的婴儿信息,构成一张宽表,使用 Flink 实时把它写到 Elasticsearch 中;另一方面数据经过分组聚合后,计算出订单数量和婴儿出生的关系,实时把它写到 Elasticsearch 中并展示到 Kibana 大屏中。

■ 为回馈广大开源开发者对社区的支持,阿里云实时计算 Flink 版提供云原生免费试用资源

实验资源

实验所开通的云产品因数据连通性要求,需使用同一 Region 可用区,建议都选取北京 Region 的同一可用区。涉及的云产品包括阿里云实时计算 Flink 版、检索分析服务 Elasticsearch 版、阿里云数据库 RDS。

体验目标

本场景将以 阿里云实时计算 Flink 版为基础,使用 Flink 自带的 MySQL Connector 连接 RDS 云数据库实例、Elasticsearch Connector 连接 Elasticsearch 检索分析服务实例,并以一个淘宝母婴订单实时查询的例子尝试上手 Connector 的数据捕获、数据写入等功能。

按步骤完成本次实验后,您将掌握的知识有:

  • 使用 Flink 实时计算平台创建并提交作业的方法;

  • 编写基于 Flink Table API SQL 语句的能力;

  • 使用 MySQL Connector 对数据库进行读取的方法;

  • 使用 Elasticsearch Connector 对数据库进行写入的方法。


步骤一:创建资源

开始实验之前,您需要先创建相关实验资源,确保 RDS 实例、Elasticsearch 实例、Flink 实例在同一个 VPC 网络下,并配置完成 RDS 白名单、Elasticsearch 白名单使网络打通。

步骤二:创建数据库表

在这个例子中,我们将创建三张数据表,其中一张 orders_dataset_tmp 是导入数据的临时表,其他两张作为源表,体验淘宝母婴订单实时查询。

1. 点击云数据库 RDS 控制台「实例列表」,切换到上面创建实例所在的 region,点击自己的实例名称进入详情页,首次使用分别点击「账号管理」和「数据库管理」,创建账号和数据库并使账号绑定到指定数据库。

2. 点击云数据库 RDS 实例详情页上方「登录数据库」,会自动跳转到 DMS 数据管理平台,输入用户名和密码登录刚刚创建的实例,点击左侧「数据库实例」-「已登录实例」列表,双击要编辑的数据库名,然后在右侧 SQL Console 命令区输入以下建表指令并执行:

create table orders_dataset_tmp(
  user_id bigint comment '用户身份信息',      
  auction_id bigint comment '购买行为编号',    
  cat_id bigint comment '商品种类序列号',      
  cat1 bigint comment '商品序列号(根类别)',        
  property TEXT comment '商品属性',      
  buy_mount int comment '购买数量',      
  day TEXT comment '购买时间'        
);


create table orders_dataset(
  order_id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY comment '订单id',
  user_id bigint comment '用户身份信息',      
  auction_id bigint comment '购买行为编号',    
  cat_id bigint comment '商品种类序列号',      
  cat1 bigint comment '商品序列号(根类别)',        
  property TEXT comment '商品属性',      
  buy_mount int comment '购买数量',      
  day TEXT comment '购买时间'        
);


--
create table baby_dataset(
  user_id bigint NOT NULL PRIMARY KEY,  
  birthday text comment '婴儿生日',
  gender int comment '0 denotes female, 1 denotes male, 2 denotes unknown'
);

3. 在 DMS 数据管理平台,点击左侧「常用功能」-「数据导入」,配置如下信息后点击提交申请,将 (sample)sam_tianchi_mum_baby_trade_history.csv 导入 orders_dataset_tmp 表,(sample)sam_tianchi_mum_baby.csv 导入 baby_dataset 表。

配置项

说明

数据库

模糊搜索数据库名后点击对应的 MySQL 实例

文件编码

自动识别

导入模式

极速模式

文件类型

CSV 格式

目标表

模糊搜索要导入的表名后点击选中

数据位置

选择第1行为属性

写入方式

INSERT

附件

点击上传按钮上传要导入到表的对应文件

导入完成之后执行以下 SQL 将订单数据导入到订单源表 orders_dataset 中。

insert into orders_dataset(user_id,auction_id,cat_id,cat1,property,buy_mount,day)
select * from orders_dataset_tmp;


步骤三:配置 Elasticsearch

自动创建索引

进入检索分析服务控制台,Elasticsearch 实例列表找到自己的实例,然后点击实例名进入详情界面,点击「配置与管理」-「ES 集群配置」,点击「修改配置」,选择「允许自动创建索引」,点击「确定」。

dcf9e2cff8c68c777a019c9cabbe5ff8.png

35558ec321ba34f5067bc06d2eecd768.png

修改配置需要等待十几分钟,请耐心等待配置变更完成后再继续使用 Elasticsearch。

步骤四:创建实时查询 SQL 作业

1. 进入实时计算 Flink 平台,点击左侧边栏中的「应用」—「作业开发」菜单,并点击顶部工具栏的「新建」按钮新建一个作业。作业名字任意,类型选择「流作业 / SQL」,其余设置保持默认。如下所示:

9c3d421371570133e6fd6fa3a6225183.png

2. 成功创建作业后,右侧编辑窗格应该显示新作业的内容:

4d5cec525214f25ba70cb19cb7244983.png

3. 接下来,我们在右侧编辑窗格中输入以下语句来创建二张临时表,并使用 MySQL CDC 连接器实时捕获 orders_dataset和 baby_dataset的变化:

CREATE TEMPORARY TABLE orders_dataset (
  order_id BIGINT,
  `user_id` bigint,      
  auction_id bigint,    
  cat_id bigint,      
  cat1 bigint,        
  property varchar,      
  buy_mount int,      
  `day` varchar  ,
   PRIMARY KEY(order_id) NOT ENFORCED
) WITH (
    'connector' = 'mysql',
    'hostname' = '******************.mysql.rds.aliyuncs.com',
    'port' = '3306',
    'username' = '***********',
    'password' = '***********',
    'database-name' = '***********',
    'table-name' = 'orders_dataset'
);
CREATE TEMPORARY TABLE baby_dataset (
  `user_id` bigint,
  birthday varchar,
  gender int,
    PRIMARY KEY(user_id) NOT ENFORCED
) WITH (
    'connector' = 'mysql',
    'hostname' = '******************.mysql.rds.aliyuncs.com',
    'port' = '3306',
    'username' = '***********',
    'password' = '***********',
    'database-name' = '***********',
    'table-name' = 'baby_dataset'
);

需要将 hostname 参数替换为早些时候创建资源的域名、将 username 和 password 参数替换为数据库登录用户名及密码、将 database-name参数替换为之前在 RDS 后台中创建的数据库名称。

其中,'connector' = 'mysql'指定了使用 MySQL CDC 连接器来捕获变化数据。您需要使用准备步骤中申请的 RDS MySQL URL、用户名、密码,以及之前创建的数据库名替换对应部分。

任何时候您都可以点击顶部工具栏中的「验证」按钮,来确认作业 Flink SQL 语句中是否存在语法错误。

4. 为了测试是否成功地捕获了源表数据,紧接着在下面写一行 SELECT * FROM source_table;语句,选中临时表和 select 语句,并点击工具栏中的「执行」按钮。如果控制台中打印了相应的数据行,则说明捕获成功,如下图所示:

cc9fb54b3464ff3ce0154cb9825f7895.png

5. 我们在右侧编辑窗格中输入以下语句来创建一张临时表,并使用 Elasticsearch 连接器连接到 Elasticsearch 实例:

CREATE TEMPORARY TABLE es_sink(
  order_id BIGINT,
    `user_id` bigint,      
  auction_id bigint,    
  cat_id bigint,      
  cat1 bigint,        
  property varchar,      
  buy_mount int,      
  `day` varchar  ,
    birthday varchar,
  gender int,
   PRIMARY KEY(order_id) NOT ENFORCED  -- 主键可选,如果定义了主键,则作为文档ID,否则文档ID将为随机值。
) WITH (
'connector' = 'elasticsearch-7',
  'hosts' = 'http://**********:9200',
  'index' = 'enriched_orders',
  'username' ='elastic',
  'password' ='*******'--创建ES实例时自定义的密码
);

需要将 hosts参数替换为早些时候创建资源的域名、将 password参数替换为登录 Kibana 密码。

其中,'connector' = 'elasticsearch-7'指定了使用 Elasticsearch  连接器来连接 Elasticsearch 实例写入数据。您需要使用准备步骤中申请的 Elasticsearch  URL、用户名、密码。

6. 接下来,我们希望对原始数据按照 user_id 进行 JOIN,构成一张宽表。并把宽表数据写入到 Elasticsearch 的 enriched_orders 索引中。我们在 Flink 作业编辑窗格中输入如下代码:

INSERT INTO es_sink
SELECT o.*,
  b.birthday,
  b.gender
FROM orders_dataset /*+ OPTIONS('server-id'='123450-123452') */ o
LEFT JOIN baby_dataset /*+ OPTIONS('server-id'='123453-123455') */ as b
    ON o.user_id = b.user_id;

在保证源表中有数据的情况下,再次执行 Flink 作业,观察控制台的输出结果:

ceb7025eb1c85e907eed19b084888e78.png

现在,点击控制台上的「上线」按钮,即可将我们编写的 Flink SQL 作业部署上线执行。您可以登录 Kibana 点击「Stack Management」-「Index Management」搜索 enriched_orders 查看 enriched_orders索引是否成功创建。

阿里云实时计算控制台在使用「执行」功能调试时,不会写入任何数据到下游中。因此为了测试使用 SQL Connector 写入汇表,您必须使用「上线」功能。

75621e5ae931fcb3143e98b39ec87801.png

您也可以进入 Flink UI 控制台观察流数据处理图。

7. Elasticsearch 的 enriched_orders 索引创建成功后,点击「Discover」 -「create index pattern」 ,输入enriched_orders,点击「Next step」 - 「create index pattern」,创建完成后就可以在「Kibana」-「Discover」看到写入的数据了。

a73e5c9155429ac0cf8d1e9b31154266.png

8. 接下来,我们通过对 MySQL 中源表的数据进行增改删操作,每执行一步就刷新一下「Kibana」-「Discover」界面,观察数据的变化。

8.1 order_dataset 表添加一条数据

insert into orders_dataset values ( DEFAULT ,2222222,2222222,50018855,38,'21458:33304;6933666:4421827;21475:137319;12121566:3861755',1,'20130915');

67f3d524656c036622e6b9dfe7687b65.png

8.2 baby_dataset 表中添加一条数据

insert into baby_dataset values(144335047,'20150523',1);

写入前

52292eea8398ac0331d4b65f5706fde7.png

写入后

7302d103a0f80596022d56bdb947ef4b.png

8.3 order_dataset 表更新一条数据

select order_id from orders_dataset where user_id = 2757;
--根据查到的order_id更新数据
UPDATE orders_dataset SET auction_id = 2222223 WHERE order_id = ;

更新前

0484705f809d6a94b0f3a102cd677ed2.png

更新后

66a08a613becaa3bf0aa0b2123b407b2.png

8.4 order_dataset 表中删除一条数据

select order_id from orders_dataset where user_id = 2222222;
DELETE FROM orders_dataset WHERE order_id = ;

删除前

4a9d71cf6d324b386b09479bab897398.png

删除后

72b07facb4b3334d3afc47f2affe42a9.png


步骤五:创建实时大屏 SQL 作业

前面四步和步骤四的前面四步相同,区别在于后面步骤作业的处理逻辑 SQL 不同,要统计的指标不同,所以 Elasticsearch 的 Schema 与之前不同。

1. 进入实时计算 Flink 平台,点击左侧边栏中的「应用」—「作业开发」菜单,并点击顶部工具栏的「新建」按钮新建一个作业。作业名字任意,类型选择「流作业 / SQL」,其余设置保持默认。如下所示:

f82005ce24c97f6d312d892e823f151a.png

2. 成功创建作业后,右侧编辑窗格应该显示新作业的内容:

dbbf00261804598f87e7b3be5e2e0c34.png

3. 接下来,我们在右侧编辑窗格中输入以下语句来创建二张临时表,并使用 MySQL CDC 连接器实时捕获 orders_dataset 和 baby_dataset 的变化:

CREATE TEMPORARY TABLE orders_dataset (
  order_id BIGINT,
  `user_id` bigint,      
  auction_id bigint,    
  cat_id bigint,      
  cat1 bigint,        
  property varchar,      
  buy_mount int,      
  `day` varchar  ,
   PRIMARY KEY(order_id) NOT ENFORCED
) WITH (
    'connector' = 'mysql',
    'hostname' = '******************.mysql.rds.aliyuncs.com',
    'port' = '3306',
    'username' = '***********',
    'password' = '***********',
    'database-name' = '***********',
    'table-name' = 'orders_dataset'
);
CREATE TEMPORARY TABLE baby_dataset (
  `user_id` bigint,
  birthday varchar,
  gender int,
    PRIMARY KEY(user_id) NOT ENFORCED
) WITH (
    'connector' = 'mysql',
    'hostname' = '******************.mysql.rds.aliyuncs.com',
    'port' = '3306',
    'username' = '***********',
    'password' = '***********',
    'database-name' = '***********',
    'table-name' = 'baby_dataset'
);

需要将 hostname 参数替换为早些时候创建资源的域名、将 username 和 password参数替换为数据库登录用户名及密码、将 database-name 参数替换为之前在 RDS 后台中创建的数据库名称。

其中,'connector' = 'mysql'指定了使用 MySQL CDC 连接器来捕获变化数据。您需要使用准备步骤中申请的 RDS MySQL URL、用户名、密码,以及之前创建的数据库名替换对应部分。

任何时候您都可以点击顶部工具栏中的「验证」按钮,来确认作业 Flink SQL 语句中是否存在语法错误。

4. 为了测试是否成功地捕获了源表数据,紧接着在下面写一行 SELECT * FROM source_table;语句,选中临时表和 select 语句,并点击工具栏中的「执行」按钮。如果控制台中打印了相应的数据行,则说明捕获成功,如下图所示:

693dfb43c68ddd878f913e30e2a8dc88.png

5. 我们在右侧编辑窗格中输入以下语句来创建一张临时表,并使用 Elasticsearch 连接器连接到 Elasticsearch 实例:

CREATE TEMPORARY TABLE es_sink(
  day_year varchar,
  `buy_num` bigint,      
  baby_num bigint,
  PRIMARY KEY(day_year) NOT ENFORCED  -- 主键可选,如果定义了主键,则作为文档ID,否则文档ID将为随机值。
) WITH (
'connector' = 'elasticsearch-7',
  'hosts' = 'http://**********:9200',
  'index' = 'enriched_orders_view',
  'username' ='elastic',
  'password' ='*******'--创建ES实例时自定义的密码
);

需要将 hosts 参数替换为早些时候创建资源的域名、将 password 参数替换为登录Kibana 密码。

其中,'connector' = 'elasticsearch-7'指定了使用 Elasticsearch  连接器来连接 Elasticsearch 实例写入数据。您需要使用准备步骤中申请的 Elasticsearch  URL、用户名、密码。

6. 接下来,我们希望对原始数据按照 user_id 进行 JOIN,构成一张宽表。然后对宽表数据的订单时间取到月份进行分组 GROUP BY,并统计每个分组中订单的购买数量 SUM 和出生婴儿的数量 COUNT,并将结果数据写入到 Elasticsearch 的 enriched_orders_view 索引中。我们在 Flink 作业编辑窗格中输入如下代码:

INSERT INTO es_sink
SELECT 
  SUBSTRING(tmp1.`day` FROM 1 FOR 6) as day_year,
  SUM(tmp1.buy_mount) as buy_num,
  COUNT(birthday) as baby_num
FROM(
  SELECT o.*,
    b.birthday,
    b.gender
  FROM orders_dataset /*+ OPTIONS('server-id'='123456-123457') */ o
  LEFT JOIN baby_dataset /*+ OPTIONS('server-id'='123458-123459') */ as b
    ON o.user_id = b.user_id
) tmp1
GROUP BY SUBSTRING(tmp1.`day` FROM 1 FOR 6)

在保证源表中有数据的情况下,再次执行 Flink 作业,观察控制台的输出结果:

72ac067acc730592778d3b353f2e5c35.png

现在,点击控制台上的「上线」按钮,即可将我们编写的 Flink SQL 作业部署上线执行。您可以登录 Kibana 点击「Stack Management」-「Index Management」搜索 enriched_orders_view 查看 enriched_orders_view 索引是否成功创建。

阿里云实时计算控制台在使用「执行」功能调试时,不会写入任何数据到下游中。因此为了测试使用 SQL Connector 写入汇表,您必须使用「上线」功能。

6e7ab28098cceabb5bda52c10fc8d34d.png

您也可以进入 Flink UI 控制台观察流数据处理图。

7. Elasticsearch 的 enriched_orders_view 索引创建成功后,点击「Discover」 -「create index pattern」 ,输入 enriched_orders_view,点击「Next step」 - 「create index pattern」,创建完成后就可以在「Kibana」-「Discover」看到写入的数据了。

ffd1597e7dc098f6febecbf8c8caad7f.png

8. 在「Discover」界面点击左下角「Available fields」-「baby_num」,点击后会展示「TOP 5 VALUES」小窗口,点击窗口下方的「Visualize」,即可跳转到可视化图表界面。

305f54f8ba63688eb88d66b44de7908a.png

跳转界面后切换图形格式为柱状图 Bar。

d7e1d15a966edd715219e720f6cf9731.png

9702ddab635241b362e87e15608b5b13.png

配置右侧 X-axis、Y-axis

X-axis 配置 Select a field为day_year.keyword,Number of values 选择到最大 100,order by 选择  alphabetical ,order direction 选择 ascending,Display name 自定义横轴名称,此处定义为  day_year_month ,然后点击 Close。

510aa2a37f36e7b4c6614c4d4135943e.png

Y-axis 配置 Select a field 为 buy_num,Display name 自定义纵轴名称,此处定义为 buy_num ,Axis side 选择 Left ,然后点击 Close。界面中间即生成了对应的折线图。

5c7612f6fe33778ea609f310156a942b.png

9. 点击右下角的+,新建一个 layer,切换新建的 layer 的图格式为折线图 Line

97edec32b8f9f79f7d4693b4eedcf6af.png

9ea2bac1ad6563c9f3390bf4afcbd4f0.png

配置右侧 X-axis、Y-axis

X-axis 配置 Select a field 为 day_year.keyword,Number of values 选择到最大100,order by 选择 alphabetical ,order direction 选择 ascending,Display name自定义横轴名称,此处定义为 day_year_month ,然后点击 Close。

与上一个 X-axis 配置完全相同。

Y-axis 配置 Select a field 为 baby_num,Display name 自定义纵轴名称,此处定义为 baby_num ,Value format 选择 Pecent,Axis side 选择 Right ,然后点击Close。界面中间即生成了对应的折线图与柱状图的复合图。

5a47b31ec0deda7bf4cb4c46fcd79400.png

10. 最后点击右上角的 Save,定义此图表的名称即可保存。

想要了解更多商品销售额实时统计的实验信息吗?快来尝试一下吧!

5d7e7bf019e436ce8b5936a4fb743be7.png

往期精选

641cdfb82e75917bb1700aee70546c2f.png

df4edfbc2a97a46e173f431e478b9fba.jpeg

7042ad53bf9c3daa8850b35e4fab71e9.jpeg

3112aa9642d61f62df35906bcb98dc57.jpeg

4884ebb7ddf931eeb80e23b01a3e09be.jpeg


▼ 活动推荐▼

afb00f5419cda4f1ca727b49a8af1031.jpeg

▼ 关注「Apache Flink」,获取更多技术干货 ▼

9915b898f52190c7fb827a9e9fa5dcb9.png

 749e7799ea2777a7b67aa1f6c074427e.gif  点击「阅读原文」,即刻入营

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/699103.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

K8s组件:etcd安装、使用及原理(Linux)

K8s组件:etcd安装、使用及原理(Linux) 1 介绍及安装 1.1 介绍 分布式系统架构中对一致性要求很高,etcd就满足了分布式系统中的一致性要求。 实现了分布式一致性键值对存储的中间件,支持跨平台,有活跃的…

交互式标注工具-Paddlelabel

PaddleLabel 是基于飞桨 PaddlePaddle 各个套件功能提供的配套标注工具。目前支持对分类、检测、分割、OCR 四种常见的计算机视觉任务数据集进行标注和管理,除基础的手动标注功能外也支持深度学习辅助标注,可以有效地提升标注效率。重点是free free free…

玩转代码|那些实用的JavaScript单行代码,帮你轻松工作

目录 数组去重 从url获取参数并转为对象 检查对象是否为空 反转字符串 生成随机十六进制 检查当前选项卡是否在后台 检测元素是否处于焦点 检查设备类型 文字复制到剪贴板 获取选定的文本 查询某天是否为工作日 转换华氏/摄氏 两日期之间相差的天数 将 RGB 转换为…

并发-编程之JMMvolatile详解

并发三大特性:可见性、原子性、有序性 并发都是数据【多线程对一个变量进行连续加1】 线程A和B都对count进行连续加1,因为count不是原子性,如果再执行countcount1之前cpu执行权被抢占,就会阻塞住,这时候线程B完成count…

基于Java车库智能管理平台设计实现(源码+lw+部署文档+讲解等)

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

Java | 使用切面AOP拦截并修改Controller接口请求参数

关注common wx: CodingTechWork 引言 在开发过程中,会有一些需求将controller层的一些方法入参进行全量转换,最容易想到的可能是在调用下层service方法时,调用公共的方法进行入参转换,这时带来的唯一问题就是代码不雅…

TCP的粘包、拆包、解决方案以及Go语言实现

什么是粘包,拆包? TCP的粘包和拆包问题往往出现在基于TCP协议的通讯中,比如RPC框架在使用TCP进行数据传输时,由于TCP是基于字节流的协议,而不是基于消息的协议,可能会出现粘包(多个消息粘在一起…

基于matlab创建基于颜色特征的图像检索系统(附源码)

一、前言 此示例说明如何使用自定义的功能包工作流创建基于内容的图像检索 (CBIR) 系统。 基于内容的图像检索 (CBIR) 系统用于查找在视觉上与查询图像相似的图像。CBIR系统的应用可以在许多领域找到,例如基于网络的…

记账APP:小哈记账4——记账首页页面的制作(1)

项目介绍: 小哈记账是一款用于记账APP,基于Android Studio开发工具,采用Java语言进行开发,同时使用litepal和阿里云数据库进行数据的增删查改,以图标的形式在App的界面上显示。App可以清晰显示收支情况,并以…

2. MongoDB分片集群架构实战-----MongoDB分片集群和多文档事务详解

分布式技术MongoDB 1. 分片简介2. MongoDB分片集群架构3. 环境搭建3.1 分片集群搭建3.2 使用mtools搭建分片集群 4 使用分片集群5. 分片策略5.1 什么是chunk5.2 分片算法5.3 哈希分片5.4 分片标签5.4 分片键(ShardKey)的选择5.5 分片键(ShardKey)的约束 6. 数据均衡6.1 均衡的方…

【JAVAWEB】JavaScript基础知识

目录 1.认识JavaScript 1.1JavaScript是什么 1.2JavaScript和html,css的关系 1.3JavaScript的组成 2.JavaScript的前置知识 2.1JavaScript的书写形式 行内式 内嵌式 外部式 2.2注释 2.3输入输出 3.JavaScript的语法知识 3.1变量的使用 创建变量 使用变量 3.2动态…

echarts柱状图查找数据

controller层&#xff1a; /*** 查询最近一周每天的行为识别总人数* return*/ApiOperation("查询最近一周每天的行为识别总人数") // RequiresPermissions("zhgd:aialarmdata:selectShu")GetMapping("/selectShu")public List<List> se…

UE5 Motion Warping功能学习

MotionWarping&#xff08;运动扭曲&#xff09;可对角色根运动进行修改&#xff0c;从而让角色根运动动画结束时准确停在某一点&#xff0c;如图&#xff1a; 此外UE5还提供移动步幅、转向的Warping功能&#xff08;防滑步&#xff09;&#xff0c;之前写过一个简单的介绍可…

9.2 IO多路复用select函数

目录 I/O多路复用模型 多路复用的实现方式 select函数 fd_set结构体 I/O多路复用模型 多路复用的实现方式 select函数 int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *timeout);poll函数 int poll(struct pollfd *fds, nfds_…

Git 安装 配置初始化

1. Git 下载 1.1 git 官网下载 Git 官网 https://git-scm.com/download/win 根据自己的电脑系统下载对应的版本 1.2 百度网盘下载 百度网盘&#xff1a;https://pan.baidu.com/s/17Thcov7VKfIc_hINcQimrw 提取码&#xff1a;13142. 安装git 2.1 双击安装包 2.2 点击next …

新应用爆发,开启5G的鱼龙之变

鱼龙变化&#xff0c;是中国自古以来就有的吉祥寓意与美好期盼。早在商代出土的玉雕中&#xff0c;就出现了由鱼化为龙的形象。晋代民间的歌谣中&#xff0c;已经有了“东海大鱼化为龙”的说法。在此之后&#xff0c;“鱼跃龙门”成为了考试中第的代名词&#xff0c;也被引申为…

台灯选用什么类型好?分享好用的护眼台灯

建议是选择护眼台灯比较好一点&#xff0c;不管是大人还是孩子使用&#xff0c;都会比普通台灯护眼一些。主要是普通台灯在交流电状态下正常工作的时候&#xff0c;每秒钟会发生闪烁100次左右&#xff0c;这样的频率人眼是看不出来的。但是在台灯下时间一长&#xff0c;极其容易…

sonarqube安装指南

sonarQube安装的指导文章说起来有很多&#xff0c;其他步骤本文不再赘述&#xff0c;可以参考其他文章。 在这里讲一下对JDK版本的事情。 SonarQube Server对系统的JDK、和研发写代码所使用的JDK版本有要求&#xff0c;要求大版本统一&#xff0c;比如大家基本上都在用JDK8&a…

景联文科技高质量教育GPT题库:引领教育行业的技术革命

ChatGPT拉开了大语言题库和生成式AI产业蓬勃发展的序幕。全世界教育科技公司扎堆接入GPT-4&#xff0c;涵盖美国、欧洲、日韩、中东和北非地区等。大语言题库在教育领域中势必将获得更加广阔的应用前景和丰富的应用场景。 杭州景联文科技是AI基础数据行业的头部企业&#xff0c…

实用技巧之拼接

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于拼接的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.什么时候会用到拼接 二.使用什么方式进…