论数据引擎的核心设计思想(一)(原创)

      说到数据引擎,很多人会联想到MYSQL的innoDB、MyISAM等,当然还有Redis、Memcached 这些NoSql 的技术实现,那么如何去实现,如何去设计一款数据存储引擎呢?你了解数据引擎背后的设计原理么?数据引擎的设计涉及到哪些关键点?

       而这些,就是本文要讲述的,当然这些都是本文作者在工作学习中产生的自身体悟,也许并非与官方思想完全一致,但求同存异,也许我的文档能够带给你不一样的思考。

      大家都知道,数据引擎核心涉及的是数据的读(read)与写(write),数据引擎优先考虑的是数据的读写性能效率与数据操作行为的结果正确性。读写效率中的读效率比写效率更加被人看重,在大多数数据操作场景下发生数据读操作行为的次数最多,而写操作行为则相对发生较少。

        那么如何实现高效率的数据读操作呢?

         下面,我从自身感悟出发,来讲述一下,我的相关看法与观点(不喜勿喷,也希望大家广泛批评指正)。

        说到“高效率的数据读操作行为”,有几点是需要考虑的,大家思考下,数据引擎的读操作流程是如何的?

       当我们想要去读取一项数据,那么则必须先要去找到它(定位地址),之后才会接着去取地址上存放的数据。

        大家有没有想过,如何去快速读取包含1亿条记录的数据表中的某项数据?如何可以实现最小开销?

        “优化定位”,是我要重点强调的!

        想要实现数据快速查找,就必须设计出足够优化的存储结构与相应查找算法。在“优化定位”这个概念中,我们的目的很明确,就是要以尽可能高的效率去找到数据。那么,与之对应的,我们该如何去实现它?大家回想一下曾经在大学时代学过哪些算法,学过哪些数据结构?有没有什么灵感产生呢?     

       大家有没有想过“二分法”?有没有思考过它的算法思想是什么?它又有哪些好处呢?“二分法”是否可以产生相应算法变种?它是否可以被无限迭代?二分法的最小集合范围,是多少?有没有与“二分法”对应的数据结构?比如“二叉树”?

       大家有没有了解过MySQL一些存储引擎的设计原理?比如说,什么是B+树?什么是叶子节点?大家有没有思考过“叶子节点”这个词汇的意义?大家是否有通过“叶子节点”的概念,而联想到"树"的概念?

       如果有些同学没有接触过相应数据结构,那么在你玩过的游戏中,是否会有“世界树”?是的,树,是很多数据引擎在设计实现时所会采用的数据结构。

       相信大家在接触C语言时(相信很多上过大学的童鞋,都有C语言这门课程)^_^,大家还记得里面的一些基础数据结构么?还记得里面有哪些算法么?

       比如,链表?链表的概念大家还有印象么?什么是单向链表?它有什么用途,在什么场景下会被优先用到?什么是双向链表?它有具备什么样的存在价值?

      大家有没有想过,将多种数据结构与算法相结合,即会产生一个新的生命个体?、

当然,在我眼里,代码是有生命的,在我们的肉体生命逝去以后,代码将作为我们的灵魂与思想延续存在N长时间。因此,我在设计程序、编写代码时,非常注重赋予它们“生命”。

      在我的一些作品中,诸如GDSC数据安全通信协议、C语言网络安全框架、PHP/JAVA/SHELL敏捷开发框架等,都无疑融入了这种思想。当然,我不是在吹嘘自己的技术有多厉害,我只是在重点强调,代码灵魂的重要性!编写代码、设计程序,要赋予它们灵魂,赋予它们生命,在极客的程序员眼里,它们不只是毫无生机的英文字母+标点符号,它们更是自己的孩子。    

     话题,也许跑到宇宙之外了。^_^ ^_^ 但是,只有当你真正把程序或者代码当成自己生命部分的同时,你才能写出较为优秀的代码。

     回到正题,我用几年前发布在gitee上的代码,给大家分享及讲解一些个人对于数据引擎核心设计方面的一些思想感悟。

    接下一章:论数据引擎的核心设计思想(二)(原创)

   

    

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值