当前位置: 首页 > news >正文

ClickHouse(六):Clickhouse数据类型-1

进入正文前,感谢宝子们订阅专题、点赞、评论、收藏!关注IT贫道,获取高质量博客内容!

🏡个人主页:含各种IT体系技术,IT贫道_Apache Doris,Kerberos安全认证,大数据OLAP体系技术栈-CSDN博客

📌订阅:拥抱独家专题,你的订阅将点燃我的创作热情!

👍点赞:赞同优秀创作,你的点赞是对我创作最大的认可!

⭐️ 收藏:收藏原创博文,让我们一起打造IT界的荣耀与辉煌!

✏️评论:留下心声墨迹,你的评论将是我努力改进的方向!


目录

1. Int

​​​​​​​2. Float

​​​​​​​3. Decimal

4. String

5. FixedString

​​​​​​​​​​​​​​6. UUID

​​​​​​​​​​​​​​7. Date

​​​​​​​8. DateTime

​​​​​​​​​​​​​​9. DateTime64

​​​​​​​10. 布尔类型


ClickHouse提供了许多数据类型,它们可以划分为基础类型、复合类型和特殊类型。我们可以在system.data_type_families表中检查数据类型名称以及是否区分大小写。这个表中存储了ClickHouse支持的所有数据类型。

 

select * from system.data_type_families limit 10;SELECT *FROM system.data_type_familiesLIMIT 10┌─name────────────┬─case_insensitive─┬─alias_to─┐│ Polygon          │                    0 │            ││ Ring              │                    0 │            ││ MultiPolygon    │                    0 │            ││ IPv6              │                    0 │            ││ IntervalSecond  │                    0 │            ││ IPv4              │                    0 │            ││ UInt32            │                   0 │             ││ IntervalYear     │                   0 │             ││ IntervalQuarter │                   0 │             ││ IntervalMonth    │                   0 │             │└─────────────────┴──────────────────┴──────────┘10 rows in set. Elapsed: 0.004 sec.

下面介绍下常用的数据类型,ClickHouse与Mysql、Hive中常用数据类型的对比图如下:

MySQL

Hive

ClickHouse(区分大小写)

byte

TINYINT

Int8

short

SMALLINT

Int16

int

INT

Int32

long

BIGINT

Int64

varchar

STRING

String

timestamp

TIMESTAMP

DateTime

float

FLOAT

Float32

double

DOUBLE

Float64

boolean

BOOLEAN

1. Int

ClickHouse中整形分为Int8、Int16、Int32、Int64来表示整数不同的取值范围,其末尾数字正好代表占用字节的大小(8位=1字节),整形又包含有符号整形和无符号整形,他们写法上的区别为无符号整形前面加“U”表示。

  • 有符号整型范围

类型

字节

范围

Int8

1

[-128:127]

Int16

2

[-32768:32767]

Int32

4

[-2147483648:2147483647]

Int64

8

[-9223372036854775808:9223372036854775807]

  • 无符号整形范围:

类型

字节

范围

UInt8

1

[0:255]

UInt16

2

[0:65535]

UInt32

4

[0:4294967295]

UInt64

8

[0:18446744073709551615]

​​​​​​​​​​​​​​2. Float

我们建议使用整数方式来存储数据,因为浮点类型数据计算可能导致四舍五入的误差。浮点类型包含单精度浮点数和双精度浮点数。

  • 单精度浮点数

类型

字节

有效精度位数

Float32

4

7

Float32从小数点后第8位起会发生数据溢出。

  • 双精度浮点数

类型

字节

有效精度位数

Float64

8

16

Float64从小数点后第17位起会发生数据溢出。

  • 示例
    • toFloat32(...) 用来将字符串转换成Float32类型的函数
    • toFloat64(...) 用来将字符串转换成Float64类型的函数
#浮点数有可能导致数据误差node1 :) select 1-0.9SELECT 1 - 0.9┌───────minus(1, 0.9)─┐│ 0.09999999999999998 │└─────────────────────┘1 rows in set. Elapsed: 0.021 sec.#Float32类型,从第8位开始产生溢出,会四舍五入。node1 :) select toFloat32(0.123456789);SELECT toFloat32(0.123456789)┌─toFloat32(0.123456789)─┐│             0.12345679 │└────────────────────────┘1 rows in set. Elapsed: 0.004 sec. # Float64类型,从第17为开始产生数据溢出,会四舍五入node1 :) select toFloat64(0.12345678901234567890);SELECT toFloat64(0.12345678901234568)┌─toFloat64(0.12345678901234568)─┐│            0.12345678901234568 │└────────────────────────────────┘1 rows in set. Elapsed: 0.006 sec.

​​​​​​​3. Decimal

有符号的定点数,可在加、减和乘法运算过程中保持精度。ClickHouse提供了Decimal32、Decimal64、Decimal128、Decimal256几种精度的定点数,支持几种写法:

  • Decimal(P,S)
  • Decimal32(S),数据范围:(-1*10^(9-S),1*10^(9-S))
  • Decimal64(S),数据范围:(-1*10^(18-S),1*10^(18-S))
  • Decimal128(S),数据范围:(-1*10^(38-S),1*10^(38-S))
  • Decimal256(S),数据范围:(-1*10^(76-S),1*10^(76-S))

其中,P代表精度,决定总位数(整数部分+小数部分),取值范围是1~76。S代表规模,决定小数位数,取值范围是0~P。

根据P值的范围可以有如下对等写法,这里以小数点后2位举例:

P取值

原生写法示例

等同于

[1:9]

Decimal(9,2)

Decimal32(2)

[10:18]

Decimal(18,2)

Decimal64(2)

[19:38]

Decimal(38,2)

Decimal128(2)

[39:76]

Decimal(76,2)

Decimal256(2)

另外,Decimal数据在进行四则运算时,精度(总位数)和规模(小数点位数)会发生变化,具体规则如下:

  • 精度(总位数)对应规则:
  1. Decimal64(S1) 运算符 Decimal32(S2) -> Decimal64(S)
  2. Decimal128(S1) 运算符 Decimal32(S2) -> Decimal128(S)
  3. Decimal128(S1) 运算符 Decimal64(S2) -> Decimal128(S)
  4. Decimal256(S1) 运算符Decimal<32|64|128>(S2) -> Decimal256(S)

两个不同精度的数据进行四则运算时,结果数据的精度以最大精度为准。

  • 规模(小数点位数)对应规则:
  1. 加法|减法:S=max(S1,S2),即以两个数据中小数点位数最多的为准。
  2. 乘法:S=S1+S2(注意:S1精度>=S2精度),即以两个数据的小数位相加为准。
  3. 除法:规模以被除数的小数位为准。两数相除,被除数的小数位数不能小于除数的小数位数也就是触发的规模可以理解为与两个数据中小数点位数大的为准。举例:a/b ,a是被除数,与a的规模保持一致。
  • 示例:
  1. toDecimal32(value,S):将字符串value转换为Decimal32类型,小数点后有S位。
  2. toTypeName(字段):获取字段的数据类型函数。
#测试加法,S取两者最大的,P取两者最大的
node1 :) selecttoDecimal64(2,3) as x,toTypeName(x) as xtype,toDecimal32(2,2) as y,toTypeName(y) as ytype,x+y as z,toTypeName(z) as ztype;

#测试减法,S取两者最大的,P取两者最大的。
node1 :) selecttoDecimal64(2,3) as x,toTypeName(x) as xtype,toDecimal32(2,2) as y,toTypeName(y) as ytype,x-y as z,toTypeName(z) as ztype;

结果如下:

 

#测试乘法,S取两者最大的,P取两者小数位之和。
node1 :) selecttoDecimal64(2,3) as x,toTypeName(x) as xtype,toDecimal32(2,2) as y,toTypeName(y) as ytype,x*y as z,toTypeName(z) as ztype;

结果如下:

#测试除法,S取两者最大的,P取被除数的小数位数。
node1 :) selecttoDecimal64(2,3) as x,toTypeName(x) as xtype,toDecimal32(2,2) as y,toTypeName(y) as ytype,x/y as z,toTypeName(z) as ztype;

 结果如下:

 

node1 :) select 1-toDecimal64(0.9,1);
SELECT 1 - toDecimal64(0.9, 1)┌─minus(1, toDecimal64(0.9, 1))─┐
│                           0.1       │
└───────────────────────────────┘

注意:在Clickhouse后续的新版本中,整数不再有2.000 小数位,即使保留了对应了小数位也不会保存。小数依然根据创建保留的小数位来保存设置。​​​​​​​

4. String

字符串可以是任意长度的。它可以包含任意的字节集,包含空字节。因此,字符串类型可以代替其他 DBMSs 中的VARCHAR、BLOB、CLOB 等类型。​​​​​​​

5. FixedString

固定长度N的字符串(N必须是严格的正自然数),一般在明确字符串长度的场景下使用,可以使用下面的语法对列声明为FixedString类型:

# N表示字符串的长度。<column_name>  FixedString(N)

当向ClickHouse中插入数据时,如果字符串包含的字节数少于 N ,将对字符串末尾进行空字节填充。如果字符串包含的字节数大于N,将抛出Too large value for FixedString(N)异常。

当做数据查询时,ClickHouse不会删除字符串末尾的空字节。 如果使用WHERE子句,则须要手动添加空字节以匹配FixedString的值,新版本后期不需要手动添加。

  • 示例:
    • toFixedString(value,N):将字符串转换为N位长度,N不能小于value字符串实际长度。
#查看字符号串长度node1 :) select toFixedString('hello',6) as a,length(a) as alength;SELECTtoFixedString('hello', 6) AS a,length(a) AS alength┌─a─────┬─alength─┐│ hello │       6   │└───────┴─────────┘node1 :) select toFixedString('hello world',6) as a,length(a) as alength;SELECTtoFixedString('hello world', 6) AS a,length(a) AS alengthReceived exception from server (version 20.8.3):Code: 131. DB::Exception: Received from localhost:9000. DB::Exception: String too long for type FixedString(6).

​​​​​​​​​​​​​​6. UUID

UUID是一种数据库常见的主键类型,在ClickHouse中直接把它作为一种数据类型。UUID共有32位,它的格式为8-4-4-4-12,如果在插入新记录时未指定UUID列值,则UUID值将用0来填充(00000000-0000-0000-0000-000000000000)。

UUID类型不支持算术运算、聚合函数sum和avg。

  • 示例:
    • generateUUIDv4()随机生成一个32位的UUID。
# 使用mydb库node1 :) use mydb;#创建表t_uuid,指定x列为UUID类型,表引擎为TinyLognode1 :) CREATE TABLE t_uuid (x UUID, y String) ENGINE=TinyLog#向表 t_uuid中插入一条数据node1 :) INSERT INTO t_uuid SELECT generateUUIDv4(), 'Example 1';#向表t_uuid中插入一条数据,这里不指定UUID的值,默认会生成0来填充node1 :) INSERT INTO t_uuid (y) VALUES ('Example 2')#查询结果node1 :) select * from t_uuid;SELECT *FROM t_uuid┌────────────────────────────────────x─┬─y─────────┐│ 9c9f82dc-48a0-4749-b46a-cf6a1159c1fe │ Example 1 ││ 00000000-0000-0000-0000-000000000000 │ Example 2 │└──────────────────────────────────────┴───────────┘2 rows in set. Elapsed: 0.003 sec.

​​​​​​​​​​​​​​7. Date

Date只能精确到天,用两个字节存储,表示从1970-01-01(无符号)到当前的日期值。日期中没有存储时区信息,不能指定时区。

  • 示例:
    • now() : 获取当前天日期,返回格式:yyyy-MM-dd HH:mm:ss
    • toDate(value) : 将字符串转成Date,只支持yyyy-MM-dd格式。
# 创建表t_datenode1 :) CREATE TABLE t_date (x date) ENGINE=TinyLog;# 向表中插入两条数据node1 :) INSERT INTO t_date VALUES('2021-06-01'),('2021-07-01');# 查询结果node1 :) SELECT x,toTypeName(x) FROM t_date;SELECTx,toTypeName(x)FROM t_date┌──────────x─┬─toTypeName(x)─┐│ 2021-06-01 │ Date            ││ 2021-07-01 │ Date            │└────────────┴───────────────┘2 rows in set. Elapsed: 0.003 sec.# 获取当前天日期时间及日期转换node1 :) select now(),toDate(now()) as d,toTypeName(d) ;SELECTnow(),toDate(now()) AS d,toTypeName(d)┌───────────────now()─┬──────────d─┬─toTypeName(toDate(now()))─┐│ 2021-01-25 18:03:00 │ 2021-01-25 │ Date                          │└─────────────────────┴────────────┴───────────────────────────┘1 rows in set. Elapsed: 0.004 sec.

​​​​​​​8. DateTime

DateTime精确到秒,可以指定时区。用四个字节(无符号的)存储Unix时间戳。允许存储与日期类型相同的范围内的值。最小值为0000-00-00 00:00:00,时间戳类型值精确到秒。

时区使用启动客户端或服务器时的系统时区。默认情况下,客户端连接到服务的时候会使用服务端时区。您可以通过启用客户端命令行选项 --use_client_time_zone 来设置使用客户端时区。

  • 示例:
    • toDateTime(DateTimeValue) :将字符串转成DateTime,只支持yyyy-MM-dd HH:MI:SS。
    • toDateTime(DateTimeValue,时区) :同上,支持将数据转换为对应时区时间。
# 创建表 t_datetimenode1 :) CREATE TABLE t_datetime(`timestamp` DateTime) ENGINE = TinyLog;# 向表中插入一条数据node1 :) INSERT INTO t_datetime Values('2021-06-01 08:00:00');# 查询数据node1 :) SELECT timestamp,toTypeName(timestamp) as t FROM t_datetime;SELECTtimestamp,toTypeName(timestamp) AS tFROM t_datetime┌───────────timestamp─┬─t────────┐│ 2021-06-01 08:00:00 │ DateTime │└─────────────────────┴──────────┘1 rows in set. Elapsed: 0.003 sec# 转换时区查询node1 :) SELECT  toDateTime(timestamp, 'Asia/Shanghai') AS column, toTypeName(column) AS x  FROM t_datetime;SELECTtoDateTime(timestamp, 'Asia/Shanghai') AS column,toTypeName(column) AS xFROM t_datetime┌──────────────column─┬─x─────────────────────────┐│ 2021-06-01 08:00:00 │ DateTime('Asia/Shanghai') │└─────────────────────┴───────────────────────────┘1 rows in set. Elapsed: 0.003 sec.

​​​​​​​​​​​​​​9. DateTime64

DateTime64精确到毫秒和微秒,可以指定时区。在内部,此类型以Int64类型将数据存储。时间刻度的分辨率由precision参数确定。此外,DateTime64 类型可以像存储其他数据列一样存储时区信息,时区会影响 DateTime64 类型的值如何以文本格式显示,以及如何解析以字符串形式指定的时间数据 (‘2020-01-01 05:00:01.000’)。时区信息不存储在表的行中,而是存储在列的元数据中。

语法如下:

# precision 精度,timezone:时区DateTime64(precision, [timezone])
  • 示例:
    • toDateTime64(timeStr,precision):将字符串转成DateTime64,精度为precision。支持yyyy-MM-dd HH:MI:SS.SSS时间格式。
    • toDateTime64(timeStr,precision,timezone):同上,只是可以将时间转换为对应时区时间。
#创建表node1 :) CREATE TABLE dt(`timestamp` DateTime64(3, 'Europe/Moscow'),`event_id` UInt8) ENGINE = TinyLog#插入数据node1 :) INSERT INTO dt Values (1546300800000, 1), ('2019-01-01 00:00:00', 2),(1546300812345, 3)#查询数据node1 :) select * from dt;SELECT *FROM dt┌───────────────timestamp─┬─event_id─┐│ 2019-01-01 03:00:00.000 │        1   ││ 2019-01-01 00:00:00.000 │        2   ││ 2019-01-01 03:00:12.345 │        3   │└─────────────────────────┴──────────┘3 rows in set. Elapsed: 0.003 sec.#使用toDateTime64转换时间node1 :) select toDateTime64(timestamp,4) as t1,toDateTime64(timestamp,4,'Europe/London') as t2,event_id from dt;SELECTtoDateTime64(timestamp, 4) AS t1,toDateTime64(timestamp, 4, 'Europe/London') AS t2,event_idFROM dt┌───────────────────────t1─┬───────────────────────t2─┬─event_id─┐│ 2019-01-01 03:00:00.0000 │ 2019-01-01 00:00:00.0000 │        1 ││ 2019-01-01 00:00:00.0000 │ 2018-12-31 21:00:00.0000 │        2 ││ 2019-01-01 03:00:12.3450 │ 2019-01-01 00:00:12.3450 │        3 │└──────────────────────────┴──────────────────────────┴──────────┘3 rows in set. Elapsed: 0.003 sec.

​​​​​​​10. 布尔类型

ClickHouse中没有单独的类型来存储布尔值。可以使用 UInt8 类型,取值限制为 0 或 1。具体参照枚举类型。


👨‍💻如需博文中的资料请私信博主。


相关文章:

ClickHouse(六):Clickhouse数据类型-1

进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; &#x1f3e1;个人主页&#xff1a;含各种IT体系技术&#xff0c;IT贫道_Apache Doris,Kerberos安全认证,大数据OLAP体系技术栈-CSDN博客 &…...

【Linux】网络基础

&#x1f34e;作者&#xff1a;阿润菜菜 &#x1f4d6;专栏&#xff1a;Linux系统网络编程 文章目录 一、协议初识和网络协议分层&#xff08;TCP/IP四层模型&#xff09;认识协议TCP/IP五层&#xff08;或四层&#xff09;模型 二、认识MAC地址和IP地址认识MAC地址认识IP地址认…...

小程序-接口概率性接收不到参数

在小程序上调用一个接口&#xff0c;传入筛选条件&#xff0c;但返回结果却没有进行筛选&#xff0c;概率性出现这种情况&#xff0c;频率较低。 然后在postman调用该接口&#xff0c;调用很多很多次&#xff0c;发现也出现这种问题&#xff0c;看了代码&#xff0c;接口的传参…...

合作客户销售数据可视化分析

以一个案例进行实际分析&#xff1a; 数据来源&#xff1a;【地区数据分析】 以此数据来制作报表。 技巧一&#xff1a;词云图 以城市名称来显示合同金额的分布&#xff0c;合同金额越大&#xff0c;则城市文字显示越大。 技巧二&#xff1a;饼图 下面制定一个&#xff0c;合…...

git仓库迁移场景

1.git仓库迁移 代码仓库从公网迁移内网&#xff0c;内外网网络不通&#xff0c;而且必须保证代码完整&#xff0c;包括分支以及提交记录。具体步骤如下 1.1 拉取所有分支镜像 1.2 现在本地电脑新建文件夹 mkdir newdir1.3 进入新建文件 newdir 执行下面命令拉取所有镜像代码…...

【RabbitMQ】之持久化机制

目录 一、RabbitMQ 持久化机制 1、RabbitMQ 持久化概述2、队列持久化3、消息持久化4、交换器持久化 二、RabbitMQ 知识扩展 1、内存告警与内存换页2、磁盘告警与配置3、数据写入磁盘时机4、磁盘消息格式5、磁盘文件删除机制 一、RabbitMQ 持久化机制 1、RabbitMQ 持久化概述…...

【项目6 UI Demo】前端代码记录

前端代码记录 1.GridListItem中的布局 在这个Item中的布局采用的是VBox和HBox相结合的方式。相关的代码如下&#xff1a; <VBox class"sapUiTinyMargin"><HBox justifyContent"SpaceBetween"><Titletext"{ToolNumber}"wrapping…...

【计算机网络】应用层协议 -- HTTP协议

文章目录 1. 认识HTTP协议2. 认识URL3. HTTP协议格式3.1 HTTP请求协议格式3.2 HTTP响应协议格式 4. HTTP的方法5. HTTP的状态码6. HTTP的Header7. Cookie和Session 1. 认识HTTP协议 协议。网络协议的简称&#xff0c;网络协议是通信计算机双方必须共同遵守的一组约定&#xff0…...

了解Unity编辑器之组件篇Layout(八)

Layout&#xff1a;用于管理和控制UI元素的排列和自动调整一、Aspect Ratio Fitter&#xff1a;用于根据宽高比自动调整UI元素的大小 Aspect Mode&#xff1a;用于定义纵横比适配的行为方式。Aspect Mode属性有以下几种选项&#xff1a; &#xff08;1&#xff09;None&#xf…...

如何使用Flask-Mail来发送电子邮件

你知道如何使用Flask-Mail来发送电子邮件吗 Flask-Mail是一个用于Flask框架的扩展&#xff0c;它简化了在Flask应用程序中发送电子邮件的过程。通过使用Flask-Mail&#xff0c;你可以轻松地创建邮件消息对象&#xff0c;设置发件人、收件人、主题和正文&#xff0c;并使用SMTP服…...

【笔记】Java并发编程

为什么不建议使用Executors创建线程池分析 不建议使用Executors来创建线程池&#xff0c;主要是有两大原因第一个是问题回溯的问题&#xff0c;使用Executors都可以使用默认的情况&#xff0c;无法用户自定义线程名称不利于排查问题&#xff0c;第二个原因也是最主要原因就是线…...

Hive内部表和外部表

表类型详解 表分类 在Hive中,表类型主要分为两种 第一种&#xff1a;内部表 也叫管理表表目录会创建在集群上的{hive.metastore.warehouse.dir}下的相应的库对应的目录中。默认创建的表就是内部表 第二种&#xff1a;外部表 外部表需要使用关键字"external"&#xff…...

【面试题】与通义千问的芯片前端设计模拟面试归纳

这里是尼德兰的喵芯片设计相关文章,欢迎您的访问! 如果文章对您有所帮助,期待您的点赞收藏! 让我们一起为芯片前端全栈工程师而努力! 前言 两个小时,与chatGPT进行了一场数字IC前端设计岗的面试_尼德兰的喵的博客-CSDN博客 和GPT-3.5的回答可以对比品尝,味道更好。 模…...

无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本。npm.ps1 cannot be loaded

目录 原因 解决方法 提示 查看当前的执行策略命令 改回默认值 "Restricted"命令 这个错误提示是因为您的系统禁止执行 PowerShell 脚本。 原因 现用执行策略是 Restricted&#xff08;默认设置&#xff09; 解决方法 以管理员身份运行 PowerShell&#xff1a;右键…...

Flowable-服务-Http任务

目录 定义图形标记XML内容界面操作 定义 Http 任务不是 BPMN 2.0 规范定义的官方任务&#xff0c;在 Flowable 中&#xff0c;Http 任务是作为一种特殊的服务 任务来实现的&#xff0c;主要调用Http服务使用。 图形标记 由于 Http 任务不是 BPMN 2.0 规范的“官方”任务&…...

Hexo+GithubPages免费搭建个人博客网站

HexoGithubPages免费搭建个人博客网站 目录 一、前言二、Github配置 新建同名仓库配置Pages 三、安装Hexo四、配置hexo-deployer-git五、访问六、发布文章七、安装主题 一、前言 我之前开了好几年的云服务器了&#xff0c;实际上使用场景并不是很多&#xff0c;感觉有点浪费…...

应用无线鼠标中的2.4GHz无线收发芯片

无线键盘和无线鼠标作为现代办公环境中常见的工具&#xff0c;为我们的工作带来了便利。无线键盘和无线鼠标的工作原理都是基于无线技术实现的&#xff0c;其中常见的是2.4GHz无线技术。让我们一起来详细了解一下它们的工作原理。 无线鼠标的原理非常简单,鼠标部分工作与传统鼠…...

Oracle 时间多少秒以后 oracle interval 多少分钟之前 Oracle日期1小时后 Java时间多少秒以后 Java日期多少天之前

Oracle 时间多少秒以后 oracle interval 多少分钟之前 Oracle日期1小时后 Java时间多少秒以后 Java日期多少天之前 一、概述 在项目开发中&#xff0c;遇到一个类似于 超时关闭的订单&#xff08;超过1分钟后关闭订单&#xff09; 的需求&#xff0c;在数据的时间写入时&#x…...

自动驾驶之轨迹规划8——Apollo参考线和轨迹

1. abstract 本文主要讲解routing和planning模块中的reference line&#xff0c;我之前一直搞不明白这个reference line是如何生成的&#xff0c;有什么作用&#xff0c;和routing以及planning的关系。现在有了一些心得打算梳理一下&#xff1a; 决策规划模块负责生成车辆的行…...

ES6 - promise.all和race方法的用法详解

文章目录 一、前言二、Promise.all()1&#xff0c;第一句&#xff1a;Promise.all()方法接受一个数组作为参数&#xff0c;且每一个都是 Promise 实例2&#xff0c;第二句&#xff1a;如果不是&#xff0c;就会先调Promise.resolve方法&#xff0c;将参数转为 Promise 实例再进…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础

第三周 Day 3 &#x1f3af; 今日目标 理解类&#xff08;class&#xff09;和对象&#xff08;object&#xff09;的关系学会定义类的属性、方法和构造函数&#xff08;init&#xff09;掌握对象的创建与使用初识封装、继承和多态的基本概念&#xff08;预告&#xff09; &a…...

Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践

在 Kubernetes 集群中&#xff0c;如何在保障应用高可用的同时有效地管理资源&#xff0c;一直是运维人员和开发者关注的重点。随着微服务架构的普及&#xff0c;集群内各个服务的负载波动日趋明显&#xff0c;传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...

解析两阶段提交与三阶段提交的核心差异及MySQL实现方案

引言 在分布式系统的事务处理中&#xff0c;如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议&#xff08;2PC&#xff09;通过准备阶段与提交阶段的协调机制&#xff0c;以同步决策模式确保事务原子性。其改进版本三阶段提交协议&#xff08;3PC&#xf…...

篇章二 论坛系统——系统设计

目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...