中央的十四五规划宣告了中国的政府、企业和社会开始进行数字化转型,准备全面进入数字时代。
传统系统形成的信息孤岛,在数字时代将由数据纽带连接起来,成为庞大的数字社会服务网络中一个能力单元,通过数据驱动业务协同。大量由人类负责的沟通协调和信息录入工作,在数字时代都由机器自动处理。

比如申请城市户籍,现在需要先开具房产证明、学历证明、纳税证明等等,再去公安部门办理。在未来,市民只需要在网上申请,几秒之内,系统就会根据你的数字档案完成资质审核和变更。
机器能够全天候服务,而且精准地同时处理成千上万不同的任务,它能将人类从繁琐的重复性事务中解放出来,使得人们的工作生活更加轻松便捷。
数字时代看起来非常美好,但是要如何升级呢?
数字时代的关键问题
信息时代,各系统独立工作,人工负责录入正确信息。数字时代,信息通常由其他系统直接输入并且自动化处理,也意味着机器需要自行解决信息的可靠性和真实性问题。

试想一下,假如谁都能把你账户的钱轻易转走,又或者你下单了一辆汽车,却收到了两箱鸡蛋,这样的社会有多混乱。
另一方面,数字化系统通常需要与很多外部系统对接,应用层千差万别,难以一一适配,只能基于更规范一致的数据层交互协作。

可现有的数据协同技术无法满足数字时代要求。
消息通讯能准确送达可信数据,却无法确保不同系统状态一致。就好像你给老板发信息要加薪,他肯定能收到,但是同不同意就看运气了。
数据库系统是应用最广的数据存储技术,所有系统都能使用标准接口进行访问,但是无论是应用系统还是管理员,都可以轻易修改数据。
想象一下,你刚把十万元的货物发出去,买家把合同一改,货款变成十元,这生意还怎么做?
数据仓库和大数据系统在不少综合大平台中作为数据支撑层,它持续把各业务系统中的数据导出处理,按照标准格式存储。
这种模式实际上是基于原始数据创建规范化副本,各应用系统再基于数据副本进行交互,可是它作为协同技术是有缺陷的。
首先,业务繁忙的核心系统数据同步成本太高,只能定期更新,这意味着副本状态无法保证一致,如果依赖不可靠的状态进行处理,很有可能会导致错误。

更重要的是,连接平台的应用只能访问数据副本,无法与原始数据交互。就好像你在游戏里面把小怪兽消灭了几百次,过几分钟它还是会原封不动地冒出来。
这几年火热的数据中台,是上面方案的集大成者,所以这些问题它基本一个不少。
数字时代要最终落地,必须找到一种可信可靠、保障一致的数据协同技术,为数字化系统提供标准的数据层适配手段,实现多系统联动。
钥匙在哪里
其实中央的新基建和十四五已经写出了答案,只是太低调了没人注意。
大部分人说起区块链,想到的都是金融货币和交易。
其实,以目前主流区块链产品的承载能力,连中国金融系统万分之一的业务压力都撑不住。
百度百科提到了经典区块链几个特征:去中心化、开放性、匿名性。
区块链诞生于缺乏信任的互联网,通过这些手段保障数据可靠,无可厚非,只是应用到国内金融领域的场景,情况就不同了。
首先,金融体系关乎国计民生,在中国必然是由政府集中监管,去中心化与中国模式背道而驰,不仅增加管理复杂度,还导致系统性能大幅度下降。
其次,资金流动涉及企业机密、政府机密甚至国家机密,存储在开放性系统里显然不合适。
最后,众所周知,国内所有虚拟货币交易都是非法的,包括NFT也是在警戒范围内,毕竟匿名系统太容易成为犯罪温床。
所以,欧美的区块链货币化路线在中国必然走不通。

十四五明确了国内的发展方向是以联盟链为重点,发展行业应用方案,完善监督机制。
联盟链不同于开放性的公链系统,它通常由多个身份可信的节点组成,数据安全和隐私性都更容易保证。
在联盟链里,区块链更多是作为数据承载技术出现,它能够从源头保障承载数据内容的精准与可靠。
链上各节点的数据无法篡改,还能保持一致的状态,正好适用于多系统协同。
而只要增加一个链上节点,就可以从源头上对数据进行管控,非常便于监督。
适配简单、精准可靠、状态一致、安全可信、便于监督,这就是我们需要的最关键一环,所以中央如此重视区块链技术。
可是对一个新技术而言,徒有市场需要是远远不够的,只有当产品满足需求,产生业务价值,才算真正落地。
南橘北枳的道理大家都知道,可惜的是,主流区块链依然沿着当初加密货币的思路埋头狂奔,从业人员也像被手里的榔头迷住了一样,不论什么问题都一锤子下去,不管面前的是瓶子还是杯子。

第一,目前区块链的主流共识策略为了在不可信网络正常工作,使用了竞争出块之类机制,明显增加了请求处理时间,部分场景的时延甚至能超过一小时。
第二,区块链能够实现各节点数据一致,但是等待时间可能是五秒,也可能是五小时,即使区块产生了也可能因为分叉回撤。所以应用随时可能获得无效的旧数据,产生错误判断,从而导致处理失误。
我在前面文章提到过,中国政企领域的核心系统承担着世界上最高强度的业务压力,不管厂家号称实现了十万还是百万TPS,高延迟和弱一致性两个缺陷不解决,产品就不可能真正应用到生产系统。
好比你到政务中心办事,所有材料都提交了,还得在旁边呆坐半小时甚至半天等待成功。你如果等不了也可以先回家,但申请就可能失败,还得再来一次。

如果真有这种系统,我相信不是等待队伍人满为患,就是投诉电话天天打爆了。
第三,最初区块链只是为了写入和校验简单数据设计的,即使有些产品进行了改进,但是处理业务数据的能力依然还是很弱的。
就好像仓库里堆的都是同一种箱子,箱子上除了编号以外没有任何信息,连里面是皮鞋还是电饭煲都不知道。
虽然按照编号取货很简单,可要是想找一条叫做旺达的鱼,你就得把仓库里的十万件货物全部开箱检查一遍。

高时延、弱一致性和数据处理弱是区块链必须要优先解决的问题,好在这都是各厂家方案选型导致的,并非区块链的设计缺陷,解决起来并不是太难。
需要抓紧变道的厂商们
众所周知,近年来发生了不少涉及互联网企业的负面事件,中央为了防范资本野蛮生长,不断加强监管。
另一方面,中国已经明确宣布虚拟货币挖矿和交易非法,同时高度警戒NFT的金融风险,可以预见,在面向C端用户的互联网领域,区块链继续前进将非常艰难。
在国家的层面,未来必然是引导资本进入实体经济,打造核心技术,夯实产业基础,为社会创造新的价值,增强综合国力。
但是对于区块链厂商而言,直接玩币捞快钱,或者开源套壳吹概念骗政府经费的蛮荒时代已经结束了,只有能够真正产业化应用,实实在在提供业务价值的好产品,才有机会活到下半场。
今年已经是十四五规划的第二年,虽然很多数字化项目由于疫情还没完全启动,但是每个城市需要的基础数据平台数量是有限的,区块链自己搞不定,数据中台或者大数据厂商自然会取而代之,反正又不是不能用。
社会层面的基础技术设施建成之后,几乎不可能再轻易替换,十四五剩下的时间已经不多,区块链厂商如果不想坐以待毙,就得抓紧开始技术改造了。
通用化的数据协同技术是数字时代的核心基石,究竟是新技术区块链咸鱼翻身,开启全新时代,还是成熟的大数据系统以逸待劳,再续十年辉煌,让我们拭目以待。
我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s
目录一.加解密算法数字签名对称加密DES(DataEncryptionStandard)3DES(TripleDES)AES(AdvancedEncryptionStandard)RSA加密法DSA(DigitalSignatureAlgorithm)ECC(EllipticCurvesCryptography)非对称加密签名与加密过程非对称加密的应用对称加密与非对称加密的结合二.数字证书图解一.加解密算法加密简单而言就是通过一种算法将明文信息转换成密文信息,信息的的接收方能够通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,算法可以分为对称加密、非对称加密、对称加密和非
在Ruby中,是否有一种简单的方法可以将n维数组中的每个元素乘以一个数字?这样:[1,2,3,4,5].multiplied_by2==[2,4,6,8,10]和[[1,2,3],[1,2,3]].multiplied_by2==[[2,4,6],[2,4,6]]?(很明显,我编写了multiplied_by函数以区别于*,它似乎连接了数组的多个副本,不幸的是这不是我需要的)。谢谢! 最佳答案 它的长格式等价物是:[1,2,3,4,5].collect{|n|n*2}其实并没有那么复杂。你总是可以使你的multiply_by方法:c
我正在使用Ruby解决一些ProjectEuler问题,特别是这里我要讨论的问题25(Fibonacci数列中包含1000位数字的第一项的索引是多少?)。起初,我使用的是Ruby2.2.3,我将问题编码为:number=3a=1b=2whileb.to_s.length但后来我发现2.4.2版本有一个名为digits的方法,这正是我需要的。我转换为代码:whileb.digits.length当我比较这两种方法时,digits慢得多。时间./025/problem025.rb0.13s用户0.02s系统80%cpu0.190总计./025/problem025.rb2.19s用户0.0
我正在构建一个小部件来显示奥运会的奖牌数。我有一个“国家”对象的集合,其中每个对象都有一个“名称”属性,以及奖牌计数的“金”、“银”、“铜”。列表应该排序:1.首先是奖牌总数2.如果奖牌相同,按类型分割(金>银>铜,即2金>1金+1银)3.如果奖牌和类型相同,则按字母顺序子排序我正在用ruby做这件事,但我想语言并不重要。我确实找到了一个解决方案,但如果感觉必须有更优雅的方法来实现它。这是我做的:使用加权奖牌总数创建一个虚拟属性。因此,如果他们有2个金牌和1个银牌,加权总数将为“3.020100”。1金1银1铜为“3.010101”由于我们希望将奖牌数排序为最高的,因此列表按降序排
我想为名字验证编写一个正则表达式。正则表达式应包括所有字母(拉丁/法语/德语字符等)。但是我想从中排除数字并允许-。所以基本上它是\w(减)数(加)-。请帮忙。 最佳答案 ^[\p{L}-]+$\p{L}匹配anykindofletterfromanylanguage. 关于ruby-on-rails-rails中的正则表达式匹配[\w]和"-"但不匹配数字,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.c
在我的应用程序中,我有一个文本字段,用户可以在其中输入类似这样的内容"1,2,3,4"存储到数据库中。现在,当我想使用内部数字时,我有两个选择:"1,2,3,4".split(',')或string.scan(/\d+/)do|x|a两种方式我都得到一个像这样的数组["1","2","3","4"]然后我可以通过在每个数字上调用to_i来使用这些数字。有没有更好的方法可以转换"1,2,3"to[1,2,3]andnot["1","2","3"] 最佳答案 str.split(",").map{|i|i.to_i}但是这个想法对你来说
我有一个随机大小的散列,它可能有类似"100"的值,我想将其转换为整数。我知道我可以使用value.to_iifvalue.to_i.to_s==value来做到这一点,但我不确定我将如何在我的散列中递归地做到这一点,考虑到一个值可以是一个字符串,或一个数组(哈希或字符串),或另一个哈希。 最佳答案 这是一个非常简单的递归实现(尽管必须同时处理数组和散列会增加一些技巧)。deffixnumifyobjifobj.respond_to?:to_i#IfwecancastittoaFixnum,doit.obj.to_ielsifobj
什么是测试格式验证的最佳方法让我们说一个用户名,使用字母数字的正则表达式,但不是纯数字?我一直在我的模型中使用以下验证validates:username,:format=>{:with=>/^[a-z0-9]+[-a-z0-9]*[a-z0-9]+$/i}数字用户名(例如“342”)通过了验证,这是我不想要的。 最佳答案 您想“向前看”一封信:/\A(?=.*[a-z])[a-z\d]+\Z/i 关于ruby-on-rails-Rails格式验证——字母数字,但不是纯数字,我们在Sta
如果至少有两个相邻的数字相同,格式为,我需要打包.这是我的输入:[2,2,2,3,4,3,3,2,4,4,5]以及预期的输出:"2:3,3,4,3:2,2,4:2,5"到目前为止我试过:a=[1,1,1,2,2,3,2,3,4,4,5]a.each_cons(2).any?do|s,t|ifs==t如果相等,也许可以尝试计数器,但那是行不通的。 最佳答案 您可以使用Enumerable#chunk_while(如果你使用的是Ruby>=2.3):a.chunk_while{|a,b|a==b}.flat_map{|chunk|chu