0%

CryptDB要进行数据加密,需要实现具体的加密算法,然后使用加密层类型来进行封装。如果用户想在其上实现新的功能,一方面需要实现加密算法,一方面要添加加密层以及其他相关辅助结构。本文介绍这两者之间的一些接口设计,方便大家基于现有代码做实验。

阅读全文 »

本文是CryptDB代码分析的第三篇。在CryptDB中,需要对加密过程进行记录:比如某个表的原始名字和加密以后的名字,表中有多少列,每列用了什么样的加密算法。这些信息被记录在mysql-proxy端的embedded MySQL中。CryptDB使用了元数据管理的模块处理这些信息,相关代码主要位于main/dbobject.hh以及main/schema.cc。

阅读全文 »

Redis通过IO复用以及单线程模型来处理客户端请求, 其基于epoll,select,kqueue,以及evport封装了自己的事件处理库ae_event. 这个库的作用是监听多个socket描述符,在描述符上产生读写事件的时候,调用相应的函数进行处理. 具体来说,如果socket可读,则读取数据,进行命令解析,并且将命令回复写到输出缓冲区. 如果socket可写,则将输出缓冲区中的数据通过socket发送给客户端. 此外,还可以借助这个库完成固定时间间隔执行某个函数的功能. 本文首先给出一个实际使用的简单例子,然后基于这个例子介绍相关的API以及其内部的实现原理.

阅读全文 »

最近在开源代码中发现了一种不修改代码的情况下, 访问库中的类的私有成员变量的方法. 我们知道, 一个类的成员变量设置成private, 外部函数一般通过友元才能访问. 但是库已经写好了, 在不修改库的代码, 为其添加友元的情况下, 也可以使用一些特殊技巧访问类的私有成员.
为了介绍这个方法, 首先介绍一些C++中的特性, 如下.

阅读全文 »

cscope是一种代码阅读工具, 跟ctags比, 优点是可以查询调用某个函数的有哪些函数. 本文基于参考文献, 整理其基本使用方法, 方便快速查询, 本文测试环境是Ubuntu16.04.

阅读全文 »