概述 BoltDB中的Bucket类似于传统关系型数据库的”表”。BoltDB通过Bucket将一个庞大的数据库划分成诸多的命名空间。用户在每个命名空间内存储KV数据,通过此种办法可以提高数据的搜索效率。 例如,一个BoltDB中可: 创建User Bucket,用于记录用户信息(存储的K是用户名,而Value是用户详情) 创建Order Bucket,用户记录用户订单信息(存储的K是用户名,而Value则是订单详情) ……

Continue reading BoltDB之Bucket(一)

我们前面的博客中仔细阐述了ext2_allocate_branch()的实现原理,其主要作用是分配写所需的直接和间接块,并建立映射关系,但仔细分析后,我们可以发现,这种映射关系建立的不是很彻底,即有些该做的还未做,那么这些未做的留到哪了呢?就在本文所要分析的ext2_splice_branch()函数中来实现。

Continue reading ext2_splice_branch解析

在之前的多篇博客中我们都比较详细地阐述了ext2_get_block()路径中各个函数的实现原理,今天我们来关注下ext2_allocate_branch()的实现细节,这个函数是非常重要的,而且理解起来也没那么简单,虽然说函数的功能一句话就可能说完:为数据块建立映射路径。

Continue reading ext2_allocate_branch()解析

说明 在服务端编程时,有时候需要一个很重要的功能便是客户身份验证,而一种通常的验证方法是白名单:只有在白名单列表中的客户端才可以被允许访问。 因为服务端提供的API很多,因此,必须在每个API实现中都需要去检查客户端权限,这种实现方法有以下问题: 违背了DRY原则,所有的白名单检查代码其实都是一模一样; 将身份认证和业务逻辑耦合的比较紧密了,如果我们需要将白名单变成另外一种实现,修改的地方会很多

Continue reading Golang一种白名单封装方法