CitusDB是一个基于最新PostgreSQL(以下简称PG)构建的分布式数据库。它是一个PostgreSQL的扩展。它可对PG数据库进行伸缩以适应大数据的处理;可在集群中进行自动分片和碎片复制,运行在云端或者混合系统中。在使用过程中,它就像一个单一节点的PostgreSQL服务,对应用来说是透明的,因此,使用它在集群中可以轻松的添加节点。进行查询工作时,它可将查询分布到集群中的每个节点,可用于快速处理查询以及并行处理。
为了学习使用Citus,搭建如图1所示的分布式数据库测试环境,PC环境如表1所示。

同时在131与132服务器中新建TestDB数据库,分别建表github_events_single与github_events_double两张表,用于存储a与2a条数据。分布式数据库存储2a条数据。
接着,根据以下步骤搭建环境:
1.    安装citus扩展
分别在PC1与PC2上安装Citus扩展,键入以下命令:
# add postgresql-9.5-citus pgdg repository
echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" | sudo tee -a /etc/apt/sources.list.d/pgdg.list
sudo apt-get install wget ca-certificates
wget --quiet --no-check-certificate -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
# install the server and initialize db
sudo apt-get -y install postgresql-9.5-citus
2.    配置worker2节点
在该节点上需要使用以下命令进行配置:
1)    切换至postgres用户下:sudo su – postgres
2)    设置环境变量:export PATH=$PATH:/usr/lib/postgresql/9.5/bin
3)    建文件夹并initdb:
cd ~
mkdir –p citus/worker2
initdb –D citus/worker2
4)    修改相应的配置文件
修改postgresql.conf文件:
echo "shared_preload_libraries = 'citus'" >> citus/worker2/postgresql.conf
echo "listen_addresses = '*'" >> citus/worker2/postgresql.conf
修改pg_hba.conf文件:
sudo vi citus/worker2/pg_hba.conf
新增:host    all        all        0.0.0.0/0        trust
(根据实际情况设置ip及掩码)
5)    建库
由于citus无法在worker node建库,所以要手工建库。
Postgres用户下:psql –p 5433
create database DisCitusDB;
\l //查看到刚才建立的数据库
\c DisCitusDB; //连接到DisCitusDB数据库
create extension citus;
6)    启数据库
pg_ctl -D citus/worker2 -o "-p 5433" -l worker_logfile start
3.    配置worker1节点
在该节点上需要使用以下命令进行配置:
1)    切换至postgres用户下:sudo su – postgres
2)    设置环境变量:export PATH=$PATH:/usr/lib/postgresql/9.5/bin
3)    建文件夹并initdb:
cd ~
mkdir –p citus/worker1
initdb –D citus/worker1
4)    修改相应的配置文件
修改postgresql.conf文件:
echo "shared_preload_libraries = 'citus'" >> citus/worker1/postgresql.conf
echo "listen_addresses = '*'" >> citus/worker1/postgresql.conf
修改pg_hba.conf文件:
sudo vi citus/worker1/pg_hba.conf
新增:host    all        all        0.0.0.0/0        trust
(根据实际情况设置ip及掩码)
5)    建库
由于citus无法在worker node建库,所以要手工建库。
Postgres用户下:psql –p 9800
create database DisCitusDB;
\l //查看到刚才建立的数据库
\c DisCitusDB; //连接到DisCitusDB数据库
create extension citus;
6)    启数据库
pg_ctl -D citus/worker1 -o "-p 9800" -l worker_logfile start
4.    配置Master节点
在该节点上需要使用以下命令进行配置:
1)    切换至postgres用户下:sudo su – postgres
2)    设置环境变量:export PATH=$PATH:/usr/lib/postgresql/9.5/bin
3)    建文件夹并initdb:
cd ~
mkdir –p citus/master
initdb –D citus/ master
4)    修改相应的配置文件
修改postgresql.conf文件:
echo "shared_preload_libraries = 'citus'" >> citus/ master /postgresql.conf
echo "listen_addresses = '*'" >> citus/ master /postgresql.conf
修改pg_hba.conf文件:
sudo vi citus/ master/pg_hba.conf
新增:host    all        all        0.0.0.0/0        trust
(根据实际情况设置ip及掩码)
5)    告诉master,worker node有哪些
echo "172.20.149.131 9800" >> citus/master/pg_worker_list.conf
echo "172.20.149.132 5433" >> citus/master/pg_worker_list.conf
6)    重启服务
sudo service postgresql reload
7)    验证master节点是否获取到子节点的信息
psql -p 5433 -c "select * from master_get_active_worker_nodes();"
8)    建库
由于citus无法在worker node建库,所以要手工建库。
Postgres用户下:psql
create database DisCitusDB;
\l //查看到刚才建立的数据库
\c DisCitusDB; //连接到DisCitusDB数据库
create extension citus;
9)    建表
--分布式表,存放2a条数据
CREATE TABLE github_events_hash
(
    event_id bigint, 
    created_at timestamp
);
接下来,使用函数master_create_distributed_table()声明数据库表。
SELECT master_create_distributed_table('github_events_hash’, event_id ', 'hash');//第一个参数是表名,第二个参数是Distribution column,第三个参数说明这张表的使用的是哪种distributed方法。
SELECT master_create_worker_shards('github_events_hash’, 2, 1);
--非分布式表,存放a条数据
CREATE TABLE github_events_single
(
    event_id bigint, 
    created_at timestamp
);
--非分布式表,存放2a条数据
CREATE TABLE github_events_double
(
    event_id bigint, 
    created_at timestamp
);
10)    测试数据插入
CREATE OR REPLACE FUNCTION public.insert_testdata_to_single()
  RETURNS void AS
$BODY$
    declare
        sql varchar;
        str varchar;
        num int;
    begin
        str='';
        num=0;
        INSERT INTO insert_operate_log(StartTime,EndTime,OperateSQL) VALUES((select clock_timestamp()),(select clock_timestamp()),'insert_testdata_ single ()');
        insert into github_events_single select generate_series(1,10000000),clock_timestamp();     
        INSERT INTO insert_operate_log(StartTime,EndTime,OperateSQL) VALUES((select clock_timestamp()),(select clock_timestamp()),'insert_testdata_ single()');
    end
    $BODY$
  LANGUAGE plpgsql ;
CREATE OR REPLACE FUNCTION public.insert_testdata_to_double()
  RETURNS void AS
$BODY$
    declare
        sql varchar;
        str varchar;
        num int;
    begin
        str='';
        num=0;
        INSERT INTO insert_operate_log(StartTime,EndTime,OperateSQL) VALUES((select clock_timestamp()),(select clock_timestamp()),'insert_testdata_double()');
        insert into github_events_double select generate_series(1,20000000),clock_timestamp();     
        INSERT INTO insert_operate_log(StartTime,EndTime,OperateSQL) VALUES((select clock_timestamp()),(select clock_timestamp()),'insert_testdata_double()');
    end
    $BODY$
  LANGUAGE plpgsql ;

CREATE OR REPLACE FUNCTION public.insert_testdata_2kw()
  RETURNS void AS
$BODY$
    declare
        sql varchar;
        str varchar;
        num bigint;
    begin
        str='';
        num=0;
        INSERT INTO insert_operate_log(StartTime,EndTime,OperateSQL) VALUES((select clock_timestamp()),(select clock_timestamp()),'insert_testdata_2kw()');
        for num in 10000000..30000000 loop            
            sql= 'insert into github_events_hash values('|| num || ',''2016-1-1'');';            
            execute sql;
        end loop;          
        INSERT INTO insert_operate_log(StartTime,EndTime,OperateSQL) 
                VALUES((select clock_timestamp()),(select clock_timestamp()),'insert_testdata_2kw()');
    end
    $BODY$
  LANGUAGE plpgsql;
到此为止,已经配置master与worker节点的数据。
5.    CRUD测试结果
1)    测试方法
采用对比方法。测试分布式表2a条数据、单表a条数据、单表2a条数据(a为正整数)在原有不同数量等级前提下,分别查询同一数量等级数据的结果响应时间平均值。
2)    测试结果

6.    总结
从上述CRUD测试结果得出以下结论:
①查询结论:在相同配置的机器前提下,无索引的三张测试表中,分布式数据库查询速度最快,而建立索引之后结果则相反,猜想原因是分布式数据库数据查找时需要判断数据所在的节点,而单机数据表不需要进行此项判断。
②插入结论:单机数据库的数据单条插入时间少于分布式数据库,猜想原因是分布式数据库数据插入时需要判断数据插入至哪个worker节点的数据库,而在单机数据库时不需要进行此项判断,故单机数据库数据入库时间少于分布式数据库。
③更新&&删除结论:分布式数据库单条更新与删除耗时小于单机数据库相应单条数据操作耗时。

Citus安装、配置与测试相关推荐

  1. 【Ubuntu-Opencv】Ubuntu14.04 Opencv3.3.0 安装配置及测试

    Ubuntu14.04 Opencv3.3.0 安装配置及测试 网上有许多的Opencv的安装方法,不过找到一个适合自己的安装路数才最为重要,笔者整理了一下自己的安装配置测试过程,仅供学习参考. ## ...

  2. NodeJS、NPM安装配置与测试步骤(windows版本)

    1.windows下的NodeJS安装是比较方便的(v0.6.0版本之后,支持windows native),只需要登陆官网(http://nodejs.org/),便可以看到首页的"INS ...

  3. django安装配置及测试

    django安装之前我们假设你已经安装了python,和mysql(不是必须的):(如果没有google一下挺简单不介绍了) 下面直接介绍django的安装配置: 到下面连接可以下载www.djang ...

  4. Spark 安装配置简单测试

    简介 Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapReduce ...

  5. idea安装sbt插件linux,【idea】kafkasbt+idea安装配置与测试

    一.IDEA安装 下载Community版的IDEA,Ultimate是免费试用版(相当于用到后面要给钱的) ideaIC-2019.2.3.tar.gz 解压IDEA: tar -zxvf idea ...

  6. MySQL 8.0.31 最新版详细安装教程(下载+安装+配置+登录测试)

    名人说:君子生非异也,善假于物也.--荀子 Code_流苏(CSDN) o(‐^▽^‐)o很高兴你打开了这篇博客,跟着步骤一步步尝试安装吧.✧ 目录 一.下载MySQL 二.安装MySQL 三.配置M ...

  7. 【ZED】从零开始使用ZED相机(一):windows下的安装配置与测试

    引言 笔者通过在一台重装windows系统的笔记本上,从安装开始一步步使用ZED,希望用一系列笔记的方式完成一个比较完善的ZED使用专栏,笔者整理思路的同时,也能给读者一定的参考. 电脑配置说明 目前 ...

  8. puppet安装配置及测试

    #服务端跟客户端均关闭iptables serviceiptables stop chkconfigiptables off #服务端跟客户端均关闭修改selinux sed -i 'SELINUX/ ...

  9. mysql安装与测试,MySQL NDB 安装的安装配置与测试

    九:破坏性测试: 1,关闭其中一个数据节点,验证结果表明,集群工作正常, 以下操作在数据节点2[192.168.133.102]上执行,如下: [root@localhost bin]# ps -ef ...

  10. EMC_AutoStart5.4安装配置之五

    EMC_AutoStart5.4安装配置之五(测试) 转载于:https://blog.51cto.com/angf2/635615

最新文章

  1. 收藏 | 有哪些相见恨晚的科研经验?
  2. protocol buff
  3. php请求aspx,PHP用curl函数POST请求到ASP页面提示无效请求
  4. 【OPENGL】第三篇 着色器基础(一)
  5. P2463-[SDOI2008]Sandy的卡片【SA,二分答案】
  6. 教你如何创建一款属于自己的VSCode主题
  7. 如果你是一位资深的玩机人士,那么你不能错过它——uTools
  8. 去哪儿-12-city-search-logic
  9. 前女友发来加密的 “520快乐.pdf“,我用python破解开之后,却发现。。。
  10. [转自周星星的blog] 解决为什么wcout不能输出中文问题
  11. 程序员面试金典——5.1二进制插入
  12. Exchange Server2010系列之五:再谈邮箱基本管理
  13. win7怎么在计算机找文件夹选项,解决WIN7工具菜单没有文件夹选项/文件夹和搜索选项变灰色...
  14. Node.js meitulu图片批量下载爬虫1.06版
  15. Supervised Sequence Labelling with Recurrent Neural Networks 笔记 -LSTM
  16. java 压制警报_适用于Java开发人员的微服务:监视和警报
  17. 宇宙简史——我们在哪儿
  18. 图床项目之后台框架设计
  19. Web全栈~09.JavaScript入门
  20. 宋词欣赏 -- 李清照词全集

热门文章

  1. Windows进程详解!!(精)
  2. 四国军棋界面开发(2) 让棋子动起来
  3. IDEA热部署插件JRebel使用
  4. C# -- Novell.Directory.Ldap连接LDAP作简单筛选查询,并处理objectGUID的乱码问题
  5. 团队项目用户调查报告
  6. 人岗智能匹配,基于记忆的深度文本匹配技术
  7. 【NOI2006】 千年虫
  8. 大数据量高并发的数据库优化详解(MSSQL)
  9. tiny4412 lcd驱动
  10. linux下三个好用的终端分屏工具