周五参加了WAIC后又和一家上海本地的数据库厂商交流了一下午。等我要买高铁票回南京的时候已经买不到票了。好不容易刷到一张到苏州北的高铁票,我就上了车。上车后突然想起还不如就回苏州老家住一晚算了。到家后洗漱完毕已经快10点了,发现刚才我开了半天空调的房间里温度还是很高,仔细一看空调的工作状态似乎不太正常。于是试了试书房的空调,显然是能制冷的,不管怎么样先对付一宿,明早再找维修人员过来看看吧。

第二天,修空调的师傅看了看,说这台有问题的空调运行状态是正常的,空调没毛病,不过今年天热,乡下电网的电压不稳定,你这台变频空调在这种情况下,很可能因为电压不稳而导致压缩机无法正常工作,影响制冷效率。你书房那台老式的空调反而是比较皮实的,所以这几天你还是睡书房吧。老师傅最后说最近这几天遇到多起这种情况了,村里已经有些人家把变频空调折旧换了普通空调了。
这个结果倒是有点出乎我的意外了,技术更好的变频空调反而适应不了相对不稳定的电网,普通空调反而更皮实。在乡下这样的应用场景中,技术相对落后的普通空调居然完胜先进的变频空调。仔细想想,在数据库领域,似乎也是如此。30多年前,当时技术上相对简单或者说简陋的Oracle在与一系列架构水平更高的产品PK中完胜了几乎所有对手,获得了全面的胜利,而一些技术上颇有特色的数据库产品反而都折戟沉沙了,这种胜利在早期大多数是来自于其使用门槛较低。数据库最终还是要拿来用的,而不是为了PK技术的先进性或者某些领域的领先性的。
我和很多搞数据库的朋友聊天的时候,总是听到他们谈数据库的架构如何先进,使用了什么先进的技术,有哪些方面的独创技术。但是很少听到他们谈自己的数据库产品和客户应用场景适配方面的优势,似乎这些问题都是和应用层接近的,没啥技术难度,不太值得他们关注。实际上这样的数据库开发者与用户完全脱节了,用户和数据库厂商对数据库的需求完全是不同的,数据库厂商眼中的先进性与用户所需要的方便省心地使用数据库的需求出现了维度偏差,用户其实不关心,甚至不懂数据库厂商自己觉得很HIGH的先进性。一个仅仅知道写SQL的用户是不会去关注SQL执行引擎里是否使用了向量计算,他们只会关心自己的SQL是不是能够又快又准确的获得结果。在最近这两年的数据库产品的发布会上,我很少看到某个数据库厂商宣称更好的支撑了某些用户应用场景,而都是介绍一些用户都不大明白的高大上的技术。我不太清楚他们请来的最终用户GET到了这些新特性没有,搞了多年数据库的我,也需要边看边翻百度才能完全搞清楚这些对我而言还有点“新”的名词。
前阵子在帮一个用户测试一个数据库国产化改造项目,某数据库不说最后如何,光是把数据从Oracle迁移到目标国产数据库中就经历了十分痛苦的过程。测试时迁移的数据量不过几个TB,而用户的目标数据库有近百TB,对于今后利用厂家提供的迁移完整的数据库,基本上已经把用户劝退了。实际上以这家企业的规模与技术能力,写出一个高水平的数据库迁移工具来并不困难,只是他们并没有把业务重点放到这种体现不出技术水平的地方而已。还有一些新锐数据库公司,推出了架构设计与理念都十分新颖,创意满满的产品出来,各项技术指标都十分亮眼。不过如果某些用户真的选择了这些产品,那么随之而来的,一定不会是很好的使用体验。因为除了所谓的创新满满的核心,其辅助工具简陋得令人发指。这也难怪,因为企业规模本来就不大,根本没有资源往这些不太重要的地方投入宝贵的研发资源。
这些技术含量很低,但是个性化需求十分复杂的“小”工具就如此不重要吗?答案肯定是否定的,今年年初我和一个数据库厂商交流的时候,问他们目前研发主要投入在哪些方面。我以为我听到的回答应该是SQL引擎、CBO优化器、存储引擎、Oracle兼容性等比较核心的地方。没想到他们的回答令我十分意外,他们的研发负责人说,目前为了尽快改进用户现场反馈回来小的需求,他们接近一半的研发人员都投入到了周边小工具和小功能的新需求上去了。今年信创需求十分强烈,为了让用户把数据库用爽了,他们的主要研发力量在不断地优化这些看上去技术含量不高,但是十分重要的小功能。
我想只有数据库产品真正的被用户认认真真的用起来了,我们的数据库研发人员才会感受到他们以前无意中的一些偷懒和简化处理,就变成了用户使用时的痛苦不堪。数据库是要拿来用的,只有真的有大量的用户在认认真真的用你的数据库产品了,你才会知道用户需要的到底是什么样的功能吧。

数据库是要拿来用的,不是用来PK先进性的的更多相关文章

  1. 深入理解Spring Redis的使用 (九)、通过Redis 实现 分布式锁 的 BUG,以及和数据库加锁的性能测试

    在多节点的项目中,经常要涉及到某些方法加锁的控制.而这个时候,简单易用的synchronized已经不能满足多节点的部署结构. 之前在项目中,用的比较多的是数据库的更新锁:for udpate.但是这 ...

  2. solr连接数据库配置

    一般要搜索的信息都是被存储在数据库里面的,但是我们不能直接搜数据库,所以只有借助Solr将要搜索的信息在搜索服务器上进行索引,然后在客户端供客户使用. 一.链接数据库 1. SQL配置 拿SQL Se ...

  3. 转:HIBERNATE一些_方法_@注解_代码示例---写的非常好

    HIBERNATE一些_方法_@注解_代码示例操作数据库7步骤 : 1 创建一个SessionFactory对象 2 创建Session对象 3 开启事务Transaction : hibernate ...

  4. 关于MySQL的在线扩容

    原文地址:http://bucketli.iteye.com/blog/1294032 主要简单总结下,mysql在线扩容和缩容一般涉及到的内容,主要包括三个方面,1.在线也就意味着需要把增量的数据重 ...

  5. Hibernate持久化对象

    持久化类应遵循的规则: 有无参构造器,构造器的修饰符>=默认访问控制符 有标识属性,映射数据库表的主键,建议使用基本类型的包装类 每个成员有setter和getter 非final修饰的类 重写 ...

  6. form表单公用

    <?php /** * 后台总控制器 */ namespace app\common\controller; use think\Controller; use app\common\servi ...

  7. 5 -- Hibernate的基本用法 --5 3 改变持久对象状态的方法

    1. 持久化实体 Serializable save(Object obj) : 将obj对象变为持久化状态,该对象的属性将被保存到数据库. void persist(Object obj) : 将o ...

  8. JSP应用开发 -------- 电纸书(未完待续)

    http://www.educity.cn/jiaocheng/j9415.html JSP程序员常用的技术   第1章 JSP及其相关技术导航 [本章专家知识导学] JSP是一种编程语言,也是一种动 ...

  9. EF Code-First 学习之旅 配置一对一的关系

    1对1.1对0 的关系 例如:Entity1与零个或一个Entity2的实例有关系 public class Student { public Student() { } public int Stu ...

  10. django之多表查询

    一.创建模型 在Models创建如下模型: from django.db import models # Create your models here. # 用了OneToOneField和Fore ...

随机推荐

  1. 【介绍】.NET新加特性介绍

    ​ 简介 当下的.Net新版本引进了几种新特性,包括全局命名空间引用.可空引用类型和顶级语句.这些特性在一定程度上改善了 .NET 平台的开发效率, 对于短小精干的小程序,这些新的特性无疑可以把开发效 ...

  2. Android 通过scheme跳转支付宝实现支付

    原文地址: Android 通过scheme跳转支付宝实现支付 - Stars-One的杂货小窝 需求的来源是支付功能,由于支付宝不允许个人开通具有webhook的支付服务,所以是对接了一个支付系统( ...

  3. flex:1的情况下,overflow:auto没有生效的问题

    flex:1的元素的父元素必须保证高度或者宽度有具体的数值:如果父元素的高度或者宽度也是flex:1自适应的,最好在父元素上也设置overflow:auto,这样子元素的overflow:auto生效 ...

  4. [人脸活体检测] 论文:Learn Convolutional Neural Network for Face Anti-Spoofing

    [人脸活体检测] 论文:Learn Convolutional Neural Network for Face Anti-Spoofing 论文简介 这是最早期CNN用于活体检测的文章,在此之前都是手 ...

  5. Typora+MinIO+Python代码打造舒适协作环境

    作者:IT王小二 博客:https://itwxe.com 不知不觉大半年没更新了...前面小二介绍过使用Typora+MinIO+Java代码打造舒适写作环境,然后有很多大佬啊,说用Java来实现简 ...

  6. 2020-11-30:java中,卡表和记忆集的区别?

    福哥答案2020-12-04:[答案来自此链接:](http://bbs.xiangxueketang.cn/question/530)这两个都是G1收集器中的概念记忆集,RemeberSet,用来记 ...

  7. 2021-01-05:mysql的自增id的实现逻辑是什么样子的?

    福哥答案2021-01-05:答案来自这个链接:[ 每日一面 - mysql 的自增 id 的实现逻辑是什么样子的?](https://zhanghaoxin.blog.csdn.net/articl ...

  8. 2022-04-04:k8s中kubectl源码用到了哪些设计模式?除了工厂和单例。

    2022-04-04:k8s中kubectl源码用到了哪些设计模式?除了工厂和单例. 答案2022-04-04: 1.建造者模式.resource.Builder.D:\go_path\src\git ...

  9. 2021-04-10:给定两个可能有环也可能无环的单链表,头节点head1和head2。请实现一个函数,如果两个链表相交,请返回相交的 第一个节点。如果不相交,返回null。【要求】如果两个链表长度之和为N,时间复杂度请达到O(N),额外空间复杂度 请达到O(1)。

    2021-04-10:给定两个可能有环也可能无环的单链表,头节点head1和head2.请实现一个函数,如果两个链表相交,请返回相交的 第一个节点.如果不相交,返回null.[要求]如果两个链表长度之 ...

  10. vue全家桶进阶之路10:修饰符

    Vue2 中的修饰符是指在指令后面添加点号(.)和修饰符名称的方式,用于控制指令的行为.修饰符可以分为事件修饰符和属性修饰符两种类型,下面分别介绍它们的作用和使用方法. 事件修饰符 事件修饰符用于控制 ...