最新要闻
- 【全球速看料】进口游戏版号时隔548天再发放!数量逐年下降
- 天天实时:2022年iPhone 14系列出货量下调 明年越南将加入生产
- 一加11打破安卓不可能!员工自己都不敢相信
- 全球要闻:兔年邮票“蓝兔子”引争议 真是童年阴影?邮政回应:没人投诉
- 一次多重体验:杰士邦三合一安全套30只19.9元发车
- 【全球报资讯】基于NT架构脱胎换骨!QQ for Linux 3.0正式版上架官网
- 环球实时:卡梅隆自曝《阿凡达2》10分钟删减镜头:动作暴力元素相关
- 每日焦点!老外评选2022年10款最佳RPG游戏:老头环等上榜
- 无人驾驶可达80km/h:深圳坪山云巴1号线正式通车
- 【全球聚看点】还买啥Zen4 酷睿i7-12700KF到手2149元:12核5GHz游戏神U
- 环球今热点:网友吃火锅被反向抹零多收0.3元 店家:四舍五入系统设定
- 【天天速看料】首发极具颠覆性技术 比亚迪仰望发布定档:明年1月5日见
- 全球短讯!根治安卓卡顿的旗舰来了!网友做梦梦到一加11:现在就想买 等不及了
- 世界微速讯:苹果高端制造离不开中国 iPhone 15 Pro Max新增立讯代工:富士康不再是唯一
- 天天快看点丨郑州200多车相撞事故已致1死 大雾是元凶:雾天行车指南要收好
- 大牌现货:超亚N95口罩84.9元30片发车
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
天天快播:Seata
Seata–微服务分布式事务组件
一、什么是分布式事务
1.什么是事务
事务指的是一个操作单元,在这个操作单元中的所有操作最终要保持一致的行为,要么所有操作都成功,要么所有的操作都被撤销。
2.本地事务
本地事务是指基于关系型数据库的事务,也称为传统事务。大多数场景下,我们的应用都只需要提供单一的数据库,这种情况下的事务称之为本地事务。本地事务的ACID特性是数据库直接提供。
(相关资料图)
使用@Transational声明事务
3.分布式事务
分布式事务指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。
比如:
下面的两种情况,一种是同一个事务用到两个数据库,一个是同一个事务中的操作在不同的微服务上,可能使用同一个数据库,也可能用两个数据库。
二、微服务分布式事务组件–Seata
1、Seata是什么
Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。其中AT是阿里首推的模式。
官网:https://seata.io/zh-cn/
2、分布式事务提交协议
2.1两阶段提交(2PC)
两阶段提交又称2PC(two-phase commit protocol),2pc是一个非常经典的强一致、中心化的原子提交协议。这里所说的中心化是指协议中有两类节点:一个是中心化协调者节点(coordinator)和N个参与者节点(partcipant)。
阶段1:预处理阶段/请求阶段
1.询问 协调者向所有参与者发送事务请求,询问是否可以执行事务操作,然后等待各个参与者的响应。
2 执行 各个参与者接收到协调者事务请求后,执行事务操作,并将Undo和Redo信息记录到事务日志中。
3 响应 如果参与者成功执行了事务并写入了Undo和Redo信息,则向协调者返回YES响应,否则返回NO响应。当然,参与者也可能宕机,从而不能返回响应。
阶段2:提交回滚阶段/执行阶段
1.Commit/rollback请求, 在该阶段,协调者将基于第一个阶段的投票结果进行决策:提交或取消。 当且仅当所有的参与者同意提交事务协调者才通知所有的参与者提交事务,否则协调者将通知所有的参与者取消事务。
2 事务提交 参与者收到Commit或者rollback请求,执行事务提交或回滚操作,完成后释放事务执行期占用的所有资源。
3 反馈结果 参与者执行事务提交后向协调者发送Ask响应
4 完成事务 协调者接收到所有参与者的Ack响应后,完成事务提交。
2pc会遇到的问题:
1.同步阻塞 在两阶段提交的执行过程中,所有的参与者操作的逻辑都是处于阻塞状态,各个参与者在等待其他参与者响应的过程中,将无法进行其他任何操作。coordinator如果在发起提议后宕机,那么participant将进入阻塞(block)状态、一直等待coordinator回应以完成该次决议。
2.单点问题。协调者会有单点问题
3.数据不一致。网络原因或者其他原因会导致部分commit部分没有执行commit,产生数据不一致。
4.太过保守。就是说在两阶段中,任意一个节点的失败都会导致整个事物失败。
2.2 三阶段提交(3PC)
三阶段提交协议在协调者和参与者中都引入超时机制,并且把两阶段提交协议的第一个阶段拆分成了两步:询问,然后再锁资源,最后真正提交。形成canCOmmit、PreCommit、和doCommit三个阶段组成的事物处理协议。
3、Seata事务模式
seata提供了4种事务模式(AT、TCC、Saga、XA )的分布式事务实现。
其中AT模式是阿里首推的模式。
3.1 AT模式
AT(Auto Transaction)模式是一种对业务无侵入的分布式事务解决方案。是一种改进后的二阶段提交。
在AT模式下,用户只需关注自己的“业务SQL”,用户的“业务SQL”作为一阶段,Seata框架会自动生成事务的二阶段进行提交和回滚操作。
AT模式如何做到对业务的无侵入:
一阶段:
在第一阶段,Seata会拦截"业务SQL",首先解析SQL语义,找到”业务SQL“要更新的业务数据,在业务数据被更新前,将其保存成”before image“,然后执行”业务SQL"更新业务数据,在业务数据更新之后,再将其保存成“after image”,最后生成行所。以上操作全部在一个数据库事务中完成,这就保证了一阶段操作的原子性。
二阶段:
二阶段如果是提交的话,因为“业务SQL”在一阶段已经提交至数据库,所以Seata框架只需将一阶段保存的快照数据和行所删除,完成数据清理即可。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ENxNCHHG-1672223815680)(pic/6.png)]
二阶段如果是回滚的话,Seata就需要回滚一阶段已经执行的业务SQL,还原业务数据。回滚方式便是用"before image"还原业务数据;但在还原前要首先要校验脏写,对比"数据库当前业务数据"和"after image",如果两份数据完全一致就说明没有脏写,可以还原业务数据,如果不一致就说明有脏写,出现脏写就需要转人工处理。
3.2 TCC模式
TCC 与 Seata AT 事务一样都是两阶段事务,它与 AT 事务的主要区别为:
TCC 对业务代码侵入严重每个阶段的数据操作都要自己进行编码来实现,事务框架无法自动处理。
TCC效率更高
不必对数据加全局锁,允许多个事务同时操作数据。
第一阶段 Try
以账户服务为例,当下订单时要扣减用户账户金额:
假如用户购买 100 元商品,要扣减 100 元。
TCC 事务首先对这100元的扣减金额进行预留,或者说是先冻结这100元:
第二阶段 Confirm
如果第一阶段能够顺利完成,那么说明“扣减金额”业务(分支事务)最终肯定是可以成功的。当全局事务提交时, TC会控制当前分支事务进行提交,如果提交失败,TC 会反复尝试,直到提交成功为止。
当全局事务提交时,就可以使用冻结的金额来最终实现业务数据操作。
第二阶段 Cancel
如果全局事务回滚,就把冻结的金额进行解冻,恢复到以前的状态,TC 会控制当前分支事务回滚,如果回滚失败,TC 会反复尝试,直到回滚完成为止。
4、Seata的三大角色
TC 事务协调者
维护全局和分支事务的状态,驱动全局事务提交或回滚。
TM 事务管理器
定义全局事务的范围:开始全局事务、提交或回滚全局事务。
RM 资源管理器
管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
其中,TC为单独部署的Server服务器,TM和RM为嵌入到应用中的Client客户端。
三、Seata的使用
db+nacos的方式部署高可用集群模式
1、Seata Server (TC) 环境搭建
1.1 下载
Server端:存储模式(store.mode)支持三种:
file: 单机模式,全局事务会话信息内存中读写并持久化本地文件root.data,性能较高(默认)
db:高可用模式,全局事务会话信息通过db共享,相应性能差些
redis: Seata-Server 1.3及以上版本支持,性能较高,存在事务信息丢失风险,请提前配置适合当前场景的redis持久化配置。
我们这里配置db模式。
版本关系
下载地址:
https://github.com/seata/seata/releases
1.2 配置DB
1.修改file.conf文件
设置mode为db
设置数据库连接信息
2.创建数据库
找到数据库文件
https://seata.io/zh-cn/docs/ops/deploy-guide-beginner.html
复制Sql信息到数据库里执行
1.3整合Nacos
整合Nacos作为Seata的注册配置中心。
1.修改registry.conf文件
2.修改config.txt文件
下载seata源码包
将里面的script文件夹复制到seata目录下
修改config-center里面的config.txt文件
3.执行nacos-config.sh文件
先安装git工具,下载地址:https://git-scm.com/download/win
然后启动nacos服务器
再双击执行nacos-config.sh文件
执行完以后,就可以看到nacos服务器上多了很多配置文件
4.启动 seata-server
windows下双击执行 seata-server.bat
2、准备分布式事务代码
2.1 创建springboot父工程
pom文件:
org.springframework.cloud spring-cloud-dependencies 2020.0.1 pom import com.alibaba.cloud spring-cloud-alibaba-dependencies 2021.1 pom import
2.2 创建微服务order
1.pom文件
com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery org.springframework.boot spring-boot-starter-web org.projectlombok lombok org.springframework.cloud spring-cloud-starter-openfeign org.springframework.cloud spring-cloud-starter-loadbalancer com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config org.mybatis.spring.boot mybatis-spring-boot-starter 2.2.2 mysql mysql-connector-java src/main/java **/*.xml src/main/resources
2.配置文件
spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/db_orders?characterEncoding=utf8&serverTimezone=GMT%2B8 username: root password: root cloud: nacos: discovery: server-addr: http://localhost:8848 loadbalancer: ribbon: enabled: false application: name: ORDERmybatis: type-aliases-package: com.test.pojoserver: port: 8081
3.入口类
@SpringBootApplication@MapperScan(basePackages = "com.test.mapper")@EnableDiscoveryClient@EnableFeignClientspublic class OrderServiceApplication { public static void main(String[] args) { SpringApplication.run(OrderServiceApplication.class,args); }}
4.pojo层
@Data@AllArgsConstructor@NoArgsConstructorpublic class Orders { private int id; private int pid; private int state;}
5.mapper层
insert into orders values(null,#{pid},#{state})
package com.test.mapper;import com.test.pojo.Orders;public interface OrdersMapper { public int addOrder(Orders orders);}
6.service层
package com.test.service.impl;import com.test.client.StockClient;import com.test.mapper.OrdersMapper;import com.test.pojo.Orders;import com.test.service.IOrdersService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;@Servicepublic class OrdersService implements IOrdersService { @Autowired private StockClient stockClient; @Autowired private OrdersMapper ordersMapper; @Override public void addOrder(Orders orders) { ordersMapper.addOrder(orders); stockClient.updateStock(orders.getPid()); }}
7.整合Load Balance
package com.test.config;import org.springframework.cloud.client.loadbalancer.LoadBalanced;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.web.client.RestTemplate;@Configurationpublic class RemoteConfig { @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); }}
8.整合openfeign
package com.test.client;import org.springframework.cloud.openfeign.FeignClient;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;@FeignClient("STOCK")public interface StockClient { @RequestMapping(value = "/updateStock",method = RequestMethod.GET) public int updateStock(@RequestParam("pid") int pid);}
9.controller层
package com.test.controller;import com.test.pojo.Orders;import com.test.service.IOrdersService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class OrdersController { @Autowired private IOrdersService ordersService; @GetMapping("/orders") public void addOrder() { Orders orders=new Orders(); orders.setPid(1); orders.setState(1); ordersService.addOrder(orders); }}
2.3 创建微服务stock
1.pom文件
com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery org.springframework.boot spring-boot-starter-web org.projectlombok lombok com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config org.mybatis.spring.boot mybatis-spring-boot-starter 2.2.2 mysql mysql-connector-java src/main/java **/*.xml src/main/resources
2.配置文件
spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/db_stock?characterEncoding=utf8&serverTimezone=GMT%2B8 username: root password: root cloud: nacos: discovery: server-addr: http://localhost:8848 application: name: STOCKmybatis: type-aliases-package: com.test.pojoserver: port: 8082
3.入口类
package com.test;import org.mybatis.spring.annotation.MapperScan;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication@MapperScan(basePackages = "com.test.mapper")public class StockServiceApplication { public static void main(String[] args) { SpringApplication.run(StockServiceApplication.class,args); }}
4.pojo层
@Data@NoArgsConstructor@AllArgsConstructorpublic class Stock { private int id; private int pid; private int num;}
5.mapper层
update stock set num=num-1 where pid=#{pid}
package com.test.mapper;public interface StockMapper { public int updateStock(int pid);}
6.service层
package com.test.service.impl;import com.test.mapper.StockMapper;import com.test.service.IStockService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;@Servicepublic class StockService implements IStockService { @Autowired private StockMapper stockMapper; @Override public int updateStock(int pid) { return stockMapper.updateStock(pid); }}
7.controller层
package com.test.controller;import com.test.service.IStockService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class StockController { @Autowired private IStockService stockService; @GetMapping("/updateStock") public int updateStock(int pid) { return stockService.updateStock(pid); }}
3、搭建Seata Client(TM,RM)
3.1添加seata依赖
order和stock服务中都添加
com.alibaba.cloud spring-cloud-starter-alibaba-seata
3.2创建undo_log表
在order和stock数据库中都添加
CREATE TABLE IF NOT EXISTS `undo_log`( `id` BIGINT(20) NOT NULL PRIMARY KEY AUTO_INCREMENT, `branch_id` BIGINT NOT NULL COMMENT "branch transaction id", `xid` VARCHAR(128) NOT NULL COMMENT "global transaction id", `context` VARCHAR(128) NOT NULL COMMENT "undo_log context,such as serialization", `rollback_info` LONGBLOB NOT NULL COMMENT "rollback info", `log_status` INT(11) NOT NULL COMMENT "0:normal status,1:defense status", `log_created` DATETIME(6) NOT NULL COMMENT "create datetime", `log_modified` DATETIME(6) NOT NULL COMMENT "modify datetime", UNIQUE KEY `ux_undo_log` (`xid`, `branch_id`)) ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8 COMMENT ="AT transaction mode undo table";
3.3 配置事务分组
在order和stock服务中都加
spring.cloud.alibaba.seata.tx-service-group: shanghai
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AEr9Aial-1672223815695)(pic/1665063201377.png)]
3.4 配置seata的注册中心和配置中心
目的是告诉seata client 怎么去访问seata-server
在order和stock服务中都加
seata: registry: type: nacos nacos: server-addr: http://localhost:8848 application: seata-server username: nacos password: nacos group: SEATA_GROUP config: type: nacos nacos: server-addr: http://localhost:8848 username: nacos password: nacos group: SEATA_GROUP
3.5 在业务逻辑方法中添加@GlobalTransactional
3.6测试
重启两个服务,可以发现出错后,回滚了。
-
IdentityServer4 - v4.x .Net中的实践应用
IdentityServer4、IClientStore、IResourceStore、IProfileService、IResourceOwnerPasswordValidator在 NET中的
来源: 天天快播:Seata
【天天热闻】django 13 csrf 与 auth
IdentityServer4 - v4.x .Net中的实践应用
全球最新:第一百一十八篇: JavaScript 原型链式继承
【全球速看料】进口游戏版号时隔548天再发放!数量逐年下降
天天实时:2022年iPhone 14系列出货量下调 明年越南将加入生产
一加11打破安卓不可能!员工自己都不敢相信
全球要闻:兔年邮票“蓝兔子”引争议 真是童年阴影?邮政回应:没人投诉
一次多重体验:杰士邦三合一安全套30只19.9元发车
AcWing1169. 糖果
当前快讯:FreeSWITCH使用ODBC
【全球报资讯】基于NT架构脱胎换骨!QQ for Linux 3.0正式版上架官网
环球实时:卡梅隆自曝《阿凡达2》10分钟删减镜头:动作暴力元素相关
每日焦点!老外评选2022年10款最佳RPG游戏:老头环等上榜
无人驾驶可达80km/h:深圳坪山云巴1号线正式通车
【全球聚看点】还买啥Zen4 酷睿i7-12700KF到手2149元:12核5GHz游戏神U
.NET和JavaScript控件丨Infragistics功能简介
环球今热点:网友吃火锅被反向抹零多收0.3元 店家:四舍五入系统设定
【天天速看料】首发极具颠覆性技术 比亚迪仰望发布定档:明年1月5日见
全球短讯!根治安卓卡顿的旗舰来了!网友做梦梦到一加11:现在就想买 等不及了
世界微速讯:苹果高端制造离不开中国 iPhone 15 Pro Max新增立讯代工:富士康不再是唯一
天天快看点丨郑州200多车相撞事故已致1死 大雾是元凶:雾天行车指南要收好
天天报道:隐性等待和显性等待
python中的mysql操作教程及实例
大牌现货:超亚N95口罩84.9元30片发车
全球通讯!封杀半年之后微软“开恩” 俄罗斯网友可以下载Win11了
2022年进口网络游戏审批结果公布:腾讯《宝可梦大集结》等游戏在列
天天观察:世界最大液体镜面望远镜启用 成本仅为玻璃反射镜的1%
快播:NOIP动态规划
每日聚焦:数据结构(Data Structure)的基本思想是增删改查
环球视点!宝塔网站批量迁移
环球速看:首架C919机组人员分享飞行体验:感受很好、令人信任
加绒不加价:361°全革运动鞋99元大促(门店259元)
环球即时看!GTX 1060三朝元老还能被迫营业?
二代骁龙8折叠旗舰!vivo X Fold 2来了:2K轻薄大屏
实时焦点:不下载不让看全文成为历史!工信部新规将禁止网页强制用户下载应用
开发工具与低代码开发平台丨上海道宁联合Grapecity为您提供各类软件开发工具和服务
当云原生网关遇上图数据库,NebulaGraph 的 APISIX 最佳实践
天天看点:LOJ 6041 「雅礼集训 2017 Day7」事情的相似度 题解 (SAM+启发式合并)
当前热讯:WinNTSetup V5.3.0 Bata5 单文件版
一分钟搞定Netty 三大组件,如果搞不定,再看3遍
世界播报:《阿凡达2》差的远!2022国内电影票房前10:第一超40亿
前沿热点:折叠旗舰卖到白菜价!moto razr 2022宣布调价至4999元
美国人钱包年末又迎重击!极端寒潮导致上周电价飙升超6000%
天天时讯:或售70万对刚比亚迪!东风猛士M-Terrain量产实车曝光:凶悍
只有Redmi做到了!米粉没想到2022年2500元的手机都有无线充电
环球热文:隐私计算之多方安全计算(MPC,Secure Multi-Party Computation)
河南郑新黄河大桥因大雾多车相撞:涉及200多辆车
速递!安卓手机不卡顿!一加11内存基因重组技术揭秘:数据抓取量提升16倍
特斯拉股价年内暴跌70% 韩国散户疯狂抄底!背后原因不简单
女生病假期上9天班反欠公司三百多:被扣10天工资
环球速看:曝特斯拉上海工厂将在1月实施减产计划 原因未知
直降120:百度网盘超级会员12个月SVIP 178元大促
今日关注:交叉编译esp8089
【环球新要闻】Python中itertools详解
playgo是什么意思?playgo是什么牌子?
十年之痒是什么意思?十年之痒的婚姻感悟小说有哪些?
【天天聚看点】女子投资100万元 本金4年仅剩1.71万元!基金经理被集体起诉
神价手慢无:OATLY噢麦力燕麦奶1L*2瓶/19.9元抄底
焦点速读:轿车加气站去加气 一开后备厢车被炸报废
诚意碾压苹果官网!京东开启年终优惠:iPhone 14直降900元
用户已破6亿!钉钉7.0版本发布:解决产业链协同问题
室内地坪是什么意思?室内地坪漆用什么颜色?
苏武留胡节不辱是什么意思?苏武的精神品质是什么?
调配奶粉是什么意思?调制奶粉的营养价值有哪些?
亚热带水果有哪些?亚热带水果的生长环境有哪些?
拜托小姐大结局是什么?拜托小姐演员表
东非大裂谷是哪两个板块张裂形成的?东非大裂谷形成的原因是什么?
龙应台的作品有哪些?龙应台最经典的句子
乌龟和老鹰的寓意是什么?乌龟和老鹰告诉我们什么道理?
【世界热闻】Python实验报告(第8章)
全球观速讯丨Java HashMap原理
天天亮点!认证管理(锐捷交换篇)
天天快看:[PHP]用socket写一个简单的WEB服务器
游戏盒子哪个好?2022年游戏盒子排行榜
无线网络受限或者是无连接是什么原因?无线网受限制或无连接怎么办?
网上订火车票如何取票?网上订火车票用什么软件最好?
小米2s和小米2的区别有哪些?小米2s开不了机怎么办?
网通玩电信游戏卡是什么原因?网通玩电信游戏卡怎么办?
849元 墨案电纸书Air发布:24级冷暖光、30天长续航
焦点简讯:亿万富翁芒格:别再抱怨了、现在的生活比过去好了5倍多
天天报道:比亚迪推出“疯狂星期三”活动:奖品够香 附答案!
落差很大 五菱“电动吉姆尼”谍照曝光:像老头乐
全球要闻:Redmi K60系列最香版本!米粉评K60:2499元无敌 把门焊死了
天天速讯:「实操」结合图数据库、图算法、机器学习、GNN 实现一个推荐系统
天天短讯!HTML 常用标签 tag
Python爬虫实战,requests+openpyxl模块,爬取小说数据并保存txt文档(附源码)
关注:面试官问:为啥不建议使用 Select *?请你大声地回答他!!
即时:DAG任务调度系统 Taier 演进之道,探究DataSourceX 模块
【天天速看料】苹果推出跨年优惠 其实一点也没便宜
时讯:株洲卡丁车比赛事故致车手死亡后续 车手俱乐部声讨场地方
全球今日讯!彻底重构安卓内存底层!一加11将全球首发“内存基因重组”技术
天天微资讯!马斯克被曝内部圈子缺乏持不同观点的人:全是马屁精
全球滚动:K60发布后 倪飞发声:努比亚Z50才是旗舰焊门员
世界观点:RTX 4090玩游戏性能过剩 外星人懂了:将推500Hz高刷显示器
苹果股价三连跌创一年多来最低:2022累计蒸发27%
性能仅比3080略强?RTX 4070 Ti售价曝光 7199元你还可能买不到
全球快资讯:6年过去了:一代神卡GTX 1060依然值得入手
天天微头条丨平价神器!新iPad mini曝光:苹果加量不加价、还在密谋折叠屏惊喜
环球快看点丨马斯克赔哭 公司股价腰斩!消息称特斯拉上海工厂又要减产 卖不动国人不敢兴趣?