gStore牛刀小试
这次研究的内容是pku的开源图数据库项目gStore ,主要先探索一下部署(包括docker如何快速部署,看看能否推到社区,已推),然后看看集群实测效果如何。
0x00.准备
C++实现,不过看写法应该是采用C的模式,所以可能gcc就可以完全编译运行。后续的补充待我看完文档补上,文档写的很清楚或者我下面有的就不重复列出了 (以下我还没确定)
Item | Requirement | Note |
---|---|---|
boost | version ≥ 1.54 | all-dev版才行? |
0x01.部署
因为依赖包不少,不同系统安装方法也不一样,而且需要make编译,里面既有c/c++又有一点java的api,觉得这种项目应该很适合用docker来跑跑测试?就简单的写了个Dockerfile,测试是可以构建成功的。目前发现缺点是这样的镜像包有2G之大(因为gcc镜像就有1.7G了,自带了很多不必要的东西包括go的环境之类的,希望有人能改进精简版出来)
不管用不用docker,首先你得
git clone https://github.com/Caesar11/gStore.git
把项目down下来。然后修改根目录的makefile文件的
CC = ccache g++
. 其他地方先不改了两种方式构建运行:
Docker方式: (执行
docker build -t gstore:1.0 .
)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20#注:低版本gcc镜像可以省下一些空间,但是性能跟依赖未测试. 后续也可自行精简
FROM gcc:8
COPY . /usr/src/gstore/
WORKDIR /usr/src/gstore
#解决java默认用的ansii编码问题,可选ENV CC="ccache gcc" CXX="ccache g++"? 因为默认配置文件没启勇ccache
ENV LANG C.UTF-8
#文档所说的可选安装库都装了
RUN apt-get update && apt-get install -y --no-install-recommends realpath \
ccache \
openjdk-8-jdk \
libreadline-dev \
libboost-all-dev \
&& rm -rf /var/lib/apt/lists/
#RUN java -version
#容器启动时会自动执行make编译,RUN make现在有些问题。
#后续测试脚本可以在这抽出来?或者添加自己需要的步骤(变动尽量步骤靠后)
CMD ["make"]然后
docker run -it gstore:1.0
进入即可等待编译执行,当然你也可以bash进去自行操作,或做其他事。原生方式:之后在单独虚拟机上补充
export JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8
, 这个添加到~/.bashrc
,避免ansii编码问题
在根目录下直接make,然后就开始构建了。。。
0x02.运行
0x03.测试
0x04.各种报错
1.Docker相关
首先,Dockerfile编写的时候一定要把相对稳定的写前面,特别是耗时长的包括不限于复制大量文件,在线安装各种软件包。
Dockerfile使用缓存的前提是你前面步骤没变,否则哪怕你只是改了一个文件名,它都很可能不会使用缓存而是重新走一遍这个流程(因为命令先后是可能有很致命的影响的)
A.Docker调用命令报错
这个问题非常的棘手,以至于浪费我至少一下午去调试,在shell和Dockerhub的自动构建上错误有所差别,本质都是一样的
最后经过docker system prune -a
全清+一个个控制变量调试,发现很可能是手动设置了环境变量CC=ccache gcc
,导致的。。。