php怎么使用shardingjdbc(php怎么使用sharding jdbc)

本篇文章给大家谈谈php怎么使用shardingjdbc,以及php怎么使用sharding jdbc对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

PHP网站怎么连接到数据库?

常规方式

常规方式就是按部就班的读取文件了。其余的话和上述方案一致。

// 读取配置文件内容

$handle = fopen("filepath", "r");            $content = fread($handle, filesize("filepath"));123

PHP解析XML

上述两种读取文件,其实都是为了PHP解析XML来做准备的。关于PHP解析XML的方式的博客有很多。方式也有很多,像simplexml,XMLReader,DOM啦等等。但是对于比较小型的xml配置文件,simplexml就足够了。

配置文件

?xml version="1.0" encoding="UTF-8" ?mysql

!-- 为防止出现意外,请按照此标准顺序书写.其实也无所谓了 --

hostlocalhost/host

userroot/user

password123456/password

dbtest/db

port3306/port/mysql12345678910

解析

?php/**

* 作为解析XML配置文件必备工具

*/class XMLUtil {

public static $dbconfigpath = "./db.config.xml";    public static function getDBConfiguration() {

$dbconfig = array ();        try {            // 读取配置文件内容

$handle = fopen(self::$dbconfigpath, "r");            $content = fread($handle, filesize(self::$dbconfigpath));            // 获取xml文档根节点,进而获取相关的数据库信息

$mysql = simplexml_load_string($content);            // 将获取到的xml节点信息赋值给关联数组,方便接下来的方法调用

$dbconfig['host'] = $mysql-host;            $dbconfig['user'] = $mysql-user;            $dbconfig['password'] = $mysql-password;            $dbconfig['db'] = $mysql-db;            $dbconfig['port'] = $mysql-port;            // 将配置信息以关联数组的形式返回

return $dbconfig;

} catch ( Exception $e ) {            throw new RuntimeException ( "mark读取数据库配置文件信息出错!/markbr /" );

}        return $dbconfig;

}

}1234567891011121314151617181920212223242526272829

数据库连接池

对于PHP程序而言,优化永无止境。而数据库连接池就在一定程度上起到了优化的作用。其使得对用户的每一个请求而言,无需每次都像数据库申请链接资源。而是通过已存在的数据库连接池中的链接来返回,从时间上,效率上,都是一个大大的提升。

于是,这里简单的模拟了一下数据库连接池的实现。核心在于维护一个“池”。

从池子中取,用毕,归还给池子。

?php/**x

*  PHP中的数据库 工具类设计

*  郭璞

*  2016年12月23日

*

**/class DbHelper {    private $dbconfig;    private $dbpool;    public $poolsize;    public function __construct($poolsize = 20) {        if (! file_exists ( "./utils.php" )) {            throw new RuntimeException ( "markutils.php文件丢失,无法进行配置文件的初始化操作!/markbr /" );

}else {

require './utils.php';

}        // 初始化 配置文件信息

$this-dbconfig = XMLUtil::getDBConfiguration ();        // 准备好数据库连接池“伪队列”

$this-poolsize = $poolsize;

$this-dbpool = array ();        for($index = 1; $index = $this-poolsize; $index ++) {

$conn = mysqli_connect ( $this-dbconfig ['host'], $this-dbconfig ['user'], $this-dbconfig ['password'], $this-dbconfig ['db'] ) or die ( "mark连接数据库失败!/markbr /" );

array_push ( $this-dbpool, $conn );

}

}    /**

* 从数据库连接池中获取一个数据库链接资源

*

* @throws ErrorException

* @return mixed

*/

public function getConn() {        if (count ( $this-dbpool ) = 0) {            throw new ErrorException ( "mark数据库连接池中已无链接资源,请稍后重试!/mark" );

} else {            return array_pop ( $this-dbpool );

}

}    /**

* 将用完的数据库链接资源放回到数据库连接池

*

* @param unknown $conn

* @throws ErrorException

*/

public function release($conn) {        if (count ( $this-dbpool ) = $this-poolsize) {            throw new ErrorException ( "mark数据库连接池已满/markbr /" );

} else {

array_push ( $this-dbpool, $conn );

}

}

}

mybatis-plus 动态数据源读写分离 + shardingJDBC分库分表

项目需要配置读写分离,分库分表,选了shardingJDBC,但是shardingJDBC又许多不支持的sql,综合了一下,选择mybaitis-plus做读写分离,遇到分库分表的时候切换sharding数据源,也就是一般情况下使用的还是jdbc,有分表的时候才会用shardingJDBC

dynamic-datasource-spring-boot-starter采用3.3以上的好像就切不过来数据源,具体没找到原因

配置mybatis-plus读写分离

数据源配置

自定义分片

数据源切换

方法或者类上加上注解 @DS("salve-sharding")

配置主从的时候,有时候插入数据,马上查询,可能主从还没同步,这时候可以加上事务的注解,这样子就都会走主库了

shardingshpere-jdbc读写分离实现5.0.0-alpha

【java实现版本】

1、nacos配置:

2、pom文件

3、在对应包下面新加一个config文件。

4、插入或更新后立即查询,请在查询前面执行

// 强制到主库进行查询,用于新增或者更新后立即查询

HintManager.getInstance().setPrimaryRouteOnly();

5、shardingsphere-jdbc只负责读写分离,其中的主从同步需要使用原生mysql主从同步机制。

【nacos配置实现版本】

1.nacos配置

2、pom文件

3、插入或更新后立即查询,请在查询前面执行

// 强制到主库进行查询,用于新增或者更新后立即查询

HintManager.getInstance().setPrimaryRouteOnly();

4、shardingsphere-jdbc只负责读写分离,其中的主从同步需要使用原生mysql主从同步机制。

12. sharding-jdbc源码之强制路由

位于 sharding-jdbc-core 模块下的包 com.dangdang.ddframe.rdb.sharding.hint 中,核心类 HintManagerHolder 的部分源码如下:

ThreadLocal中管理的 HintManager 定义如下:

分析了sharding-jdbc的强制路由实现的源码,接下来说说如何使用这一niubility特性,假定数据源定义如下:

sharding-jdbc 按月份分表

更新内容:添加范围搜索比如201901~201605五个月的数据,之前是只能查询单月的数据

sharding-jdbc 按月份分表需要自己实现。需要实现两个接口PreciseShardingAlgorithm,RangeShardingAlgorithm。并在配置文件里添加实现路径

如下:com.simianBook.conf.TimeShardingTableAlgorithm

那么yml 里的配置路径如下

因为SimpleDateFormat 不是线程安全的需要修改为DateTimeFormatter

下面需要来编写按单月分表的方法

我是使用sharding-jdbc 自带的雪花算法 来生成主键的, 雪花算法的实现逻辑

因此我在得到分片键时对分片键进行逆推可以推出分片键的时间戳。再根据时间戳得到创建此条数据创建的年月进而定位到那个表位置(或者说表名)

DefaultKeyGenerator.EPOCH+(Long.valueOf(shardingKey+"")22)

DefaultKeyGenerator.EPOCH 表示起始时间。在雪花算法当中生成的时间戳需要减去起始时间在进行左移22位在进行或运算

sharding-jdbc 的雪花实现方法如下 版本3.0 该版本有bug 并发量低的时候生成的分片键始终为偶数

3.1.0 版本解决了 自己可以看一下有什么不同

user_201907

Sharding-JDBC-配置手册

配置是整个Sharding-JDBC的核心,是Sharding-JDBC中唯一与应用开发者打交道的模块。配置模块也是Sharding-JDBC的门户,通过它可以快速清晰的理解Sharding-JDBC所提供的功能。

本部分是Sharding-JDBC的配置参考手册,需要时可当做字典查阅。

Sharding-JDBC提供了4种配置方式,用于不同的使用场景。通过配置,应用开发者可以灵活的使用分库分表、读写分离以及分库分表 + 读写分离共用。

图中黄色部分表示的是Sharding-JDBC的入口API,采用工厂方法的形式提供。 目前有ShardingDataSourceFactory和MasterSlaveDataSourceFactory两个工厂类。ShardingDataSourceFactory用于创建分库分表或分库分表+读写分离的JDBC驱动,MasterSlaveDataSourceFactory用于创建独立使用读写分离的JDBC驱动。

图中蓝色部分表示的是Sharding-JDBC的配置对象,提供灵活多变的配置方式。 ShardingRuleConfiguration是分库分表配置的核心和入口,它可以包含多个TableRuleConfiguration和MasterSlaveRuleConfiguration。每一组相同规则分片的表配置一个TableRuleConfiguration。如果需要分库分表和读写分离共同使用,每一个读写分离的逻辑库配置一个MasterSlaveRuleConfiguration。 每个TableRuleConfiguration对应一个ShardingStrategyConfiguration,它有5中实现类可供选择。

仅读写分离使用MasterSlaveRuleConfiguration即可。

图中红色部分表示的是内部对象,由Sharding-JDBC内部使用,应用开发者无需关注。Sharding-JDBC通过ShardingRuleConfiguration和MasterSlaveRuleConfiguration生成真正供ShardingDataSource和MasterSlaveDataSource使用的规则对象。ShardingDataSource和MasterSlaveDataSource实现了DataSource接口,是JDBC的完整实现方案。

在 org.apache.shardingsphere.api 和 org.apache.shardingsphere.shardingjdbc.api 包中的类是面向用户的API,每次修改都会在release notes中明确声明。 其他包中的类属于内部实现,可能随时进行调整, 请勿直接使用 。

关于php怎么使用shardingjdbc和php怎么使用sharding jdbc的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


【免责声明】:

本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。

【关于转载】:

本站尊重互联网版权体系,本站部分图片、文章大部分转载于互联网、所有内容不代表本站观点、不对文章中的任何观点负责、转载的目的只用于给网民提供信息阅读,无任何商业用途,所有内容版权归原作者所有
如本站(文章、内容、图片、视频)任何资料有侵权,先说声抱歉;麻烦您请联系请后台提交工单,我们会立即删除、维护您的权益。非常感谢您的理解。

【附】:

二○○二年一月一日《计算机软件保护条例》第十七条规定:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬!鉴于此,也希望大家按此说明研究软件!

注:本站资源来自网络转载,版权归原作者和公司所有,如果有侵犯到您的权益,请第一时间联系我们处理!

-----------------------------------------------------------------------------------------------------------

【版权声明】:

一、本站致力于为源码爱好者提供国内外软件开发技术和软件共享,着力为用户提供优资资源。
二、本站提供的源码下载文件为网络共享资源,请于下载后的24小时内删除。如需体验更多乐趣,还请支持正版。
三、如有内容侵犯您的版权或其他利益的,请编辑邮件并加以说明发送到站长邮箱。站长会进行审查之后,情况属实的会在三个工作日内为您删除。
-----------------------------------------------------------------------------------------------------------


内容投诉
源码村资源网 » php怎么使用shardingjdbc(php怎么使用sharding jdbc)
您需要 登录账户 后才能发表评论

发表评论

欢迎 访客 发表评论