2月15日,西方的情人节刚刚过去一天,国内IT行业就爆出一个大瓜。
继Adobe、甲骨文、Tableau、Salesforce之后,又一个IT巨头要撤离中国市场。

Teradata天睿公司官宣与中国市场“分手”,结束在中国的直接运营。目前,多家媒体已经播报了这条新闻,似乎此事已是板上钉钉了。
Teradata官方给出的理由也非常含蓄:
Teradata对中国当前和未来商业环境的慎重评估,我们做了一个艰难的决定,Teradata将逐步结束在中国的直接运营。后续,中国公司即将进入关闭程序。

注:图片来自微信公众号“ToB企服之家”
笔者多年前曾经与一位资深IT人士提到Teradata,询问第一印象是什么?他的回复特别干脆,就一个字“贵”!
Teradata 数据库一般是与专有硬件结合,以一体机形式提供服务,因此不管是新项目还是扩容项目价格都比较昂贵。具体有多贵,这位业内人士不方便说数字,但是参与过相关项目招投标的经理们一定都深有感触。

从Teradata主要客户所在行业,也能看出一些贵的原因,例如金融、电信、航空等哪个行业也不缺IT预算,当然也与这些行业的业务都紧密关系到国计民生有关系。
当然,贵有贵的理由。
Teradata当年可谓是数据仓库的“一哥”,如今是一家有着44年历史的老牌数据仓库企业,至今Teradata在数据仓库、大数据分析等领域仍处于全球领先地位。
2022年,Gartner发布的云数据库管理系统(DBMS)魔力象限中,Teradata与AWS、微软、甲骨文、谷歌、Snowflake、SAP、阿里云、Databricks、MongoDB、Clouddera、IBM等,一同被评为“领导者”。
所以,Teradata的撤退不是技术水平不足造成的。

2022云数据库管理系统(DBMS)魔力象限
中国市场是虽然不是Teradata最大的市场,却是以往全球增长最快的市场,Teradata没有理由轻易放弃。
事实上,Teradata营收增长从2014年开始走下坡路,2022年跌至历史新低。有机构也指出2014年是Teradata与中国市场结束了“蜜月期”。
2022年,Teradata全年营收17.95亿美元,同比减少6.4%;其中亚太及日本市场贡献营收2.92亿美元,同比减少更多达11.5%。据知情人士透露,即便这2.92亿美元中,中国收入应该不到2亿,而且主要为维保服务,以及做数据挖掘数据分析的专业服务。
这就给Teradata退出中国市场,找到了一个更为充分合理的理由,既然大部分是维护费,不如让本地合作伙伴来做。
不过,也有专业机构认为,Teradata没能很好地理解中国客户的需求,这么多年仍然在销售昂过的一体机。但是,国内数据应用场景愈发丰富,对海量数据的存储、查询和分析等需求日益旺盛, Teradata的服务模式明显不够灵活,云策略也并没有在中国很好的落实,因此市场逐渐被竞品蚕食市。
另外一个原因,随着信创政策的逐步推进,操作系统、中间件、数据库等基础软件的国产化替代在加速进行,并且逐步从从底层软件向上层应用延伸,一直到数据仓库、数据中台、大数据分析平台、BI等领域。
不过,一位知情人透露,早在2019年,Teradata就宣布停止在中国市场的营销和销售活动。2023年2月15日退出中国早在员工的预料之中,撑了3年多已属不易。
Teradata撤出中国市场后必将留下一些市场空间给国内厂商。从公开的新闻可以看到,上海银行、浦发银行、天津银行等正在或已经完成从Teradata数据仓库平台的迁移。
我们不禁想问:国产数据库,你们准备好了吗?
有分析机构认为,目前市场上没有一家国产数据库厂商能够独立填补 Teradata 离开后空白,因此,整个数据库市场势必呈现出碎片化趋势。
这对于国产数据库,确实是一个不小挑战,但同时也是机遇。
缺乏原厂支持,势必影响甲方企业继续采购 Teradata 的信心,一定会促使数据库国产化替换周期变短,加速国产数据库逐步向核心系统推进,尤其属于Teradata的核心领域:金融、电信、航空等行业。
事实上,国产数据库一直都在肩负着国产化替代的压力负重前行,并且已经取得了不俗的成绩。Gartner预测,到2025年,中国分析型数据库市场来自海外厂商的将只剩下30%,交易型数据库市场海外厂商市场也只会剩下50%左右。
《2022年墨天轮数据库大调查报告》显示,已有83.4%的企业正在使用国产数据库产品,这说明随着国产化建设的不断推进,越来越多的企业开始使用国产数据库。

国内企业所使用的国产数据库排名
调查报告还进一步显示,达梦数据库是企业使用率第一的中国数据库,占比达20.4%;华为云 GaussDB、阿里云 PolarDB 分别以17.8%、17.3%的占比紧随其后。其后分别是 OceanBase、openGauss、TiDB、腾讯云TDSQL、人大金仓、科蓝SUNDB、南大通用等。
国产数据库在数十年的蛰伏中度过,在审慎中不断加速,如今到了全面国产化替代的时候。
当前国产数据库的替代进行的如火如荼,但是环顾市场,笔者发现一个奇怪的现象,支持国产数据库管理的SQL工具却是凤毛菱角。
很多数据库厂商都有自带的数据库管理工具,但是跨数据库的管理却无能为力。一些知名第三方数据库管理工具厂商,像挤药膏一样支持国产数据库,而且是“掐尖”支持那些用户数多的国产数据库。
迫不得已,很多程序员和DBA都需要自己手动添加国产数据库驱动,但是所付出的精力和效果相比有些差强人意。
这不符合国产化替代的趋势,有必要将国产化替代进行到底。
2023年1月,麦聪软件历时三年推出一款多数据库管理工具——SQL Studio,全面支持国产数据库,例如达梦、人大金仓等以及更多基于MySQL和PostgreSQL研发的国产数据库。最为重要的是,SQL Studio是100%自主研发,没有借用一行开源代码。

SQL Studio产品界面
相比客户端多数据库管理工具,SQL Studio是一款纯Web端SQL工具,无需安装支持一键启用;支持团队在线协作开发和统一权限管理;可以实现数千万行数据的秒级导出以及数万张表的创建,而系统不会出现卡死或闪退的情况。
目录一.加解密算法数字签名对称加密DES(DataEncryptionStandard)3DES(TripleDES)AES(AdvancedEncryptionStandard)RSA加密法DSA(DigitalSignatureAlgorithm)ECC(EllipticCurvesCryptography)非对称加密签名与加密过程非对称加密的应用对称加密与非对称加密的结合二.数字证书图解一.加解密算法加密简单而言就是通过一种算法将明文信息转换成密文信息,信息的的接收方能够通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,算法可以分为对称加密、非对称加密、对称加密和非
我需要尝试一些AES片段。我有一些密文c和一个keyk。密文已使用AES-CBC加密,并在前面加上IV。不存在填充,纯文本的长度是16的倍数。所以我这样做:aes=OpenSSL::Cipher::Cipher.new("AES-128-CCB")aes.decryptaes.key=kaes.iv=c[0..15]aes.update(c[16..63])+aes.final它工作得很好。现在我需要手动执行CBC模式,所以我需要单个block的“普通”AES解密。我正在尝试这个:aes=OpenSSL::Cipher::Cipher.new("AES-128-ECB")aes.dec
我最近与一位同事讨论了以下Ruby语法:value=ifa==0"foo"elsifa>42"bar"else"fizz"end我个人并没有看到太多这种逻辑,但我的同事指出,这实际上是一种相当普遍的Rubyism。我试着用谷歌搜索这个主题,但没有找到任何文章、页面或SO问题来讨论它,这让我相信这可能是一种非常实际的技术。然而,另一位同事发现语法令人困惑,而是将上面的逻辑写成这样:ifa==0value="foo"elsifa>42value="bar"elsevalue="fizz"end缺点是value=的重复声明和隐式elsenil的丢失,如果我们想使用它的话。这也感觉它与Ruby
我正在尝试对某些帖子的评论使用简单的身份验证。用户使用即时ID和密码输入评论我使用“bcrypt”gem将密码存储在数据库中。在comments_controller.rb中像这样@comment=Comment.new(comment_params)bcrypted_pwd=BCrypt::Password.create(@comment.user_pwd)@comment.user_pwd=bcrypted_pwd当用户想要删除他们的评论时,我使用data-confirm-modalgem来确认数据在这部分,我必须解密用户输入的密码以与数据库中的加密密码进行比较我怎样才能解密密码,
在MacOS更新之前,它一直运行良好。我重新安装了RVM、rails、ruby等等。到目前为止没有任何效果。在我的Mac终端中,我可以生成一个é,但是在控制台中,我可以生成字符,使用alt+character,然后当我键入字符分配给的字母,它会删除该字符。在我的~/.rvmrc中:exportruby_configure_flags="--with-readline-dir=/usr/local/Cellar/readline/6.2.4"有什么想法吗?到目前为止,我已经明确地让它工作了,包括readline-rb。我猜我的全局要求不工作。gem'rb-readline','~>0.4
在尝试构建Rubygem(使用Bundler)时,我倾向于使用Bundler提供的REPL测试代码——可通过bundleconsole访问。有什么方法可以重新加载整个项目吗?我最终再次加载单个(更改的)文件以测试新更改。 最佳答案 以下hack适用于我的一个相对简单的gem和Ruby2.2.2。我很想看看它是否适合你。它做出以下假设:您具有传统的文件夹结构:一个名为lib/my_gem_name.rb的文件和一个文件夹lib/my_gem_name/,其中包含任何文件/文件夹结构。您要重新加载的所有类都嵌套在您的顶级模块MyGemN
这个问题在这里已经有了答案:Nokogiri:SelectcontentbetweenelementAandB(3个答案)关闭2年前。我正在从url中抓取文本的div,并想删除具有backtotop类的段落下方的所有内容。我在stackoverflow上看到了一段遍历代码片段,看起来很有希望,但我不知道如何将它合并,所以@el只包含第一个p.backtotop之前的所有内容分区我的代码:@doc=Nokogiri::HTML(open(url))@el=@doc.css("div")[0]end遍历片段:doc=Nokogiri::HTML(code)stop_node=doc.css
今天我遇到了下面的正则表达式,想知道Ruby会用它做什么:>"#a"=~/^[\W].*+$/=>0>"1a"=~/^[\W].*+$/=>nil在这种情况下,Ruby似乎忽略了+字符。如果这是不正确的,我不确定它在做什么。我猜它没有被解释为量词,因为*没有转义并且被用作量词。在Perl/Ruby正则表达式中,有时当一个字符(例如,-)在不能被解释为特殊字符的上下文中使用时,它会被视为文字。但如果在这种情况下发生这种情况,我希望第一个匹配失败,因为左值字符串中没有+。这是对+字符的巧妙正确使用吗?以上行为是错误吗?我是否遗漏了一些明显的东西? 最佳答案
在执行cipher.final时,提示baddecrypt错误。我试图找出问题所在。但是,我找不到。你能告诉我我的代码有什么问题吗?这是我的代码:require'openssl'require'base64'require'hex_string'result_h="4fcd6b1ac843a2f8bf13f2e53dd5c1544fcd6b1ac843a2f8"key=result_h.to_byte_stringencrypt_str="79994A6EF73DA76C";cipher=OpenSSL::Cipher.new("DES-EDE3-CBC")cipher.decrypt
我需要在我的Rails应用程序中进行加密和解密。我正在尝试使用ezcrypto,但每当我进行解密时,我都会收到此错误。OpenSSL::Cipher::CipherErrorinProfilesController#showwrongfinalblocklength需要更改什么才能停止此错误。我尝试像这样使用openssl的另一个实现(从我的模型中调用的方法)defencrypt_attr(unencrypted)c=OpenSSL::Cipher.new("aes-256-cbc")c.encryptc.key=Digest::SHA1.hexdigest('pass')e=c.up