level介绍

本文耗时60分钟,阅读需要20分钟。

leveldb 介绍

LevelDB 是 Google 开源的持久化KV单机数据库,具有很高的随机写,顺序读/写性能,但是随机读的性能很一般,也就是说,LevelDB很适合应用在查询较少,而写很多的场景。 LevelDB 应用了LSM (Log Structured Merge) 策略,lsm_tree 对索引变更进行延迟及批量处理,并通过一种类似于归并排序的方式高效地将更新迁移到磁盘,降低索引插入开销,关于LSM,本文在后面也会简单提及。

根据Leveldb官方网站的描述,LevelDB的特点和限制如下:

特点: 1、key和value都是任意长度的字节数组; 2、entry(即一条K-V记录)默认是按照key的字典顺序存储的,当然开发者也可以重载这个排序函数; 3、提供的基本操作接口:Put()、Delete()、Get()、Batch(); 4、支持批量操作以原子操作进行; 5、可以创建数据全景的snapshot(快照),并允许在快照中查找数据; 6、可以通过前向(或后向)迭代器遍历数据(迭代器会隐含的创建一个snapshot); 7、自动使用Snappy压缩数据; 8、可移植性;

限制: 1、非关系型数据模型(NoSQL),不支持sql语句,也不支持索引; 2、一次只允许一个进程访问一个特定的数据库; 3、没有内置的C/S架构,但开发者可以使用LevelDB库自己封装一个server;

LevelDB本身只是一个lib库,在源码目录make编译即可,然后在我们的应用程序里面可以直接include leveldb/include/db.h头文件,该头文件有几个基本的数据库操作接口。

存储流程简述

存储流程如下所示:

  • 当插入一条key-value数据时,leveldb先将数据插入到log文件(追加)中,成功后写入memtable中,既保证了高效写入,也保证了数据的稳定性
  • 当memtable插入的数据到了一个界限之后,会转为Immutable memtable, 由新的memtable支持写入操作.同时,leveldb在后台会通过调度程序将 Immutable memtable dump到磁盘上的sstable文件中。
  • sstable内部的数据是key有序的。由Immutable memtable不断dump出来的 sstable文件越来越多,会进行compact操作,形成新的level的sstable文 件。
>> 继续阅读 <<

认知,突破,成长

本文耗时60分钟,阅读需要5分钟。

认知,突破,成长

《欢乐颂2》:为什么越是出身底层,越追求稳定

在第一季《欢乐颂》中,曲筱绡说过一句话:什么叫局限呢,局限就是砍柴的以为皇帝拿金扁担。

自我认知的局限一定会限制你的发展,限制你的人生高度。

想要打破阶层壁垒,实现阶层跨越,最关键的是突破自己的认知局限。

原文地址:《欢乐颂2》:为什么越是出身底层,越追求稳定


怎么样突破呢?

可以通过读书,可以参加培训,可以去认识更多比自己牛的人,可以进入高层次的圈子等方法,不断提升自我,进化自我,突破自己的认知局限,才能站在一个更加广阔的视野上看问题,才有可能实现阶层跨越。

以上的只是几个办法而已,我认为最重要的不是方法,而是你的心,你到底有没有想清楚,你有没有真的想要改变突破,要不要走出自己的舒适区,如果是,那就从你最想改变的第一件事做起。

说起来简单,实际上你要坚持下来,我觉得还是非常非常非常难的!

不管怎样,送一句鸡汤给你:“放弃易,坚持难!”。

你不想自己只是一个普通人,但是你又没有改变,又没有突破,那你肯定会趋于普通,趋于平庸!你会成为你最不想成为的那种人。


成长

每个人都是与众不同的,每个人都是想成长的,只是你不知道怎么办。

你可能想的是成长应该要同事/朋友/亲人帮助的吧,成长应该是要公司给以的吧。

如果你是这样想的,那你肯定成长不了,或者说成长有限。

我理解的成长其实就是自我成长,突破自己的认知,改变自己的习惯。

“所谓成长就是随时把自我碎掉,然后重建。”–梁宁。


茶歇驿站

一个让你可以在茶歇之余,停下来看一看,里面的内容或许对你有一些帮助。

这里的内容主要是团队管理,个人管理,后台技术相关,其他个人杂想。

茶歇驿站二维码

当然,你觉得对你有帮助,也可以给我打赏。 打赏

>> 继续阅读 <<

限流:漏桶算法和令牌桶算法

本文耗时120分钟,阅读需要15分钟。

互联网产品动不动就搞一个活动,虽然现在搞多了,用户活跃度降低了很多,但是依然会在短时间内带来巨大的流量,我们如何让系统在处理高并发的同时还是保证自身系统的稳定,

有人说可以加机器啊,我的架构是分布式的,只需要加机器就好了。但是如果你加机器也不够怎么办? 这个时候我们就必须需要要做业务降级或系统限流了。

怎么做呢???

什么是限流?

限流,归根结底就是在一定频率上进行量的限制。

一般用来控制服务请求的速率,比如双十一的限流,12306的抢票等等。

比如家里的“保险丝”,还有 Java 线程池,数据库连接池等也是类似的概念, 一旦超过连接池的容量,程序就可以根据预先配置的策略进行处理。

两种常见的限速/限流算法

有时人们将漏桶算法与令牌桶算法错误地混淆在一起。而实际上,这两种算法具有截然不同的特性并且为截然不同的目的而使用。

它们之间最主要的差别在于:漏桶算法能够强行限制数据的传输速率,而令牌桶算法能够在限制数据的平均传输速率的同时还允许某种程度的突发传输。

令牌桶(Token Bucket)

令牌桶算法通过发放令牌,根据令牌的rate频率做请求频率限制,容量限制等。

令牌桶算法的原理是系统会以一个恒定的速度往桶里放入令牌,而如果请求需要被处理,则需要先从桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务。

令牌桶算法的基本过程如下:

  1. 每秒会有 r 个令牌放入桶中,或者说,每过 1/r 秒桶中增加一个令牌;
  2. 桶中最多存放 b 个令牌,如果桶满了,新放入的令牌会被丢弃;
  3. 当一个 n 字节的数据包到达时,消耗 n 个令牌,然后发送该数据包;
  4. 如果桶中可用令牌小于 n,则该数据包将被缓存或丢弃。

令牌桶算法示意图

优缺点:

  1. 令牌桶的另外一个好处是可以方便的改变速度。 一旦需要提高速率,则按需提高放入桶中的令牌的速率。
  2. 可以限制总请求大小,还限制平均频率大小;
  3. 还是容易导致误判等问题

优化扩展:

还有些变种算法则实时的计算应该增加的令牌的数量, 比如华为的专利”采用令牌漏桶进行报文限流的方法”(CN 1536815 A),提供了一种动态计算可用令牌数的方法,相比其它定时增加令牌的方法, 它只在收到一个报文后,计算该报文与前一报文到来的时间间隔内向令牌漏桶内注入的令牌数, 并计算判断桶内的令牌数是否满足传送该报文的要求。

漏桶(leaky bucket)

漏桶算法可以很好地限制容量池的大小,从而防止流量暴增。

漏桶算法思路很简单,水(请求)先进入到漏桶里,漏桶以一定的速度出水,当水流入速度过大会直接溢出,可以看出漏桶算法能强行限制数据的传输速率。

漏桶算法示意图

漏桶算法实现上来说,就是建立一个队列,队列上实现FIFO,在请求前实现插入,请求完成后实现删除。

优缺点:

  1. 漏桶算法优点很明显,简单、高效,能恰当拦截容量外的暴力流量。
  2. 缺点也明显,无法对流量做频率处理。比如:桶大小设置范围内,进行并发攻击依然能产生大流量并发效果,桶容量又不可以设置的过小,否则容易卡死正常用户。

漏桶和令牌桶比较

“漏桶算法”能够强行限制数据的传输速率,而“令牌桶算法”在能够限制数据的平均传输数据外,还允许某种程度的突发传输。

在“令牌桶算法”中,只要令牌桶中存在令牌,那么就允许突发地传输数据直到达到用户配置的上限,因此它适合于具有突发特性的流量。


参考资料

  1. 令牌桶(Token Bucket)
  2. 漏桶(Leaky Bucket)
  3. 接口限流实践
  4. 流量调整和限流技术

茶歇驿站

一个让你可以在茶歇之余,停下来看一看,里面的内容或许对你有一些帮助。

这里的内容主要是团队管理,个人管理,后台技术相关,其他个人杂想。

茶歇驿站二维码

当然,你觉得对你有帮助,也可以给我打赏。 打赏

>> 继续阅读 <<

持续学习

本文耗时60分钟,阅读需要5分钟。

30天习惯养成记完成已经有一两周了,最近个人工作上做了一些调整,所以博文更新也停滞了。

现在,我重新开始制定我的学习计划。

  1. 阅读
  2. 编码

阅读

主要是通过kindle和微信读书,还有小部分微信公众号。

但是根据之前的经验,微信公众号的文章属于知识普及型,不会很深入,也比较难系统学习,所以尽量还是只看书,养成看书的习惯。

系统学习飞雪无情的<Go语言实战笔记>系列,再次巩固Go的基础知识。

编码

  1. 公司项目
  2. LeetCode
  3. 参与开源项目(TiDB)

茶歇驿站

一个让你可以在茶歇之余,停下来看一看,里面的内容或许对你有一些帮助。

这里的内容主要是团队管理,个人管理,后台技术相关,其他个人杂想。

茶歇驿站二维码

当然,你觉得对你有帮助,也可以给我打赏。 打赏

>> 继续阅读 <<

睡眠质量

本文耗时60分钟,阅读需要5分钟。

近况

最近我有在使用小米手环2,他不仅有计步的功能,还提供睡眠检测,以及睡眠质量的检测,主要检测“深睡眠”和“浅睡眠”,并且可以统计你什么时候深睡眠,什么时候浅睡眠,当然是包括你什么时候入睡及什么时候醒来的。

我佩戴了几天,大概是这样的:6 小时睡眠,大概有1 个半小时深睡眠,而且有时候深睡眠都是非常零散的,几分钟到二十分钟不等。

在之前的30天习惯养成计划中,我已经养成了早起的习惯,所以现在基本上都是早上6点起床,有时候甚至5点40就醒了。看着统计报表实在是有点担心自己的身体,每天睡眠质量不足6小时,我这样掏空自己真的好吗?

解读“深睡眠”和“浅睡眠”

一个睡眠周期: 一个睡眠周期

典型的8小时睡眠周期图: 典型的8小时睡眠周期图

睡眠不是只有深浅之分,严格说来,它有四个阶段: Phase1 入睡阶段:肌肉放松进入浅眠,很容易被叫醒。 Phase2 浅睡阶段:呼吸心跳变慢,体温略微降低,体动相对活跃。 Phase3 深睡阶段:呼吸心跳较前一阶段变得更慢,肌肉放松,身体几乎不动,大脑不活跃,无梦,这一阶段被叫醒需要时间恢复。 Phase4 眼动/REM阶段:大脑活跃度跟白天无异,眼睛快速运动但身体几乎不动。

小米手环判断深睡眠和浅睡眠以及运动量的原理? 深睡眠多久才够?

手环检测数据只能用于参考,不要过于在意其数据,不过也应该要听取其建议,改善睡眠质量。

如何改善睡眠质量

  1. 有节奏的早睡早起,一定要坚持2-3个月才能形成生物钟。
  2. 每天疲倦一点,晚上倒头就睡。
  3. 睡前要平静,降低脑波频率,有益睡眠.可以通过冥想或者其他一些运动。
  4. 睡前不要吃东西,给胃增加额外的负担。

参考阅读笔记,不睡没有必要的觉

你适合佩戴吗?

  1. 想了解自己的入睡和醒来时间。
  2. 想简单了解自己的睡眠质量,并方便自己有意识的提高。
  3. 想看统计数据
  4. 会不会受到数据影响,反而睡不好觉

另外提一点: 小米手环2是无法记录午睡的睡眠情况的,这个比较尴尬,中午睡得少,但是其质量也是可以看一看的啊,有点遗憾。

总结

  1. 早睡早起
  2. 早起后需要做一些动作来唤醒身体
  3. 坚持
  4. 不能因为深睡眠少,或者睡眠质量不高,就放弃早起,所以我应该要改变的是早睡,以及怎么提高睡眠质量。

茶歇驿站

一个让你可以在茶歇之余,停下来看一看,里面的内容或许对你有一些帮助。

这里的内容主要是团队管理,个人管理,后台技术相关,其他个人杂想。

茶歇驿站二维码

>> 继续阅读 <<

思考

本文耗时60分钟,阅读需要5分钟。 - - - 

思考总是存在的,我们一定要持续思考。


茶歇驿站

一个让你可以在茶歇之余,停下来看一看,里面的内容或许对你有一些帮助。

这里的内容主要是团队管理,个人管理,后台技术相关,其他个人杂想。

茶歇驿站二维码

>> 继续阅读 <<

30天习惯养成计划总结

本文耗时60分钟,阅读需要5分钟。
>> 继续阅读 <<

30天习惯养成计划第21天

本文耗时10分钟,阅读需要2分钟。
>> 继续阅读 <<

30天习惯养成计划第20天

本文耗时10分钟,阅读需要2分钟。
>> 继续阅读 <<

旅行游记

本文耗时分钟,阅读需要分钟。
>> 继续阅读 <<