技术分享两个单机MySQL该如何校验数据一致性
作者:莫善
某互联网公司高级DBA。
本文来源:原创投稿
爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。需求介绍
业务有两个MySQL集群是通过MQ进行同步的,昨晚MQ出现异常,报了很多主键冲突,想请dba帮忙校验一下两个集群的数据是否一致。一、前言
当接到这个需求的时候并没当回事,隐约有点印象pttablechecksum能通过dsn实现MySQL的数据校验,所以当时就应承下来了。不曾想,啪啪打脸,回想起来真是草率了。
本文参考的是pttablechecksum的校验逻辑,基于数据块去遍历每个表,然后比对checksum的值判断该块是否一致,本文主要是想聊聊我在实现数据校验脚本过程中遇到的问题以及解决思路,希望对大家有帮助。二、测试dsn
利用线上的配置文件搭建一套主从环境。搭建步骤略
本例使用mysql5。7。26进行测试
本例使用perconatoolkit3。2。1进行测试1、校验主从数据一致性
这个用例将通过dsn方式连接从库。
配置dsn过程略。binpttablechecksumh192。168。1。1,umydba,ptest123456,P6666nocheckreplicationfiltersreplicatetest。checksumsnocheckbinlogformatddbatest1recursionmethoddsntperconaschema。dsnsCheckingifalltablescanbechecksummed。。。Startingchecksum。。。TSERRORSDIFFSROWSDIFFROWSCHUNKSSKIPPEDTIMETABLE0113T17:48:200000100。377dbatest1。dbatest
可以看到测试通过,能正常做校验。2、校验非主从数据一致性
这个用例将通过dsn方式连接从库,但是会将从库的复制链路stop掉,并清空复制信息。mysqlstopslave;QueryOK,0rowsaffected(0。01sec)mysqlresetslaveall;QueryOK,0rowsaffected(0。01sec)mysql
。binpttablechecksumh192。168。1。1,umydba,ptest123456,P6666nocheckreplicationfiltersreplicatetest。checksumsnocheckbinlogformatddbatest1recursionmethoddsntperconaschema。dsnsCheckingifalltablescanbechecksummed。。。Startingchecksum。。。Replicamysql2isstopped。Waiting。Replicamysql2isstopped。Waiting。Replicamysql2isstopped。Waiting。Replicamysql2isstopped。Waiting。
直接翻车,可以看到校验会提示从库【isstopped。Waiting】,这就尴尬了,pttablechecksum居然不支持非主从环境的数据校验,既然如此那只能另想他法了。三、开发工具遇到的问题1、解决复杂的联合主键问题(1)查询索引失效,或者查询报错问题
熟悉pttablechecksum的朋友应该都知道,该工具是基于主键(非空唯一键)进行扫描数据行,其实这个逻辑针对整型单列主键实现起来很简单,但是如果是联合主键且是字符型,好像就没那么简单了,有兴趣的可以思考一下。下面我先说一下大致的逻辑:
第一步:判断minrowid是否为空,为空就取该表的第一行,并记作minrowid。if〔z{minrowid}〕then拿出当前表的最小行id,每次拿数据的起始行minrowid({mysqlcomm}NBeselectmin(pk)fromtable)fi
第二步:根据minrowid作为条件进行扫描该表,取下一个数据块的数据,记录数据块的最后一行数据的主键值,记录checksum的值,并记下minrowid。selectfromtablewherepk{minrowid}limitchecksize计算这个块的checksum值minrowid({mysqlcomm}NBeselectmax(pk)from(selectpkfromtablewherepk{minrowid}orderbypklimitchecksize)a)记录下一个最小行pk值
第三步:判断minrowid是否为空,非空重复第二步,为空退出检查。if〔z{minrowid}〕thenbreakelsecontinuefi
通过上述三个步骤可以看到,如果是单列整型的主键,实现起来很简单,但是问题来了,业务的表的主键五花八门,有的是联合主键,有的是字符型的联合主键,还有整型字符型的联合主键,那么上述的实现方式显然是有问题的。所以实现起来需要多考虑几个问题:需要考虑主键是否是联合主键。
如果是联合主键,在取数据块的时候查询条件就是wherepk1xxxandpk2yyy需要考虑主键字段的数据类型是否是整型或字符型。
如果主键字段是字符型,在取数据块的时候查询条件就是wherepkxxx,否则查询将不会使用到索引。
鉴于存在上述两个问题,可以参考如下实现逻辑:获取主键字段列表,放在数组里priname(({mysqlcomm}NBeselectCOLUMNNAMEfrominformationschema。columnswheretablenametableandtableschemadbandCOLUMNKEYPRI;))根据主键字段名获取字段的数据类型,放在关联数组里fortmpin{priname〔〕}do将各个主键字段的数据类型记录到字典,后文会判断主键字段的类型是否是字符型,如果是字符型就需要特殊处理(带引号)selectDATATYPEfrominformationschema。columnswheretableschemadbandtablenametableandCOLUMNKEYPRIandCOLUMNNAME{tmp}pritype〔{tmp}〕({mysqlcomm}NBe{}2devnull)done根据字段的数据类型,如果是字符型就需要做特殊处理fortmpin{priname〔〕}do这步主要是解决将主键弄清楚,到底是单列主键还是多列,到底是整型还是其他,然后根据不同的类型拼接成一个字符串,主要是用来作为后面取数是否要加单引号因为整型取出来不用做特殊处理,但是非整型需要加上单引号,要不然作为where条件对比的时候肯定有问题if〔(grepicint{pritype〔{tmp}〕})x!1x〕thenselectstrtmpconcat(,{tmp},)pkstylestrelseselectstrtmp{tmp}fiif〔z{selectstr}〕thenselectstr{selectstrtmp}elseselectstr{selectstr},{selectstrtmp}fidone这步的作用是说在取每个块的数据,需要记录minrowid的时候会根据主键的类型记录不一样的值,比如:
整型就记录成minrowid1
字符型就记录成minrowid1
整型字符型的联合主键就记录成minrowid1,1
字符型的联合主键就记录成minrowid1,2
这样在每次取数据块的时候where后面的条件既能正确的使用索引,也不至于因为是整形而没有带上引号而报错。(2)如何界定每个数据块的左区间的边界
假如有这么一个联合主键字段primarykey(a,b,c)都是整型,该如何编写遍历sql呢?起初我的想法很简单,具体如下:minrowid(xxx,yyy,zzz)selectfromwhere11andaxxxandbyyyandczzzorderbya,b,climitchecksize
乍一看好像逻辑没问题,但是实际跑脚本的时候发现这个逻辑不能完全扫完全表,后来经过多次测试校验,得出下面的逻辑sqlminrowid(xxx,yyy,zzz)selectfromwhere11and((axxx)or(axxxandbyyy)or(axxxandbyyyandczzz))orderbya,b,climitchecksize
至此在编写校验脚本过程遇到的两个问题就算告一段落了,剩下的就是各种逻辑处理了,不过多赘述,有兴趣的可以自行阅读脚本文件。四、数据校验工具做了哪些改动1、取消forupdate
本着最低程度影响业务,所以取消加锁逻辑。但是又要保证该数据块的数据一致性,如果这个数据块是个热数据,当前正在变更,那么校验的时候难免会不一致。所以只能通过多次校验实现,默认是校验20次,其中有一次校验结果是一致,就认为是一致的,如果前5次校验过程中,这个数据块的数据没有变化,也视为不一致(可能是因为延迟,也可能是真的不一致)。
另外checksum状态是写到临时文件而非写到业务数据库。2、支持表结构校验
pttablechecksum不校验表结构,改写时添加表结构的校验。3、支持基于表的并行校验
可以基于表的并行校验,可由用户指定并行数,但是脚本有个安全机制,如果用户指定的并行数大于当前cpu空闲核心数,就会按当前(空闲核心数1)作为并行数。4、支持网络监控
添加网络监控,由用户指定网络上限百分比,当网卡流量超过这个百分比就暂停任务,等待网卡流量低于阈值才会继续任务。这个主要是出于对于中间件(mycat)的场景或者分布式数据库(tidb)的场景。5、支持定时任务功能
支持定时任务功能,用户可以使用这个功能规避业务高峰,仅在业务低峰进行数据校验。
指定了时间段执行校验任务,如果当天没校验完成,等到次日会继续校验。6、支持任意两个节点的校验
不仅限于主从节点的校验,只要目标对象支持MySQL的标准SQL语法就能做数据校验。7、添加超时机制及自杀机制
校验逻辑是通过SQL采集目标节点的数据库,如果目标数据库系统当前存在异常,无疑是雪上加霜,将会触发未知问题,所以添加超时机制,单次取数据块的阈值是5s,超过5秒就放弃等待重试。测试发现,有时候即便触发超时了,但是SQL任务还是会在目标数据库的processlist中能看到,所以又添加了一个kill机制,超时后会触发一个killprocesslistid的动作。另外为了避免kill错,在每个SQL对象添加了一个32位的md5值,每次kill的时候会校验这个md5值。
保留threadsrunning的监控,如果threadsrunning过大就会暂停校验,这部分监控逻辑是跟网络监控一起五、数据校验工具使用介绍
本工具借鉴pttablechecksum工具思路改写,可以检查随意两个mysql(支持mysqlsql语法的数据库)节点的数据一致性。
本工具仅供学习使用,如需检查线上的数据,请充分测试1、校验逻辑
基于主键以一个块遍历数据表,比对checksum的值,块的大小可通过参数指定。(1)获取该表的第一个数据块的查询SQL。(2)将两个目标节点的数据块的checksum的值,记录到临时文件,file1file2。(3)比对file1file2是否一致。不一致:重复(2)的操作,至多连续20次,还不一致会将该SQL记录到table目录
一致:跳到(4)
file1为空:表示该表遍历完成,直接跳到(5)(4)获取该表的下一个数据块的查询SQL。(5)检查通过就跳到(7),检查不通过调到(6)。(6)读取table目录校验不通过的SQL进行再次校验。
本次校验通过也视为数据一致
如果校验不通过,会将不一致的部分记录到diff目录(7)该表校验任务结束。2、功能介绍检查随意两个几点的数据一致性支持表结构的校验支持并发检查,基于表的并发支持指定时间,可以规避业务高峰期支持网络监控,如果网络超过阈值可以暂停校验不支持无主键(非空唯一键)的表不支持联合主键达到四个字段及以上的表3、安装教程(1)下载gitclonehttps:gitee。commoshancheckdataformysql。gitcdcheckdataformysql(2)配置编辑配置文件cdpathcheckdataformysqlvimconfcheck。conf
请结合实际情况根据注释提示进行相关配置修改工作路径sedisworkdir。workdircheckdataformysqlpathgstart。sh将这里的checkdataformysqlpath改成checkdataformysql的家目录的绝对路径4、使用说明(1)目录介绍moshandatagitcheckdataformysqltreeL2。confcheck。conffuncfcheckdiffformysql。shfcheckdiffforrow。shflogging。shfswitchtime。shlogmanager。shREADME。en。mdREADME。mdstart。sh3directories,9filesmoshandatagitcheckdataformysqlconf配置文件的目录,check。conf是配置文件log日志目录start。sh主程序manager。sh网络监控脚本,任务状态的管理脚本func目录是存放脚本的目录fcheckdiffformysql。sh校验数据块的脚本
fcheckdiffforrow。sh校验数据行,这个脚本是将fcheckdiffformysql。sh校验不通过的结果做进一步校验(2)帮助手册主程序moshandatagitcheckdataformysqlbashstart。shUsage:start。sh〔tchecktable〕需要检查的表列表,默认整库〔Tskipchecktable〕不需要检查的表,默认不过滤〔dcheckdb〕需要检查的库,默认是除了系统库以外的所有库〔Dskipcheckdb〕不需要检查的库,默认不过滤〔wthreads〕最大并发数〔llimittime〕哪些时间段允许跑校验,默认是所有时间,如需限制可以使用该参数进行限制,多个时间用英文逗号隔开15,1015表示1点到5点(包含1点和5点),或者10点到15点可以跑,需要注意都是闭区间的1,5,10,15表示1点,5点,10点,15点可以跑〔ftrue〕是否执行check操作,默认是false,只有为true的时候才会check〔h〕帮助信息moshandatagitcheckdataformysql
可以根据需求进行参数使用,如需规避业务高峰期在低峰执行校验任务,请使用l参数指定执行时间,如l15表示凌晨1点到5点执行校验任务,如果当天六点前没校验完成,会等到次日凌晨1点继续校验任务管理脚本moshandatagitcheckdataformysqlbashmanager。shhUsage:manager。sh〔astartstopcontinuepause〕监控任务的管理动作,数据校验任务的管理动作start:启动网络监控stoppausecontinue:连同校验脚本一起停掉暂停继续〔teth0〕网卡设备名,默认是eth0〔n50〕网卡流量超过这个百分比就暂停,等网卡流量小于这个就继续,默认是50〔h〕帮助信息moshandatagitcheckdataformysql可以根据实际网卡信息针对该网卡进行监控,当流量达到指定的阈值就会暂时暂停数据校验。这个脚本主要是针对使用了中间件,比如mycat(mysql到mycat)。或者是tidb(tikv到tidb),这种情况下回占用较多网络带宽。
该脚本必须要求在整个工具的家目录下执行(3)常用命令参考管理脚本相关bashmanager。shastartteth0n30启动eth0网卡的流量监控,流量达到30就暂停数据校验
bashmanager。shapause暂停监控及暂停数据校验任务
bashmanager。shacontinue继续监控及继续数据校验
bashmanager。shastop停止监控及停止数据校验主程序相关
bashstart。shftrueddbatestttest1l05仅校验dbatest库下的test表,且在0点到5点执行校验任务(4)测试用例校验通过场景每次执行校验任务的时候强制要清空log目录,所以请做好校验结果的备份执行校验任务的时候强烈建议开启screen有网卡监控需求,执行监控脚本时也强烈建议单独开启screen进行监控
第一步:先开启一个screen监控网络moshandatagitcheckdataformysqlscreenSchecknet3306moshandatagitcheckdataformysqlbashmanager。shastart〔2022011811:55:34〕〔1000Mbs〕〔RX:2MBS〕〔TX:2MBS〕〔2022011811:55:35〕〔1000Mbs〕〔RX:2MBS〕〔TX:4MBS〕〔2022011811:55:36〕〔1000Mbs〕〔RX:2MBS〕〔TX:2MBS〕〔2022011811:55:37〕〔1000Mbs〕〔RX:2MBS〕〔TX:3MBS〕〔2022011811:55:38〕〔1000Mbs〕〔RX:1MBS〕〔TX:2MBS〕〔2022011811:55:39〕〔1000Mbs〕〔RX:1MBS〕〔TX:2MBS〕〔2022011811:55:41〕〔1000Mbs〕〔RX:1MBS〕〔TX:2MBS〕〔2022011811:55:42〕〔1000Mbs〕〔RX:2MBS〕〔TX:8MBS〕
第二步:新开启一个screen执行校验任务moshandatagitcheckdataformysqlscreenScheckdata3306moshandatagitcheckdataformysqlbashstart。shddbatdbatest1ftrue〔2022011720:32:19〕〔成功〕〔192。168。1。1〕〔start。shstart。sh〕〔fprepare:130〕〔本次数据一致性检查开始〕〔2022011720:32:19〕〔警告〕〔192。168。1。1〕〔start。shstart。sh〕〔fmain:185〕〔本次数据一致性检查将检查如下库:〔dba〕〕〔2022011720:32:19〕〔成功〕〔192。168。1。1〕〔start。shstart。sh〕〔fmain:203〕〔正在检查dba库〕〔2022011720:32:19〕〔成功〕〔192。168。1。1〕〔funcfcheckdiffformysql。sh〕〔fcheckdiffformysql:249〕〔dba。dbatest1〕〔表结构一致〕〔2022011720:32:19〕〔成功〕〔192。168。1。1〕〔funcfcheckdiffformysql。sh〕〔fcheckdiffformysql:491〕〔dba。dbatest1〕〔1,1〕〔00d00h00m00s〕〔9。09,(0:0)1〕〔数据一致〕〔2022011720:32:19〕〔成功〕〔192。168。1。1〕〔funcfcheckdiffformysql。sh〕〔fcheckdiffformysql:491〕〔dba。dbatest1〕〔2,11〕〔00d00h00m00s〕〔100。00,(0:0)1〕〔数据一致〕〔2022011720:32:19〕〔成功〕〔192。168。1。1〕〔funcfcheckdiffformysql。sh〕〔fcheckdiffformysql:504〕〔dba。dbatest1〕〔检查完毕〕〔2022011720:32:19〕〔成功〕〔192。168。1。1〕〔start。shstart。sh〕〔fmain:242〕〔本次数据一致性检查完成〕〔通过〕moshandatagitcheckdataformysql
检查结束后会提示检查通过,否则就是检查不通过,如下面的用例。(5)测试用例校验不通过场景执行校验任务的时候强烈建议开启screenmoshandatagitcheckdataformysqlscreenScheckdata3306moshandatagitcheckdataformysqlbashstart。shddbatest1ftrue〔2022011720:32:09〕〔成功〕〔192。168。1。1〕〔start。shstart。sh〕〔fprepare:130〕〔本次数据一致性检查开始〕〔2022011720:32:09〕〔警告〕〔192。168。1。1〕〔start。shstart。sh〕〔fmain:185〕〔本次数据一致性检查将检查如下库:〔dbatest1〕〕〔2022011720:32:09〕〔成功〕〔192。168。1。1〕〔start。shstart。sh〕〔fmain:203〕〔正在检查dbatest1库〕〔2022011720:32:09〕〔警告〕〔192。168。1。1〕〔funcfcheckdiffformysql。sh〕〔fcheckdiffformysql:242〕〔dbatest1。dbatest〕〔表结构不一致〕〔atimename〕〔跳过该表的检查〕〔2022011720:32:09〕〔错误〕〔192。168。1。1〕〔start。shstart。sh〕〔fmain:232〕〔本次数据一致性检查完成〕〔不通过〕〔2022011720:32:09〕〔错误〕〔192。168。1。1〕〔start。shstart。sh〕〔fmain:237〕〔dbatest1。dbatest:tablestructureerr〕moshandatagitcheckdataformysql5、测试结果解读moshandatagitcheckdataformysqllsltotal444rwrr1rootroot450389Jan1811:56info。logdrwxrxrx2rootroot194Jan1811:56listdrwxrxrx2rootroot6Jan1811:56md5drwxrxrx6rootroot72Jan1811:56pridrwxrxrx5rootroot42Jan1811:52resrwrr1rootroot65Jan1811:56skip。logmoshandatagitcheckdataformysql
(1)info。log文件
校验的日志,会将数据库的数据是否一致一一记录,如下是一行日志记录。〔2022011720:32:19〕〔成功〕〔192。168。1。1〕〔funcfcheckdiffformysql。sh〕〔fcheckdiffformysql:491〕〔dba。dbatest1〕〔2,11〕〔00d00h00m00s〕〔100。00,(0:0)1〕〔数据一致〕〔2022011720:32:19〕第一段是记录日志的时间
〔成功〕第二段是日志状态
〔192。168。1。1〕第三段是产生日志的机器ip
〔funcfcheckdiffformysql。sh〕第四段是哪个文件产生的日志
〔fcheckdiffformysql:491〕第五段是哪个函数:行号产生的日志
〔dba。dbatest1〕第六段是针对哪个db哪个表产生的日志
〔2,11〕第七段是数据块的左右闭区间
〔00d00h00m00s〕第八段是针对该表的数据校验总执行的时间
〔100。00,(0:0)1〕第九段是执行进度,其中小括号部分表示:(校验通过的表个数:校验不通过的表个数)总共需要校验的表的个数
〔数据一致〕第十段是数据一致状态。
(2)list目录rwrr1rootroot77Jan1811:52dbaing。listrwrr1rootroot77Jan1811:56dba。list
这个目录会针对每个db记录两个文件,一个是已经校验通过的表,另一个是正在校验的表。
(3)md5目录
保存数据块的checksum临时目录,可以忽略
(4)pri目录
这个目录会针对每个db都创建一个目录,然后记录每个表当前校验的数据块的最后一行数据的pk(pklist)值
(5)res目录
这个目录是记录校验结果的目录,会有三个子目录drwxrxrx2rootroot6Jan1811:52diffdrwxrxrx2rootroot6Jan1811:52rowdrwxrxrx2rootroot6Jan1811:56tabletable:fcheckdiffformysql。sh脚本会将校验不通过的数据块的SQL记录在这里。这个目录会按db创建目录,将记录校验不通过的数据块的SQL语句格式如下:tabledbtable。log
row:fcheckdiffforrow。sh脚本会读取table目录的SQL语句进行再次校验,然后产生的的临时文件存在row目录,可以忽略
diff:fcheckdiffforrow。sh脚本会读取table目录的SQL语句进行再次校验,然后产生的再次校验不通过的部分存记录到这个目录,格式如下:diffdb。table。num。diff
这是table目录下记录某个数据块不一致的一个例子settxisolationREPEATABLEREAD;setinnodblockwaittimeout1;SELECT127d04065afd91d587bbb19bc16037a6:mobilebind,COUNT()AScnt,COALESCE(LOWER(CONV(BITXOR(CAST(CRC32(CONCATWS(,id,uid,count,score,timestamp,info,mobileinfo,del,CONCAT(ISNULL(id),ISNULL(uid),ISNULL(count),ISNULL(score),ISNULL(timestamp),ISNULL(info),ISNULL(mobileinfo),ISNULL(del))))ASUNSIGNED)),10,16)),0)AScrcFROM(selectfromtdbspamoltp。mobilebindwhere11andid667930554orderbyidlimit10000)a如果校验某个数据块发现两个节点数据不一致会记录这个SQL
一来是方便fcheckdiffforrow。sh脚本再次校验
二来是方便用户再次确认是真的不一致还是因为这是热数据,在校验的时候正在频繁被修改
这是diff目录下记录某个数据行不一致的一个例子7974c7974667930554216424914958665955841009488951345727972752022011016:01:302022011110:45:04{dlvBoid:7877725947093058957}667930554667930554116424914958665955841009488951345727972752022011016:01:302022011016:32:01{dlvBoid:7877725947093058957}667930554
同一个主键,如果数据不一致会以这样的格式记录到diff目录
(6)skip。log文件
检查不通过在log目录都会生成一个skip。log文件,里面记录了哪些表被跳过检查及跳过原因,如果检查通过就不会有这个文件。moshandatagitcheckdataformysqllsllogskip。logrwrr1rootroot37Jan1720:35logskip。logmoshandatagitcheckdataformysqlcatlogskip。logdbatest1。dbatest:tablestructureerrmoshandatagitcheckdataformysql六、写在最后
本工具是参考了pttablechecksum工具的一些思路并结合自身经验进行改写,尚有很多不足之处,仅做学习交流之用,如有线上环境使用需求,请在测试环境充分测试。
为什么Fastly喜欢QUIC和HTTP3在Fastly(一个网络服务提供商),我们对资源的配置非常有目的性和选择性。这意味着我们更关心我们所承担的项目种类和它们所产生的影响,而不是项目的数量。这就是为什么我们对QUI……
微信哪些平台可以投稿?我整理了一些我投过稿的平台,号主温柔,而且容易过稿。【一片温柔】急需大量稿件(长期征稿)征稿类型:情感文干货文,稿费1050r篇(有阅读奖励)信件(内容真挚即可),……
小米PocoF3中档的新机王?小米在PocoF3中提供了一系列高端规格,从120HzOLED显示屏到Snapdragon870开始。此外,还有功能强大的电池,具有快速充电技术,双扬声器,三摄像头设置,快速的……
微软苹果华为的研发基地都在苏州,是不是说明苏州开始向高科技研微软、苹果、华为研发基地苏州,是不是苏州开始向高科技研发创新模式转变?是的,印象中大家都一直以为苏州就是外资的代工厂基地,其实这都是老黄历了。苏州这个城市比较特殊,开放之……
某球星卡被贝克特公司评为9分。创纪录的520万美元球星卡成交有人总结了元宇宙的六大特征:链接、身份、现实感、创造、规则、文明。我认为元宇宙是一种社会形态,这意味着,这不是一个团队就能解决的问题。张启煊表示。他表示,目前影眸科技专注……
抢先一步!AppleWatch7华强北版已经开卖近日,有网友爆料未发布的AppleWatchSeries7已经在华强北开卖,难道是苹果货品泄漏?原来,这是AppleWatchSeries7华强北版本,目前来看,应该是因……
华为旗舰机曝光麒麟9010鸿蒙OS实力重回巅峰华为的mate系列,是华为最高端的旗舰手机,这次余承东首爆料的所爆料的华为mate50pro,将会搭载华为新一代麒麟9010芯片。有消息显示,虽然说华为的芯片被暂时断供,……
想象一下,人类未来的可能生存方式这个题目比较大,很难想象,因此考虑几种方式。古人云:盛极必衰。从目前来看,人类还远远未到。因此,如果发挥个人想象,再参考其他发展因素,当然,影响最大的肯定是科技因素,这其中最受……
道德经的忠告这种干部,正在拖垮你的公司作者:吴强私人董事会教练来源:正和岛(ID:zhenghedao)随着私董会的普及,有些企业也开始尝试内部私董会,在会议的讨论中,可以看出不同企业的行事风格,这也是……
助听器中的多维和多重是什么意思?该如何选购助听器呢?您好,助听器中的多维和多重是什么意思?该如何选购助听器呢?这个可能是瑞瑞声达助听器中的一些功能,建议您到验配中心详细了解体验,选配助听器一定要到正规验配中心根据自己的听力……
雷军退还小米手机1收入!每人赠送1999元红包,米粉已上架闲中国经济周刊经济网讯近日,小米创始人雷军公布小米十周年感恩红包领取情况称,截至8月15日16时,已有96986位用户收到1999元红包,累计1。94亿。据悉,8月10日的……
广东5G基站数量全国居首广州日报讯(全媒体记者魏丽娜、邓潇丽)审议修改人口与计划生育条例,确保三孩政策及配套支持措施在广东省平稳有效实施;加快乡村振兴促进条例立法,促进农业高质高效、乡村宜居宜业、农民……
大荒良品智能碾米机是无人零售最佳落地方案淘宝的新零售、京东的无界零售、苏宁的智慧零售,一个个概念出炉的背后,实际上是对零售商业变革的预判和模式思考。而就在巨头们还在拿捏和试探市场之际,一种新型的无人零售模式智能碾米机……
华为发布多款搭载鸿蒙新产品,包括手表平板等出品搜狐科技作者张雅婷6月2日消息,华为发布了多款鸿蒙新品,包括手表WATCH3系列和MatePadPro。在鸿蒙加持下,手表WATCH3系列可以控制身边的I……
美团慢进,不一样的价值逻辑文柳华芳排版晓月共同富裕植根于美团的基因中,美团的名字就有一起更好的意思,‘美’就是好,‘团’就是一起,美团就是一起更好在美团二季度财报的分析师会上,美团CE……
日本的高质量男性的工资一般是多少呢?最新数据显示,人本上市企业人均收入最高的是基恩士,排名前五的后面依次是三菱商事、伊藤忠商事、三井物产、野村控股。从表单上可以看到最高的人均工资是1751万日币(大约105……
果然,受iPhone13冲击,iPhone12价格全面下调在智能手机市场,iPhone无疑是高端手机的一个代名词,不管是消费者还是苹果的竞争对手,都对苹果有着非常高的评价。并且每一代iPhone的发布,都会成为数码领域的一款热门机型,……
不能把因加班怒怼管理层,仅当作热闹来看1月26日,澎湃新闻记者了解到,1月25日,在腾讯的部门大群内,一位应届生员工公开质疑公司高管只为赶项目进度,忽视员工健康进行不合理的高强度加班。(1月26日澎湃新闻)事……
火链科技与浙江金赋水携手探索区块链工业生产应用新方向近日,海南火链科技有限公司(以下简称火链科技)与浙江金赋水数字科技有限公司(以下简称金赋水科技)围绕区块链技术赋能生态合成革产业达成战略合作,双方将区块链技术应用到产业互联网的……
如何正确释放C盘提升电脑速度我经常发现电脑C盘内存几乎用尽,可用内存少的可伶,出现这样的原因是下载软件的默认位置放在C盘,而几乎很少有人去改变默认的下载路径,久而久之C盘内存就不够用了,当出现C盘容量不足……
价格法实体店赖以存活的终极砝码电商影响线下实体店的主要原因,去除电商假货因素,大多是电商价格管理缺失造成的。很多知名品牌商品在网上的售价也十分乱,这里面有品牌方管理不善的原因,也有电商恶意降价的因素。……
某手机友商员工涉及贬低鸿蒙OS后,引起广泛争议后选择离职为何使用安卓手机总会给人一种矮三分的感觉呢?用小米就很LOW?用苹果就没人对此过多评价?近日在国内安卓手机用户圈有件事引爆了社交网络。自从华为手机因芯片短缺不得不退出了中低端手……
瑞数信息发布2022年网络攻击六大趋势三大防护建议回顾过去一年,网络安全形势已然变得更加复杂。随着云计算、大数据、物联网、人工智能等技术的发展,网络威胁持续进化,变得更加棘手、难以应对。同时,网络攻击手段更为多样,数据泄露、勒……
一周3小时史上最严网游未成年防沉迷出台!腾讯网易等多家游戏公针对社会反映的未成年人过多过度使用网络游戏问题,国家新闻出版署在新学期开学之际印发了通知,对网络游戏防沉迷工作提出具体明确要求。8月30日,国家新闻出版署下发的《关于进一步严格……