首页 > 数据库 >PostgreSQL citus python环境搭建

PostgreSQL citus python环境搭建

时间:2023-01-04 03:33:54浏览次数:65  
标签:PostgreSQL postgres python 数据库 citus pgsql u01

PostgreSQL citus python环境搭建

 精选 原创

Janeh10182022-01-08 09:19:09博主文章分类:PostgreSQL©著作权

文章标签sqlpostgresql数据库文章分类其它数据库阅读数270

背景

随着大数据技术的发展,我们现在开发的软件系统管理的数据量越来越大,特别是随着软件Saas的发展,各种软件都在向多租户平台发展,而当前大部分程序员是熟悉SQL语言的程序员,或者说只能够在SQL上进行开发,使用NoSQL、NewSQL数据库开发所花费的学习成本也是比较高的,随之,分布式关系型数据库诞生,今天给大家介绍的基于PostgreSQL的citus分布式数据库,就是一种适合Saas化、多租户平台的数据库。 Python语言,作为当前大数据环境下流行的计算机语言,其简单、高效的编程思想,与PostgreSQL的结合也非常紧密,PostgreSQL自身支持PL/Python语言进行数据库编程,所以,我们在使用PostgreSQL数据库开发时特别喜欢使用PL/Python语言进行数据库的存储过程、触发器等编程,尤其时它更容易与机器学习相结合,可以实现在数据库中进行机器学习运算。

Citus简介

citus是PostgreSQL的一个sharding插件,可以把PostgreSQL变成一个分布式数据库。目前在苏宁有大量的生产应用运行在PostgreSQL+citus的环境中。 citus是一款基于PostgreSQL的开源分布式数据库,自动继承了PostgreSQL强大的SQL支持能力和应用生态(不仅仅是客户端协议的兼容还包括服务端扩展和管理工具的完全兼容)。 和其他类似的基于PostgreSQL的分布式方案,比如GreenPlum,PostgreSQL-XL,PostgreSQL-XC相比,citus最大的不同在于citus是一个PostgreSQL扩展而不是一个独立的代码分支。 因此,citus可以用很小的代价和更快的速度紧跟PostgreSQL的版本演进;同时又能最大程度的保证数据库的稳定性和兼容性。 另外,Citus不仅仅可以用于OLAP,也可以用于OLTP,属于 HTAP , 是未来数据库发展的一个方向。 HTAP 既可以处理在线交易事务,又可以处理在线实时分析 。 PL/Python 过程语言 PL/Python 过程语言允许用Python编写 PostgreSQL 函数。 其优势就是简单易用,能够大量简化复杂的计算,同时天然与大数据、机器学习相结合。

环境规划

IP

角色

端口

192.168.0.101

worker

5432

192.168.0.102

worker

5432

192.168.0.103

worker

5432

192.168.0.104

worker

5432

192.168.0.105

worker

5432

192.168.0.100

coordinate

5432

  • coordinate

协调节点,一般称为cn,存储所有元数据,不存实际数据,该节点直接对用户开放,等于一个客户端。

  • worker

工作节点,不存储元数据,存储实际数据。执行协调节点发来的查询请求。一般不直接对用户开放。

操作系统

本例选择Debian 10作为基础操作系统

版本选择

通过查阅官方网站,目前建议选择版本

软件

版本

PostgreSQL

14.1

citus

10.2.3

Python

3.7

环境搭建

1.编译安装PostgreSQL

请到PostgreSQL官方网站下载源码 在规划安装的每台机器上编译安装PostgreSQL

1.1安装依赖库

apt-get install make gcc g++ gdb automake
apt-get install build-essential gdb bison flex zlib1g-dev libreadline-dev

1.2创建用户

groupadd postgres
useradd -g postgres postgres

1.3准备源代码

将源代码上传到服务器/usr/local,并解压缩。

tar zxvf postgresql-14.1.tar.gz
chown postgres postgresql-14.1 -R
mkdir /usr/local/pgsql
chown postgres /usr/local/pgsql

1.4源代码配置、编译、安装

以postgres用户进行操作

su postgres
cd postgresql-14.1
./configure --prefix=/usr/local/pgsql --with-python
make
make install

 

当OS中有多个python版本,需要指定python路径,./configure参数加上PYTHON=/usr/bin/python3 指定python文件

2.初始化数据库并配置集群

在每台机器上以postgres用户进行操作

2.1初始化数据库

以root用户操作

mkdir /u01/pgsql/data -p
chown postgres /u01/pgsql -R

 

以postgres用户操作

su postgres
cd /usr/local/pgsql/bin
./initdb -E UNICODE -D /u01/pgsql/data

 

2.2配置监听地址与端口参数

以postgres用户操作

vi /u01/pgsql/data/postgresql.conf
  • 1.

修改对应参数:

listen_addresses='*'
port=5432
data_directory='/u01/pgsql/data'
hba_file='/u01/pgsql/data/pg_hba.conf'
ident_file='/u01/pgsql/data/pg_ident.conf'

 

2.3配置远程连接

  • cn节点:

以postgres用户操作

vi /u01/pgsql/data/pg_hba.conf
  • 1.

添加一行:

host all all 0.0.0.0/0 password
  • 1.
  • worker节点:

以postgres用户操作

vi /u01/pgsql/data/pg_hba.conf
  • 1.

添加一行:

host all all 192.168.0.0/24 trust
  • 1.

2.4安装citus

在每个节点上将下载的citus源代码上传并解压缩。 以root用户操作:

apt-get install curl
apt-get install libcurl4-openssl-dev
apt-get install liblz4-dev
apt-get install libzstd-dev

以postgres用户操作:

cd citus-10.2.3
export PATH=$PATH:/usr/local/pgsql/bin
./configure
make
make install

2.5集群配置

  1. 在每个节点上以postgres用户执行
echo "shared_preload_libraries = 'citus'" >> /u01/pgsql/data/postgresql.conf
  • 1.
  1. 启动节点

以root用户执行

  • 启动worker节点
su postgres -c "/usr/local/pgsql/bin/pg_ctl -D /u01/pgsql/data -l /u01/pgsql/data/server.log start"
  • 1.
  • 启动cn节点
su postgres -c "/usr/local/pgsql/bin/pg_ctl -D /u01/pgsql/data -l /u01/pgsql/data/server.log start"
  • 1.
  1. 创建数据库

在所有节点以postgres用户执行:

cd /usr/local/pgsql/bin
psql
postgres=#create database 数据库名;
postgres=# \c 数据库名
数据库名=# create extension citus;
  1. 为cn节点修改用户密码

在cn节点上执行

su postgres
cd /usr/local/pgsql/bin
./psql postgres
postgres=# \password postgres
Enter new password:
Enter it again:
postgres=#
  1. 协调节点新增工作节点

以后的管理操作仅仅在协调节点(cn)上操作

psql -d 数据库名
psql
Type "help" for help.
数据库名=#SELECT * from master_add_node('192.160.0.101', 5432);
数据库名=#SELECT * from master_add_node('192.160.0.102', 5432);
数据库名=#SELECT * from master_add_node('192.160.0.103', 5432);
数据库名=#SELECT * from master_add_node('192.160.0.104', 5432);
数据库名=#SELECT * from master_add_node('192.160.0.105', 5432);
  1. 查看工作节点
SELECT * FROM master_get_active_worker_nodes();
  • 1.

3.创建分片表

--创建数据表
create table shiptrack(gid serial primary key,tracktime timestamp without time zone);
--配置分片策略,设置分片数,5个主机,设置分片5,每个主机一张表
set citus.shard_count=5;
--配置副本数
set citus.shard_replication_factor=2;
--将数据表配置为分片表
SELECT create_distributed_table('shiptrack', 'gid', 'hash');
--查看分片分布
SELECT * from pg_dist_shard_placement order by shardid, placementid;

4.配置PL/Python

CREATE EXTENSION plpython3u;
  • 1.

5.编写一个简单的PL/Python函数进行测试

CREATE FUNCTION testpython ()
RETURNS text
AS $$
txt = 'Hello world!'
plpy.info(txt)
return txt
$$ LANGUAGE plpython3u;

标签:PostgreSQL,postgres,python,数据库,citus,pgsql,u01
From: https://www.cnblogs.com/yaoyangding/p/17023832.html

相关文章

  • Python 数据类型详细篇:字符串
    Python基本数据类型中的字符串类型,字符串类型在实际的开发中是一个经常会用到的数据类型,比较重要。下面我们一起来看一下:1.简介字符串类型的数据表示一段文本,使用单引号......
  • postgresql内核开发之Oracle date类型兼容
    postgresql内核开发之Oracledate类型兼容postgresql内核开发 postgresql兼容oracle postgresql 数据库 oracle兼容 开发实战         ORACLE......
  • postgres oracle 兼容,PostgreSQL Oracle 兼容性之 - sys_guid() UUID
    postgresoracle兼容,PostgreSQLOracle兼容性之-sys_guid()UUIDpostgresoracle兼容 背景Oracle使用sys_guid()用来产生UUID值。在PostgreSQL中有类似的......
  • spring整合Mybatis | Postgresql为例
    1.创建配置文件jdbc.propertiesjdbc.url=jdbc:postgresql://localhost:5432/postgis_hy?useSSL=falsejdbc.username=postgresjdbc.password=arcgis2.相关依赖<de......
  • Python转义字符理解
    #Author:符攀飞#Blog:feifeige.top#Date:2023/1/322:09#File:day02.py#转义字符print('hello\nworld')#\n换行print('hello\tworld')#t占四个,hello多......
  • 用Python批量绘制二维矩阵
    importnumpyasnpfrommatplotlibimportpyplotaspltimportmatplotlibasmplimportglobdefcreate_4_colorMap():#colors=['blue','cyan','green','p......
  • 创建python虚拟环境
    安装pipinstallvirtualenvcd到指定目录virtualenv目录名--python==python3.7 ---如何激活python进入scripts目录,执行该文件   ---给虚拟环境安装dj......
  • 转载自ChatGPT:Python关键字 asynico
    同步和异步同步和异步是指程序的执行方式。在同步执行中,程序会按顺序一个接一个地执行任务,直到当前任务完成。而在异步执行中,程序会在等待当前任务完成的同时,执行其他任务......
  • Python常见设置
    pip的相关设置设置镜像为pip设置国内的镜像源可以提高Python库下载的速度,这里推荐使用清华大学的镜像站,使用如下命令配置:python-mpipinstall--upgradepippipconf......
  • postgresql用sql查询表结构
      查询sql如下:SELECTa.attnameASfield,t.typnameAStype,CASEWHENt.typlen=-1THENa.atttypmod-4ELSEt.typlen::integerENDASlengthvar,casea.......