数据库ACID整理

一、事务

       定义:所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。

       准备工作:为了说明事务的ACID原理,我们使用银行账户及资金管理的案例进行分析。

Continue reading “数据库ACID整理”

gkvdb的性能测试(v1.0)

分别从100W、500W、1000W的写入、查询、删除次数及耗时,计算对应的每次操作耗时平均数,用以衡量性能。

需要注意的是,

1、为方便测试,使用的数据是按照 Key: key_xxx => Value: value_xxx 顺序递增的,而不是使用的随机数据,因此对于leveldb和boltdb来说性能会有所提高,但不影响大概的测试结果;

2、以下的时间单位为微秒(μs),1微秒(μs)=0.001毫秒(ms)=0.000001秒(s);

3、性能测试的代码在这里Continue reading “gkvdb的性能测试(v1.0)”

gkvdb的介绍及设计

gkvdb是Go语言开发的基于DRH(Deep-Re-Hash)深度哈希分区算法的高性能Key-Value嵌入式数据库,gkvdb是开源的、免费的,基于MIT协议进行发布,项目地址:https://gitee.com/johng/gkvdb。gkvdb的使用方式极其简单,可参考项目地址中的说明进行操作即可。为了保证gkvdb的高性能,除了使用简单可靠的DRH算法外,gkvdb的一些组件也进行了非常优秀的设计,本文主要对gkvdb的一些核心组件进行简单的介绍。 Continue reading “gkvdb的介绍及设计”

DRH(Deep-Re-Hash)深度哈希分区算法简介

DRH(Deep-Re-Hash)深度哈希分区算法是一种针对哈希表在海量数据及磁盘存储下的一种改进算法,它的查询时间复杂度介于常数O(1)和对数O(d*log (n-1))之间(即:O(1) <= T(n) <= O(d*log(n-1)) ,其中n为阶数,d为深度),提供了极高的数据检索、插入、修改、删除效率。DRH算法的Go语言实现代码:https://gitee.com/johng/drh-go Continue reading “DRH(Deep-Re-Hash)深度哈希分区算法简介”

MySQL中int(10)和int(11)的区别+示例

我们都知道MySQL中的int(10)和int(11)在宽度上是不一样的,但是其实区别真不大,因为都是占用4个字节,所以范围都是一样的,那么主要的区别在哪儿呢?

今天忽然想到这个问题,因此做了一下测试:

1、创建一个测试用的表test,里面只有两个字段,一个int10,一个int11

 

2、往表中插入一条数据,sql如下:

这个时候int11字段报warning了,因为都是4个字节,10000000000已经超过4字节范围上限了,但是只是一个warning,因为MySQL底层已经做了截断处理。

Continue reading “MySQL中int(10)和int(11)的区别+示例”

LevelDB架构与原理

一、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;

Continue reading “LevelDB架构与原理”

讨论问题:团队绩效考核如何制定?如何设置奖惩?

从企业、组织角度来看,团队绩效是以团队的项目绩效作为基础。而确定项目绩效,要在项目开始之前先确定项目绩效目标,待项目结束时来评估是否达成了既定的绩效目标。首先,企业应该建立完备的组织级绩效考核体系,从项目立项开始如何预评估,在面对项目过程中各种情况是否需要奖惩,以及在结项时的最终评价,都是需要针对不同行业、不同企业文化进行客制化分析。举个例子,某甲方企业的项目绩效管理方式是这样的:在立项阶段会按照项目需求的战略意义、技术实现难度、工作量等条件因素,由专家组进行匿名评价,确定项目积分;在项目进行过程中,根据项目是否按规定按时交付产品、代码质量、测试缺陷率、上线运行质量等多种因素进行考评,在项目结项时依据项目的CPI、客户满意度等进行最终评估,得到项目最终绩效积分。到年底的时候团队绩效就是把当年所有项目的积分累加,按照排名转化为绩效奖金。这样的绩效考核机制能够激励团队既能保证多劳多得,又有对过程质量的要求,是一种正向的引导方式。 Continue reading “讨论问题:团队绩效考核如何制定?如何设置奖惩?”