热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于数据库:软件技术更新速度很快担心自己掌握的技术会过时

上周末在知乎看到一个问题“都说当初编程技术更新速度快很多技术会过期,那么有哪些技术不容易过期呢?”,长期起意做了一个答复,没想到点赞数很快破千,成了热

上周末在知乎看到一个问题“都说当初编程技术更新速度快很多技术会过期,那么有哪些技术不容易过期呢?”,长期起意做了一个答复,没想到点赞数很快破千,成了热门答复,感觉很多技术人都比较关心这个问题。趁着在北京大兴酒店隔离有闲,把这篇答复扩大成一篇文章,联合我研发 TDengine 的教训,再更加深刻地开展论述一下,分享给研发同学。

把握最根本的原理和办法,你永远不会被淘汰

我是 1984 年高中一年级时开始写程序的,见证了整个 IT 的高速倒退。外表上技术倒退很快,特地是与用户间接接触的前端技术包含人机交互局部,但计算机的根本技术和原理都没有什么变动。

如果要我从新学一次计算机专业,我肯定会认真上几门课,1:数据结构,2:算法,3:计算机体系结构,4:操作系统,5:编译原理,6:计算机网络,7:数据库,8:软件工程。再从本人的趣味登程,学习一下数字信号处理、数据分析相干的课程。这些课里学到的常识,至多我 30 年前在用,当初依然在用。我能够必定的说,这些课里的常识把握的很相熟的,技术水平肯定高。

以我本人守业开发的时序数据库(Time-Series Database)TDengine (http://www.tdengine.com)为例,咱们开发了本人的内存治理、文件治理、调度器、音讯队列,应用了多种索引办法、排序等等。如果你不能顺手写一个二叉树、Hash,你都没法做 TDengine 的研发工作。尽管这些根本的原理都有现成的库,但针对本人的场景,比方时序数据场景,很多状况下都不能间接用,或性能不够,因而就肯定得本人写,而本人写的话,不把握那些原理是写不进去的。

举一个例子,操作系统课程里介绍的“生产者-消费者”问题,就是一个经典问题,在很多场景下,你往往都会遇到,比方 TDengine 里的查问调度就须要。只有你对生产者消费者问题齐全搞清楚,你才可能把异步线程通信搞明确,顺手拈来。在 TDengine 的程序里,咱们就应用信号量来将网络的异步操作转化为用户侧的同步操作。再举个例子,比方编译原理,工作中不太可能有工作要你写一个编译器,然而学会了编译原理,你对怎么最大水平地去优化本人的程序、学一门新的编程语言、写个简略的 parser ,就会得心用手。

我集体最推崇的是认真学习操作系统这门课,因为它讲的都是各种资源的治理和调度,包含 CPU、内存、网络、外围设备等等。世界上绝大部分 IT 零碎都是治理这种或那种资源,抽象地来看,与 CPU、内存、外围设备的治理其实没任何区别。因而你能够用操作系统课里学会的办法、算法去解决其余理论问题。

所有这些计算机的基本原理、办法几十年都没变,咱们只是把它组合起来,去解决新的问题,比方区块链,再比方 IoT 场景下的时序数据处理。因而只有把握最根本的原理和办法,你就永远不会被淘汰。

我 1996 年认真读过的书,正在上大三的儿子也认真读过。这本书里很多办法都用在了 TDengine 的开发上,这书里的常识很惆怅时。

把握了根底的原理和办法,还要学会做翻新

以底层根底软件的实现来说,很多根本的原理和办法都没有变过,然而为什么做进去的产品,所呈现出的性能、市场竞争力却有很大差距?起因还是在于如何奇妙使用这些原理和办法,就像数学、物理公式一样,简单难题的解析也是看你对这些公式的了解和使用水平。

以实现一个时序数据库(Time-Series Database)为例,为实现程度扩大所采取的的分片分区策略,其实都是操作系统、数据库里的根本内容,应用的客户端服务器之间的通信也都是计算机网络中最根本的传输协定,构建索引所应用的也都是根底的索引办法,等等。一个好的产品性能,脱胎于用户和市场需求,建设在泛滥根底原理和办法的翻新之上。

在时序场景下,IoT 设施规模可能达到千万甚至上亿,每秒产生的数据就能高达千万、亿级别,面对这样大的吞吐量,一般数据库基本难以承受,那咱们在开发时序数据库时,就要思考数据如何充分利用时序数据特点来做分区分片、如何更好地实时构建索引等等,这些极具挑战性的理论问题的解决思路就是要翻新。

以 TDengine 为例,为了更好地解决这些问题,TDengine 从最后就自研了存储引擎,翻新地提出了“一个数据采集点一张表”与“超级表”的概念。咱们从传统的数据库里汲取了 WAL,Skip List 等办法,同时把风行的 LSM Tree 做了很大的改变,把树层级构造去掉了,变成了只是按时间段分区、按工夫线分块的数据块。这种对存储引擎的翻新设计,也让 TDengine 与典型的 NoSQL 存储模型相比,实现了标签数据与时序数据齐全拆散进行存储,不仅极大地升高了因为标签反复存储所带来的存储空间的节约,还可能极为高效地实现多表之间的聚合查问,使得千万级别规模的标签数据查问能够在毫秒级别返回。

在我 2008 年守业做和信时,就是一台手机一个音讯队列,当初物联网数据的解决,和我当年做音讯队列模块相比,在存储架构上,只是一个结构化与非结构化的区别,前者是为了更高效地做各种计算和查问,但在理论利用中,咱们还须要思考到多个设施间数据如何进行高效聚合,我很快就想到了对策,那就能够用数据分析中的维度表、事实表的模型来解决,这样一来,超级表的概念也就进去了。

TDengine 受这些经典数据结构的启发,应用到的也都是风行十几年甚至更久的根底技术,但在此之上还有对技术的正当使用和不断创新,最初才真正成为一个为时序数据场景量身定做的数据库产品。

对于开发者来说,把握根底的技术常识和原理是迈进这个职业门槛的一个通行证,如果是一个有谋求的人,真的想要在工作中有所建树,还想往上更进一步,那就还应该时刻思考怎么使用好这些常识,怎样才能更疾速去取得一些对代码的创意思考。

想要往上走,就肯定不能躺平

软件特地是根底软件开源,曾经成为不可抵御的潮流,对于开发者来说,这是最好的时代,你不须要苦思冥想本人瞎琢磨,很多时候也不必齐全从 0 到 1 去进行一个设计思考。开源我的项目就像是一本书籍,你总能从中取得一些超出你认知的对于根底技术的翻新使用,毫无疑问,站在前人的肩膀上,你能看到的会更远。

就拿编程语言来说,因为互联网行业自身变动大,倒退迅速,编程语言也是形形色色,除了 Java、Javascript 一类的,近几年新出的还有如 Go、Rust、Dart、Kotlin、Swift 等等,在应用型技术占比很高的行业中,对于语言的把握也要绝对宽泛一些,好在这些风行语言还并不是很难把握。

还有些偏底层的语言,自身是很弱小的,开发需要低,所以始终都很稳固,C 语言就是这类语言的代表,学好了几十年后也不会过期。但难点就在于这种语言比拟难把握,而且大多波及硬件和操作系统底层,所以很多人都会对 C 语言望而生畏。但事实上 C 语言十分值得学习,它的灵活性极强,向上能够写利用,向下能够写硬件,如果哪一天互联网没落了,依附对这门语言的精通齐全能够让你平移到其余赛道。

TDengine 就是一款应用 C 语言自主研发的时序数据库(Time-Series Database),没有应用任何第三方的库,一切都是本人开发,包含定时器、RPC 等模块等,并且曾经开源。当初我抉择 C 语言作为开发语言的起因,其实是受到了 SQLite 的影响,它没有服务器,仅仅一个 C 语言库,整个数据库寄存于繁多跨平台的文件,反对 ACID,零配置,而且体量能够仅为 600KB。我很庆幸TDengine 抉择了 C 语言,尽管的确有一系列头疼问题,如内存泄露、有效指针、多线程同步等,但这些都在前期优化中失去了改善,而 TDengine 所领有的无依赖、体量小、内存远远小于 InfluxDB、OpenTSDB 等其余时序数据库这些劣势,都是十分显著的。

参加开源我的项目也是学习编程语言的一个好办法,要晓得,风行的开源我的项目都是通过实际斟酌、比拟成熟的代码创作,认真去研读相干我的项目的源码,而后再依附学习到的代码思路去解决问题,这会让你在语言学习上事倍功半。如果你正在蛊惑,无妨参加到 TDengine 开源我的项目中来,只有你真心有投入,我乐意花工夫与你一起探讨问题。

结 语

以前很多人质疑过我,认为我不是一个从 Oracle、DB2 外围团队进去的人,怎么能研发Database?但如果你深挖了我的背景,晓得我从 1997 年起就在做分布式高牢靠的无线外围网络设备研发,也明确音讯队列与时序数据之间的相似之处后,你就不会奇怪了。就像我开篇时说的,技术圈里很多的根底原理和办法,几十年都未曾扭转,长于思考总结的人总会从中失去相干的法则。可能正是因为我是跨界过去的,比起沉迷在数据库畛域多年且曾经造成技术思维固化的开发者,才更容易在根底原理和办法的使用上,想到翻新甚至是颠覆式的设计思路。

所以,过期的不是根底的技术原理和办法,而是人的思考能力以及没有跟上节奏的对技术的认知。

陶建辉

2022年5月29日于北京大兴隔离酒店


想理解更多 TDengine Database的具体细节,欢送大家在GitHub上查看相干源代码。


推荐阅读
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 关于CMS收集器的知识介绍和优缺点分析
    本文介绍了CMS收集器的概念、运行过程和优缺点,并解释了垃圾回收器的作用和实践。CMS收集器是一种基于标记-清除算法的垃圾回收器,适用于互联网站和B/S系统等对响应速度和停顿时间有较高要求的应用。同时,还提供了其他垃圾回收器的参考资料。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 嵌入式处理器的架构与内核发展历程
    本文主要介绍了嵌入式处理器的架构与内核发展历程,包括不同架构的指令集的变化,以及内核的流水线和结构。通过对ARM架构的分析,可以更好地理解嵌入式处理器的架构与内核的关系。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 技嘉秀高端B450主板:不再支持第七代APU,性价比高且兼容锐龙一代和二代
    在台北电脑展上,技嘉展示了一款高端的B450主板,型号为“b450 aorus pro wi-fi”。该主板具有10+1相供电、散热片覆盖的供电区域和芯片组,以及两个m.2插槽和背部IO挡板。虽然不支持第七代APU bristol ridge,但它兼容锐龙一代和二代,且具有较高的性价比。该主板还配备了音频声卡、Wi-Fi无线网卡等功能,是一款性能出色且设计精良的主板。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
author-avatar
zc43pml
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有