OlapBase API
此文档主要详细介绍了OlapBase API的使用说明
1. 概述
本手册将介绍使用TuGraph图计算系统需要的简单配置,同时结合代码对TuGraph中几个共同的重要 文件和接口进行解释。
2. 配置要求
如果要使用TuGraph图计算编写以及编译自己的应用程序,需要的配置要求为:
- linux操作系统,目前在Ubuntu16.04, Ubuntu18.04, Ubuntu20.04和Centos7, Centos8系统上可成功运行。
- 支持C++17的编译器,要求GCC版本为8.4.0或更新的版本。
3. 原子操作
TuGraph使用了多线程技术进行批处理操作,在这种情况下可能会出现访存冲突现象。为了保证并行计算时修改操作的正确性,TuGraph实现了原子操作。代码部分见lgraph文件夹下的lgraph_atomic.cpp文件。 TuGraph还自定义了4个常用的原子操作。当我们需要在多线程模式下修改点的数据时,我们都应该使用原子操作来确保并行环境下修改操作的正确性。除了这4个原子操作外,用户也可以使用“cas”来构建自己的原子操作函数。
bool cas(T * ptr, T oldv, T newv)
:如果ptr指向的值等于oldv,则将ptr指向的值赋为newv并返回true,否则返回falsebool write_min(T *a, T b)
:如果b比a指向的值更小,那么将a指向的值赋为b并返回true,否则返回false。bool write_max(T *a, T b)
:如果b比a指向的值更大,那么将a指向的值赋为b并返回true,否则返回false。void write_add(T *a, T b)
:将b的值加到a指向的值上。void write_sub(T *a, T b)
:将a指向的值减去b的值。
4. 点集合类ParallelBitset
在使用TuGraph进行批处理操作时,需要使用点集合来表示需要处理的点。ParallelBitset实现了点集合类,以bit为单位表示点,因此能够节省大量内存。对应的代码见lgraph文件夹下的olap_base.h文件。
4.1 ParallelBitset类成员
size_t Size()
:表示Bitmap中的点个数。ParallelBitset(size_t size)
:初始化size和data,data长度为(size >> 6)+1void Clear()
:清空集合void Fill()
:将所有点加入集合bool Has(size_t i)
:检查点i是否在集合中bool Add(size_t i)
:将点i加入集合中void Swap(ParallelBitset &other)
:和另一组ParallelBitset集合交换元素
5. 点数组类ParallelVector
在使用TuGraph进行批处理操作时,需要使用点数组来表示对点的处理结果。ParallelVector实现了点数组类。对应的代码见lgraph文件夹下的olap_base.h文件。
5.1 ParallelVector类成员
ParallelVector(size_t capacity)
构建ParallelVector,capacity为点数组的初始容量大小T &operator[](size_t i)
:下标为i的数据T *begin()
:ParallelVector的起始指针T *end()
:ParallelVector的结束指针。begin和end的用法类似于vector容器的begin和end指针,可以使用这两个指针对数组进行顺序访问T &Back()
:ParallelVector最后一个数据T *Data()
:表示数组本身数据void Destroy()
:清空ParallelVector数组内数据并删除数组size_t Size()
:表示ParallelVector中的数据个数size_t Capacity()
:表示ParallelVector的容量大小void Resize(size_t size)
:更改ParallelVector为size大小,该size应大于等于更改前的大小且小于capacityvoid Clear()
:清空ParallelVector内数据void ReAlloc(size_t capacity)
:给ParallelVector分配新的容量大小,若数组有数据则将数据迁移至新内存void Fill(T elem)
:为ParallelVector的全部数据赋值为elemvoid Append(const T &elem, bool atomic = true)
:向ParallelVector结尾添加一个数据void Swap(ParallelVector<T> &other)
:和其他的ParallelVector交换数据ParallelVector<T> Copy()
:复制当前的ParallelVector数据存至Copy数组中