网站建设资讯

NEWS

网站建设资讯

包含postgresql并行的词条

POSTGRESQL双机集群+磁盘阵列柜方案

1、如果用ROSE之类的双机系统做双机冗余,涉及到的进程监视点调试极其麻烦,不是资深的原厂认证工程师根本就搞不定,对于可靠性上来说倒是绝对满足没有问题,但可维护性来说实在是件要命的事。

网站建设哪家好,找创新互联!专注于网页设计、网站建设、微信开发、小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了金华免费建站欢迎大家使用!

2、你可以考虑用VMWARE ESX做双机集群,然后把POSTGRESQL的WIN2K3虚拟机放在双机集群上,做虚拟机进程的动态漂移,这根本就不需要去针对进程监视做那一大堆的调试,当集群里一台服务器DOWN掉的时候,而且还要恰好你的应用虚拟机进程现在就跑在DOWN掉的这台上,那么在1秒内会动态漂到另一台并行的服务器上,几乎是无缝的,但在管理机的VSPHARE上可以实时看到,我认为这个方案比传统双机要好得多,而且ESX也不贵,调试比双机冗余来得简单,网上还有大堆的破解。

postgresql是什么数据库?请详解一下,谢谢

PostgreSQL 是一种非常复杂的对象-关系型数据库管理系统(ORDBMS), 也是目前功能最强大,特性最丰富和最复杂的自由软件数据库系统。有些特性甚至连商业数据库都不具备。这个起源于伯克利(BSD)的数据库研究计划目前已经衍生成一项国际开发项目, 并且有非常广泛的用户。

PostgreSQL 可以说是最富特色的自由数据库管理系统,甚至我们也可以说是最强大的自由软件数据库管理系统。事实上, PostgreSQL 的特性覆盖了 SQL-2/SQL-92 和 SQL-3/SQL-99,首先,它包括了可以说是目前世界上最丰富的数据类型的支持,其中有些数据类型可以说连商业数据库都不具备, 比如 IP 类型和几何类型等;其次,PostgreSQL 是全功能的自由软件数据库,很长时间以来,PostgreSQL 是唯一支持事务、子查询、多版本并行控制系统、数据完整性检查等特性的唯一的一种自由软件的数据库管理系统。直到最近才有 Inprise 的 InterBase 以及 SAP 等厂商将其原先专有软件开放为自由软件之后才打破了这个唯一。

pg14什么时候出

2021年5月20日。Postgrespro是俄罗斯著名的数据库公司,旗下主要产品基于PostgreSQL。近期发布了一本新书PostgreSQL 14 Internals。postgresql 14 正式版,pg14在2021年5月20日正式发布。postgresql 14 增加了许多并行查询功能,还增加了使用FDW查询远程数据库时的并行执行功能。

postgreSQL数据库有什么用啊?

优点事实上, PostgreSQL 的特性覆盖了 SQL-2/SQL-92 和 SQL-3/SQL-99,首先,它包括了可以说是目前世界上最丰富的数据类型的支持,其中有些数据类型可以说连商业数据库都不具备, 比如 IP 类型和几何类型等;其次,PostgreSQL 是全功能的自由软件数据库,很长时间以来,PostgreSQL 是唯一支持事务、子查询、多版本并行控制系统、数据完整性检查等特性的唯一的一种自由软件的数据库管理系统。直到最近才有 Inprise 的 InterBase 以及 SAP 等厂商将其原先专有软件开放为自由软件之后才打破了这个唯一。最后,PostgreSQL拥有一支非常活跃的开发队伍,而且在许多黑客的努力下,PostgreSQL 的质量日益提高。

从技术角度来讲,PostgreSQL 采用的是比较经典的 C/S (client/server)结构,也就是一个客户端对应一个服务器端守护进程的模式,这个守护进程分析客户端来的查询请求,生成规划树,进行数据检索并最终把结果格式化输出后返回给客户端。为了便于客户端的程序的编写,由数据库服务器提供了统一的客户端 C 接口。而不同的客户端接口都是源自这个 C 接口,比如 ODBC,JDBC,Python,Perl ,Tcl,C/C++,ESQL 等, 同时也要指出的是,PostgreSQL 对接口的支持也是非常丰富的,几乎支持所有类型的数据库客户端接口。这一点也可以说是 PostgreSQL 一大优点。

缺点

从 Postgres 开始,PostgreSQL 就经受了多次变化。

首先,早期的 PostgreSQL 继承了几乎所有 Ingres, Postgres, Postgres95 的问题:过于学院味,因为首先它的目的是数据库研究,因此不论在稳定性, 性能还是使用方便方面,长期以来一直没有得到重视,直到 PostgreSQL 项目开始以后,情况才越来越好,目前,PostgreSQL 已经完全可以胜任任何中上规模范围内的应用范围的业务。目前有报道的生产数据库的大小已经有 TB 级的数据量,已经逼近 32 位计算的极限。不过学院味也给 PostgreSQL 带来一个意想不到的好处:大概因为各大学的软硬件环境差异太大的缘故,它是目前支持平台最多的数据库管理系统的一种,所支持的平台多达十几种,包括不同的系统,不同的硬件体系。至今,它仍然保持着支持平台最多的数据库管理系统的称号。

其次,PostgreSQL 的确还欠缺一些比较高端的数据库管理系统需要的特性,比如数据库集群,更优良的管理工具和更加自动化的系统优化功能 等提高数据库性能的机制等。

greenplum和postgresql之间是什么关系

green plum是MPP数据库的一种,是一种分布式数据库,支持SQL和MapReduce的并行处理功能,并能以较低的成本向管理最大PB量级数据的企业提供业界领先的性能;

PostgreSQL 是一个自由的对象-关系数据库服务器(数据库管理系统),它在灵活的 BSD-风格许可证下发行。

PostgreSQL可以用于C/S(客户/服务器)环境。greenplum数据库支持postgresql。

如何用 sysbench 并行装载 PostgreSQL 测试数据

sysbench原来自带的lua数据装载脚本是使用以下方式串行装载的,速度比较慢(比单条insert快,但是比COPY慢)。

insert into table1 values (),(),()....

insert into table2 values (),(),()....

...

insert into tablen values (),(),()....

使用prepare导入数据的用法举例

./sysbench_pg --test=lua/oltp.lua --db-driver=pgsql --pgsql-host=127.0.0.1 --pgsql-port=1921 --pgsql-user=postgres --pgsql-password=postgres --pgsql-db=postgres --oltp-tables-count=64 --oltp-table-size=1000000 --num-threads=64 prepare

prepare 表示装载数据,但是它串行的。

sysbench0.5中可以在命令行中指定测试时启动的并行线程数,这个测试过程是使用run命令,而且是多线程并发的,所以我们可以使用sysbench的run命令来造数据,而不再使用其提供的prepare命令的方法来造数据。run命令会根据命令行参数--num-threads来指定并发线程数的多少。

在sysbench中自定义的lua脚本中要求实现以下几个函数:

function thread_init(thread_id): 此函数在线程创建后只被执行一次

function event(thread_id): 每执行一次就会被调用一次。

由上可以知道,本次造数据的脚本我们只需要实现thread_init()函数就可以了。

生成测试数据的脚本沿用老唐提供的代码:

#include stdio.h

#include stdlib.h

#include time.h

#include stdint.h

#include sys/time.h

uint64_t my_rand(struct random_data * r1, struct random_data * r2)

{

uint64_t rand_max = 100000000000LL;

uint64_t result;

uint32_t u1, u2;

random_r(r1, u1);

random_r(r2, u2);

result = (int64_t)u1 * (int64_t)u2;

result = result % rand_max;

return result;

}

int main(int argc, char *argv[])

{

struct timeval tpstart;

struct random_data r1, r2;

int i;

int r;

int max_value;

char rand_state1[128];

char rand_state2[128];

if (argc !=2)

{

printf("Usage: %s rownums\n", argv[0]);

return 1;

}

max_value = atoi(argv[1]);

gettimeofday(tpstart,NULL);

initstate_r(tpstart.tv_usec,rand_state1,sizeof(rand_state1),r1);

srandom_r(tpstart.tv_usec, r1);

gettimeofday(tpstart,NULL);

initstate_r(tpstart.tv_usec,rand_state2,sizeof(rand_state1),r2);

srandom_r(tpstart.tv_usec, r2);

for (i=1; imax_value+1; i++)

{

r = my_rand(r1, r2) % max_value;

printf("%d,%d,%011llu-%011llu-%011llu-%011llu-%011llu-%011llu-%011llu-%011llu-%011llu-%011llu,%011llu-%011llu-%011llu-%011llu-%011llu\n",

i,

r,

my_rand(r1, r2),

my_rand(r1, r2),

my_rand(r1, r2),

my_rand(r1, r2),

my_rand(r1, r2),

my_rand(r1, r2),

my_rand(r1, r2),

my_rand(r1, r2),

my_rand(r1, r2),

my_rand(r1, r2),

my_rand(r1, r2),

my_rand(r1, r2),

my_rand(r1, r2),

my_rand(r1, r2),

my_rand(r1, r2)

);

}

return 0;

}

编译此C语言程序的方法如下:

gcc gendata.c -o gendata

新建一个copy.lua的脚本,内容如下

调用 common.lua中的 set_vars() 继承来自 common.lua 的全局变量。

函数 copydata(table_id) : 创建表,创建管道,将管道数据传输到psql -c "copy ..."客户端的方式导入数据。

函数 create_index(table_id) : 创建索引,调整SEQUENCE next val。

注意咯, oltp_tables_count 必须是 num_threads 的倍数,在 thread_init 中, 以num_threads 为步调,以thread_id+1为起始值,设置i的值,并调用copydata(table_id)和create_index(table_id)。

$ vi lua/copy.lua

pathtest = string.match(test, "(.*/)") or ""

dofile(pathtest .. "common.lua")

function copydata(table_id)

local query

query = [[

CREATE UNLOGGED TABLE sbtest]] .. table_id .. [[ (

id SERIAL NOT NULL,

k INTEGER,

c CHAR(120) DEFAULT '' NOT NULL,

pad CHAR(60) DEFAULT '' NOT NULL,

PRIMARY KEY (id)

) ]]

db_query(query)

os.execute ('export PGPASSWORD=' .. pgsql_password)

os.execute ('rm -f sbtest' .. table_id .. '.dat')

os.execute ('mknod sbtest' .. table_id .. '.dat p')

os.execute ('./gendata ' .. oltp_table_size .. ' sbtest'..table_id ..'.dat ')

os.execute ('cat sbtest' .. table_id .. '.dat | psql -h ' .. pgsql_host .. ' -p ' .. pgsql_port .. ' -U ' .. pgsql_user .. ' -d ' .. pgsql_db .. ' -c "copy sbtest' .. table_id .. ' from stdin with csv"')

os.execute ('rm -f sbtest' .. table_id .. '.dat')

end

function create_index(table_id)

db_query("select setval('sbtest" .. table_id .. "_id_seq', " .. (oltp_table_size+1) .. ")" )

db_query("CREATE INDEX k_" .. table_id .. " on sbtest" .. table_id .. "(k)")

end

function thread_init(thread_id)

set_vars()

print("thread prepare"..thread_id)

for i=thread_id+1, oltp_tables_count, num_threads do

copydata(i)

create_index(i)

end

end

function event(thread_id)

os.exit()

end

用法,必须把psql放到路径中,因为lua中需要用到psql命令

export PATH=/home/digoal/pgsql9.5/bin:$PATH

生成数据,速度比以前快多了

./sysbench_pg --test=lua/copy.lua \

--db-driver=pgsql \

--pgsql-host=127.0.0.1 \

--pgsql-port=1921 \

--pgsql-user=postgres \

--pgsql-password=postgres \

--pgsql-db=postgres \

--oltp-tables-count=64 \

--oltp-table-size=1000000 \

--num-threads=64 \

run

清除数据, drop table

./sysbench_pg --test=lua/copy.lua \

--db-driver=pgsql \

--pgsql-host=127.0.0.1 \

--pgsql-port=1921 \

--pgsql-user=postgres \

--pgsql-password=postgres \

--pgsql-db=postgres \

--oltp-tables-count=64 \

--oltp-table-size=1000000 \

--num-threads=64 \

cleanup

lua全局变量代码:

sysbench/scripting/lua/src/lua.h:#define lua_register(L,n,f) (lua_pushcfunction(L, (f)), lua_setglobal(L, (n)))

sysbench/scripting/lua/src/lua.h:#define lua_setglobal(L,s) lua_setfield(L, LUA_GLOBALSINDEX, (s))

sysbench/scripting/lua/src/lbaselib.c: lua_setglobal(L, "_G");

sysbench/scripting/lua/src/lbaselib.c: lua_setglobal(L, "_VERSION"); /* set global _VERSION */

sysbench/scripting/lua/src/lbaselib.c: lua_setglobal(L, "newproxy"); /* set global `newproxy' */

sysbench/scripting/script_lua.c: lua_setglobal(state, opt-name);

sysbench/scripting/script_lua.c: lua_setglobal(state, "sb_rand");

sysbench/scripting/script_lua.c: lua_setglobal(state, "sb_rand_uniq");

sysbench/scripting/script_lua.c: lua_setglobal(state, "sb_rnd");

sysbench/scripting/script_lua.c: lua_setglobal(state, "sb_rand_str");

sysbench/scripting/script_lua.c: lua_setglobal(state, "sb_rand_uniform");

sysbench/scripting/script_lua.c: lua_setglobal(state, "sb_rand_gaussian");

sysbench/scripting/script_lua.c: lua_setglobal(state, "sb_rand_special");

sysbench/scripting/script_lua.c: lua_setglobal(state, "db_connect");

sysbench/scripting/script_lua.c: lua_setglobal(state, "db_disconnect");

sysbench/scripting/script_lua.c: lua_setglobal(state, "db_query");

sysbench/scripting/script_lua.c: lua_setglobal(state, "db_bulk_insert_init");

sysbench/scripting/script_lua.c: lua_setglobal(state, "db_bulk_insert_next");

sysbench/scripting/script_lua.c: lua_setglobal(state, "db_bulk_insert_done");

sysbench/scripting/script_lua.c: lua_setglobal(state, "db_prepare");

sysbench/scripting/script_lua.c: lua_setglobal(state, "db_bind_param");

sysbench/scripting/script_lua.c: lua_setglobal(state, "db_bind_result");

sysbench/scripting/script_lua.c: lua_setglobal(state, "db_execute");

sysbench/scripting/script_lua.c: lua_setglobal(state, "db_close");

sysbench/scripting/script_lua.c: lua_setglobal(state, "db_store_results");

sysbench/scripting/script_lua.c: lua_setglobal(state, "db_free_results");

sysbench/scripting/script_lua.c: lua_setglobal(state, "DB_ERROR_NONE");

sysbench/scripting/script_lua.c: lua_setglobal(state, "DB_ERROR_DEADLOCK");

sysbench/scripting/script_lua.c: lua_setglobal(state, "DB_ERROR_FAILED");

sysbench/scripting/script_lua.c: lua_setglobal(L, "db_driver");

传入参数,可以把sysbench_pg的参数-替换成_在lua脚本中使用这些变量,例子

--pgsql-host=127.0.0.1 - 对应lua中的变量名 pgsql_host

--pgsql-port=1921 - 对应lua中的变量名 pgsql_port

--pgsql-user=postgres - 对应lua中的变量名 pgsql_user

--pgsql-password=postgres - 对应lua中的变量名 pgsql_password

--pgsql-db=postgres - 对应lua中的变量名 pgsql_db

--oltp-tables-count=64 - 对应lua中的变量名 oltp_tables_count

--oltp-table-size=1000000 - 对应lua中的变量名 oltp_table_size

--num-threads=64 - 对应lua中的变量名 num_threads


名称栏目:包含postgresql并行的词条
标题路径:http://cdweb.net/article/dschcod.html