Git 分支管理模型


单主干
单主干的分支实践(Trunk-based development TBD)在 SVN 中比较流行。Google 和 Facebook 都使用这种方式。trunk 是 SVN 中主干分支的名称,对应到 Git 中则是 master 分支。TBD 的特点是所有团队成员都在单个主干分支上进行开发。当需要发布时,先考虑使用标签tag,即 tag 某个 commit 来作为发布的版本。如果仅靠 tag 不能满足要求,则从主干分支创建发布分支。bug 修复在主干分支中进行,再 cherry-pick 到发布分支。
git-branch-01.png



阅读全文

Git 撤销修改


在 Git 里共有5种状态:
未修改(Origin)
已修改(Modified)
已暂存(Staged)
已提交(Committed)
已推送(Pushed)

已修改,未暂存

如果我们只是在编辑器里修改了文件,但还没有执行 git add .,这时候我们的文件还在工作区,并没有进入暂存区,我们可以用:

git checkout .

或者

git reset --hard

来进行撤销操作。






阅读全文

Git 放弃本地修改 直接 pull 代码


git reset --hard HEAD    
git clean -f -d    
git pull

先 reset 然后清空
同时可以解决如下问题:

error: Your local changes to the following files would be overwritten by merge:
        test/main.go
Please, commit your changes or stash them before you can merge.
阅读全文

Git 提交空目录


目录是空的:
这种情况下只需要在目录下创建 .gitkeep 文件,然后在项目的 .gitignore 中设置不忽略 .gitkeep
.gitkeep 是一个约定俗成的文件名并不会带有特殊规则

目录中已经存在文件:
那就需要首先在根目录中设置 !.gitignore,然后在目标目录也创建一个 .gitignore 文件,并在文件中设置

*
!.gitignore

这样就可以在项目中提交空目录了

阅读全文

Git 的 ssh key


生成 ssh key

ssh-keygen -t rsa -C "your name"

这样默认会在本地的 ~/.ssh 目录下生成 id_rsa,id_rsa.pub 两个文件。
id_rsa 是私钥,id_rsa.pub 是公钥。

使用 ssh key
ssh key 方式登录远程服务器
我们需要把 id_rsa.pub 拷贝到远程服务器的 ~/.ssh 下面,并改名为 authorized_keys,这样我们就可以使用 key 的方式登录了。

ssh key 方式使用 git clone 代码
如果我们使用的是 github,只需要把 id_rsa.pub 的内容拷贝出来,在 github 的 setting 里面添加即可, 我们就可以使用 ssh 方式 clone 代码了。

// 请修改为你自己的git地址
git clone git@github.70data/test.git




阅读全文

深入浅出 Kafka(四)Kafka 简介


Kafka 特性:

  • 具有近乎实时的消息处理能力 顺序读写磁盘
  • 支持批量读写磁盘 并且会对消息进行批量压缩
  • 支持消息分区 可以在线增加分区,为每个分区创建多个副本,只会有一个 Leader 负责读写,其他副本与 Leader 同步。
  • 支持水平扩展

阅读全文

深入浅出 Kafka(三)稀疏索引与稠密索引


聚集索引:在一张表中,如果一个索引有如下特性,数据的物理顺序与键值的逻辑顺序相同。

稠密索引和稀疏索引都属于聚集索引。

1.稠密索引
定义:它是由键值和指针(指向记录本身地址)组成的一系列存储块,该存储块的键值与文件的逻辑顺序一致。
特性:每个存储块的每一个键对应的指针都指向每个数据块每一条记录,当要查找指定键 K 时,采用二分查找即可找到键K对应的记录,复杂度为 log2n。

2.稀疏索引
定义:它是由键值和指针(指向记录本身地址)组成的一系列存储块,该存储块的键值与文件的逻辑顺序单调性一致。
特性:每个存储块的每一个键对应的指针都指向每个数据块的第一条记录,当要查找指定建 K 时,先采用二分查找找到 <=K 的键 S,如果 S=K,则命中记录,如果 S<k,则顺序查找 =K 的键,复杂度大于 log2n,小于 n。

比较:

  • 稀疏索引占用的索引存储空间比较小,但是查找时间较长;
  • 稠密索引查找时间较短,索引存储空间较大。
阅读全文

深入浅出 Kafka(二)磁盘的基本概念


在谈这俩概念前、先来说说大 I/O 与小 I/O。通常,我们把 <=16KB 的 I/O 认为是小 I/O。而 >=32KB 的 I/O 认为是大 I/O。

当前大多系统使用的都是传统的机械磁盘。因此,整个系统设计要尽可能顺序I/O。避免昂贵的寻道时间和旋转延迟的开销。随机小 I/O 消耗比顺序大 I/O 更多的处理资源。随机小 I/O 更在意系统处理 I/O 的数量,即 IOPS,比如 OLTP。而顺序大 I/O 则更在意带宽,即 MB/s,比如 OLAP。因此,如果系统承载了多种不同的应用,必须了解它们各自的需求,是对 IOPS 有要求,还是对带宽有要求。

传统机械磁盘最大的问题在于读写磁头,读写磁头的存在可以让磁盘既能顺序 I/O、也可随机 I/O。但是,随机 I/O 需要花费昂贵的磁头旋转和定位来查找。因此,顺序 I/O 访问的速度远远快于随机 I/O。

顺序读写 = 读取一个大文件

随机读写 = 读取多个小文件

顺序读写比随机读写快的原因:

  1. 顺序读写 主要时间花费在了传输时间,而这个时间两种读写可以认为是一样的。
    随机读写 需要多次寻道和旋转延迟,而这个时间可能是传输时间的许多倍。
  2. 顺序读写 磁盘会预读,预读即在读取的起始地址连续读取多个页面。
    随机读写 因为数据没有在一起,将预读浪费掉了。
  3. 文件系统的 overhead 读写一个文件之前,得一层层目录找到这个文件,以及做一堆属性、权限之类的检查。写新文件时还要加上寻找磁盘可用空间的耗时。对于小文件,这些时间消耗的占比就非常大了。
阅读全文