前两天国产的时序数据库TDengine开源了。为了测试其写入和读取性能,笔者特意写了这篇文章,方便读者们能跟我一块探究下这号称比Hadoop快10倍的国产开源数据库到底有什么样的特性。为了统一测试环境,笔者特意用docker在一台4核8G的服务器上进行了TDengine性能的初步测试。
笔者参考docker的社区版安装文档在服务器上安装了docker。需要提示的一点是,如果登录用户名不是 root,那么每次执行 docker 命令必须要添加 sudo 命令,非常麻烦。这一点可以通过将登录用户加入到 docker 群组,然后登出服务器并重新登录服务器来解决。如果登出后重新登录服务器没有起作用,可以考虑重启服务器。
sudo usermod -aG docker
安装 docker 成功后,下载 centos 镜像的image:
docker image pull centos
从TDengine的github主页下载源码:
git clone [email protected]:taosdata/TDengine.git
cd TDengine
由于目前TDengine没有官方的docker镜像,因此笔者根据源码自己编译并创建了docker镜像,其步骤如下:
# Compile image
FROM centos as compile
WORKDIR /root
COPY src/ ./src/
COPY deps/ ./deps/
COPY packaging/ ./packaging/
COPY CMakeLists.txt ./
RUN yum update -y
RUN yum group install -y "Development Tools"
Run yum install -y cmake
WORKDIR /root/build
RUN cmake .. && cmake --build .
CMD ["bash"]
# Final image
FROM centos
WORKDIR /root
COPY --from=compile /root/build/build/bin /usr/bin/
COPY --from=compile /root/build/build/lib/libtaos.so /usr/lib/
COPY packaging/cfg/taos.cfg /etc/taos/
RUN echo "charset UTF-8" >> /etc/taos/taos.cfg
ENV LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/lib"
ENV LC_CTYPE="en_US.UTF-8"
CMD ["taosd"]
docker build -t tdtest .
由于笔者直接安装了很多开发组件,所以第一次创建镜像时间有些长。
docker volume create td_log_vol
docker volume create td_data_vol
docker run -itd --name tdtest_run -v td_log_vol:/var/log/taos -v td_data_vol:/var/lib/taos tdtest
# 用shell访问容器
docker exec -it tdtest_run bash
# 运行taos终端客户端
taos
如果shell连接成功,则服务启动成功。
笔者自己写了一个TDengine的测试程序包,读者可自行通过链接下载。下载成功后,在host机器上将测试包拷贝进容器中:
docker cp test.tar.gz tdtest_run:/root
在容器的shell中解压测试包:
# 用shell访问容器
docker exec -it tdtest_run bash
cd /root
tar -zxvf test.tar.gz
cd test
如果读者不想深究代码及其配置,只需运行如下命令即可向TDengine中写入数据:
./test.sh -F config/config.sh -f config/tdengine.sh
该测试程序会自动编译并运行。默认创建10万张表,每张表10000条数据,用多线程批写入。运行直到写入完成。在笔者4核8G的服务器上运行结果如下:
在TDengine的终端客户端里进行些简单的查询:
# 用shell访问容器
docker exec -it tdtest_run bash
# 启动taos客户端
taos
统计超级表中数据记录的总数目:
select count(*) from meterinfo.meters;
按照loc标签分组:
select count(*) from meterinfo.meters group by loc;
测试程序是通过config/config.sh来配置数据规模和数据类型的。其中包含的配置项有:
测试包通过配置config/tdengine.sh来配置有关TDengine的配置项。其中包含:
读者可以通过修改这些配置参数。
通过简单的测试,TDengine的在笔者的测试场景下写入速度极佳,简单的查询速度也不错。至于其他测试场景下的性能,需要读者们继续研究。