暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GBase 8s JDBC读写分离

wj2021 2021-02-22
894

JDBC读写分离功能是产品的JDBC中扩展的一项功能,主要是为实现8s数据库产品在集群部署时读写分离功能,使主从服务器得到充分利用。在主节点性能瓶颈前提下,读写分离性能高于非读写分离,并且随着从节点扩展,读写分离的查询性能有线性提升。

数据流 说明
SQL请求1 此处为应用系统要通过JDBC发送给数据库的所有SQL语句
SQL请求2 此处为经过JDBC读写分离功能处理后的SQL请求
SQL请求3 此处为经过JDBC读写分离功能处理后的SQL请求
SELECT请求 此处为经过JDBC读写分离功能处理后的以“SELECT”开头的SQL请求
非SELECT请求 此处为经过JDBC读写分离功能处理后的以非“SELECT”开头的SQL请求

JDBC读写分离功能部署过程:
1.首先部署带读写分离功能的JDBC
应用端替换带读写分离功能的JDBC,比如gbasedbtjdbc_3.2.0_2_[HashId].jar。
2.配置CM文件
其次配置集群服务器,并将集群配置文件sqlhosts.cm文件添加到应用端。配置内容为CM读写服务器地址。
比如增加sqlhosts.cm文件,文件内容如下:
db_group group - - i=10,c=1
perf178 onsoctcp 172.16.2.178 16000 g=db_group
perf178 onsoctcp 172.16.2.178 16000 g=db_group

cm_update group - - i=12,c=0
w_perf178 onsoctcp 172.16.2.178 18888 g=cm_update
w_perf123 onsoctcp 172.16.3.123 18888 g=cm_update

cm_read group - - i=13,c=0
r_perf178 onsoctcp 172.16.2.178 18888 g=cm_read
r_perf123 onsoctcp 172.16.3.123 18888 g=cm_read
3.配置从服务器地址
用解压软件打开驱动程序gbasedbtjdbc_3.2.0_2_[HashId].jar,在jar包根路径下存在rws.properties文件。修改rws.properties文件中jdbcUrl字段内容,将jdbcUrl指向CM服务器从服务器地址。
按照2的配置,修改如下:
jdbcUrl=jdbc:gbasedbt-sqli:/testdb:gbasedbtserver=cm_read;SQLH_TYPE=FILE;SQLH_FILE=C:/jdbc_rws/hdr/sqlhosts.cm;DB_LOCALE=zh_cn.GB18030-2000;CLIENT_LOCALE=zh_cn.GB18030-2000;
其中gbasedbtserver指向CM配置读端服务器,修改完成后,将rws.properties文件放置到gbasedbtjdbc_3.2.0_2_[HashId].jar根路径下。
4.配置应用连接参数
应用端jdbc连接串信息设置如下:
jdbc:gbasedbt-sqli:/testdb:gbasedbtserver=cm_update;SQLH_TYPE=FILE;SQLH_FILE=C:/jdbc_rws/hdr/sqlhosts.cm;rws=true;DB_LOCALE=zh_cn.GB18030-2000;CLIENT_LOCALE=zh_cn.GB18030-2000;
其中gbasedbtserver指向CM配置写端服务器,设置读写分离标志rws,配置rws=true表示启动读写分离功能。rws=false不启动读写分离功能,默认值为false。
经过以上四个步骤,完成JDBC读写分离功能配置。用户端执行sql语句将按照读写分离的原则,将从不同的服务器执行读写操作。
执行用例验证读写分离:
String url= jdbc:gbasedbt-sqli:/testdb:gbasedbtserver=cm_update;SQLH_TYPE=FILE;SQLH_FILE=C:/jdbc_rws/hdr/sqlhosts.cm;rws=true;DB_LOCALE=zh_cn.GB18030-2000;CLIENT_LOCALE=zh_cn.GB18030-2000;
Connection con=null;
try{
conn=DriverManager.getConnection(url);
}catch(SQLException e){
e.printStackTrace();
}
String sql_update=“insert into tb1 values(10,10);”;
String sql=“select * from tb1;”;
Statement stmt=conn.createStatement();
stmt.execute(sql_update);
ResultSet rs=stmt.executeQuery(sql);
rs.close();
stmt.close();
conn .close();
rws=1, sql_update执行,写入主服务器数据。
rws=1,sql执行,从从服务器上获取数据。
rws.properties文件说明:
driverClassName=com.gbasedbt.jdbc.Driver//驱动主类
jdbcUrl= jdbc:gbasedbt-sqli:/testdb:gbasedbtserver=cm_read;SQLH_TYPE=FILE;SQLH_FILE=C:/jdbc_rws/hdr/sqlhosts.cm;DB_LOCALE=zh_cn.GB18030-2000;CLIENT_LOCALE=zh_cn.GB18030-2000;//从服务器url
username=gbasedbt//从服务器用户名
password=11111111//从服务器用户密码
maximumPoolSize=100//池中最大连接数,包括闲置和使用中的连接
minmumIdle=100//池中维护的最小空闲连接数
connectionTestQuery=select 1 from dual;//连接池测试查询语句
idleTimeout=180000//连接允许在池中闲置的最长时间
connectionTimeout=180000//等待来自池的连接的最大毫秒数
validationTimeout=3000//连接将被测试活动的最大时间量
maxLifetime=180000//池中连接最长生命周期
rws数据源连接池采用的是HikariCP连接池,除了driverClassName、jdbcUrl、username、password参数外,其余参数均为连接池参数。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论