加入收藏 | 设为首页 | 会员中心 | 我要投稿 漯河站长网 (https://www.0395zz.cn/)- 云服务器、混合云存储、网络、内容创作、云渲染!
当前位置: 首页 > 站长资讯 > 动态 > 正文

明明是工作经验越久越吃香

发布时间:2021-02-19 11:43:21 所属栏目:动态 来源:互联网
导读:张大胖:大师,我发现我一直是站在巅峰啊! 大师:这有什么好得瑟的,你站得越高,越容易出现难以解决的抽象泄露的问题。 张大胖:抽象的泄露? 大师:对, 这是Stack Overflow的创始人Joel Spolsky提出来的一个理论:所有重大的抽象机制在某种程度上都是有泄

张大胖:大师,我发现我一直是站在巅峰啊!

大师:这有什么好得瑟的,你站得越高,越容易出现难以解决的抽象泄露的问题。

张大胖:抽象的泄露?

大师:对, 这是Stack Overflow的创始人Joel Spolsky提出来的一个理论:所有重大的抽象机制在某种程度上都是有泄露的!

张大胖: 不对吧! 这种分层的抽象,好处不就是每一层都可以屏蔽下层的变化嘛,我站在高层编程,根本不用理会底层, 为什么会泄露?

大师:我来给你举几个例子,你就明白了。外国有个程序员,她使用Ruby语言通过HTTP向本地的一个消息队列发送消息, 这抽象层次很高吧! 但是每次发送消息都得耗费40ms,这是不应该的, 时间太长了。 她查来查去,发现Ruby的类库没有设置TCP_NODELAY, 但是本地的HAProxy却使用了TCP delayed acknowledgement,于是双方互相等待,出现了延时。

张大胖:我听不懂!

大师:你站在抽象的巅峰,这些TCP的细节怎么能听懂呢?我给你举个简单例子吧, 比如你用了Hibernate这个ORM工具,它是一个抽象层,隐藏了SQL, 但是当出现Hibernate性能问题的时候,你怎么办?

张大胖:那我得去看Hibernate 是怎么把对象变成SQL语句的,然后慢慢调优。

大师:对啊,你看Hibernate这个抽象层没法完美地隐藏底层的信息,发生泄露了。 SQL 也是个抽象层,隐藏了读数据库表查询处理的细节,如果SQL语句出现性能问题,你怎么办?

张大胖:那...... 我只好去分析SQL的查询计划,如何利用索引,还得慢慢调优。

大师:你看SQL这个看似完美的抽象层也泄露了不是?

张大胖:有道理,哎呀,这抽象层泄露的代价很高啊,我得学习这么多底层的东西。

大师:所以Joel Spolsky说“抽象只能节省你的工作时间,不能节省你的学习时间”, 用高层的抽象来工作,会比较快,但是你还得学习底层的东西,那是跑不掉的。

张大胖:明白明白了,为了能继续好好地搬砖,我得赶紧去学学计算机的底层基础知识了。


 

总结看完上面常见的中间件/组件的持久化方式,应该就不用我多说了吧?思想几乎都是一样的,只是他们记录“log”的名字不一样而已。

先写buffer,然后顺序IO写Log。防止buffer的数据还没刷到磁盘,宕机导致数据丢失。

对于Log文件,中间件也不会放任它们一直膨胀,导致体积很大:

在Redis里边,会对AOF文件进行重写

在HDFS里边,editlog会定时生成fsimage

在Elasticsearch里边,translog会根据阈值触发commit操作

 

HBase

HBase是一个能存储海量数据的数据库。

HBase在写数据的时候,会先写到Mem Store,当MemStore超过一定阈值,就会将内存中的数据刷写到硬盘上,形成StoreFile,而StoreFile底层是以HFile的格式保存,HFile是HBase中KeyValue数据的存储格式。

我们写数据的时候是先写到内存的,为了防止机器宕机,内存的数据没刷到磁盘中就挂了。我们在写Mem store的时候还会写一份HLog



(编辑:漯河站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读