引用方法,未配置读写分离

2019-07-13 作者:编程   |   浏览(158)

本文实例讲述了CodeIgniter读写分离实现方法。分享给大家供大家参考,具体如下:

本文实例讲述了yii2框架中使用下拉菜单的自动搜索yii-widget-select2的方法。分享给大家供大家参考,具体如下:

本文实例分析了CI(CodeIgniter)模型用法。分享给大家供大家参考,具体如下:

本文实例分析了CodeIgniter配置之routes.php用法。分享给大家供大家参考,具体如下:

当前服务器只做了主从,未配置读写分离,读写分离的功能就只有交给程序来实现,这里主要谈谈Codeigniter怎么实现读写分离,并且需要满足以下两点:

github中源代码地址:

MVC中的业务逻辑放在控制器中或者模型里都是不合适的,所以这里对业务逻辑进行了分离,多出一层用来处理业务逻辑,模型就只当作数据访问层,这样子模型将会变得比较轻。CI中并未通过实体对象来传参,参数的传入和返回都由开发者控制,比较灵活。很多情况下都会以数组的方式传入或者返回。

application/config/routes.php中定义了一个名为$route的数组,用来设置默认路由和404页面以及可以设置一些匹配方式。

1、读写分离对开发应该透明。

利用composer.phar安装此插件:

模型的使用也比较简单,这里只提一下使用前想到的几个问题吧。

默认的配置如下:

网上有方案通过手动load多个DB来实现读写分离,这样的分离跟业务关联太紧,增加了开发难度也不利于维护,我们要做的是默认读重库,写则写主库,读写分离对开发者透明

php composer.phar require kartik-v/yii2-widget-select2 "*"

1、既然已经有了数据访问层了,那我们就应当避免在控制器或者某些类中直接通过SQL查询数据库,所有的数据库访问操作都应当经过模型获取,大多数情况下一个表名对应着一个模型类。

$route['default_controller'] = "welcome";
$route['404_override'] = '';

2、配置简单。

引用方法:

2、模型应当很方便的连接多个数据库,在database配置文件中有谈到多个库的配置问题,根据group_name的不同可以很方便的连接不同的库。如果有主从,还可以考虑到主从的切换使用问题。

default_controller指定默认的控制器名称,404_override指定当出现404时调用的控制器名称。有时候可能出现解析不成功,或者一直在默认页面,我们可以调用$this->router打印一下当前解析的控制器和Acion名称。比如可以在MY_Controller中如下打印:

保留现有的配置方式,通过增加一个数组来配置读写分离,不影响原有使用方式。

use kartikselect2Select2;

3、模型是否还要按模块区分?在控制器中存在公用控制器分发的做法,在模型中这种思维可能不太好,但可以通过继承不同的公用模型类来实现,这些类再继承CI的MY_Model。在某些业务下根据模块来继承可能比较有用,大部分情况可以直接继承MY_Model,MY_Model主要实现数据库的初始化连接以及一些公用方法。

var_dump($this->router->fetch_directory());
var_dump($this->router->fetch_class());
var_dump($this->router->fetch_method());

思路

源代码:

4、数据库提供的操作方式都是比较基础的,需要我们根据自身的需求去组装,但在我们日常操作中很多操作是类似的,如,根据主键获取信息,根据ID获取信息,根据属性获取信息等,可以对这些基础的操作在进行一次封装,更方便使用。因为如果要使用AR的方式来操作数据库,需要记住很多的方法,如我们根据用户名查询:

确定下解析到哪个控制器了, 然后在看看URL的配置、服务器配置,以及可以在Router.php 和URI.php中调试下。

1、要实现读写分离最简单的思路就是在最终执行查询的地方根据查询语句判断是插入主库还是读取从库,所以需要找到该函数。

<?= $form->field($model, 'companies_company_id')->widget(Select2::classname(), [
  'data' => ArrayHelper::map(Companies::find()->all(),'company_id','company_name'),
  'language' => 'en',
  'options' => ['placeholder' => 'Select a state ...'],
  'pluginOptions' => [
    'allowClear' => true
  ],
]); ?>
$query = $this->db->from('user')->where(array('username' => 'BobbyPeng'))->get();
return $query->row_array();

$route数组也可以通过通配符(:num, :any)、正则来设置重写规则,下面是一些简单的例子:

2、应该只连接一次数据库,下次操作该链接应当可复用。也就是连一次重库后所有的读操作都可用,不需再次连接,主库同理。所以我们可以将链接放在CI超级对象中。

相关内容的详细解释:

如果封装后,则只需要记住一个方法即可,如:

1、将 请求解析到 处理。
Codeigniter并不支持包含查询字符串的重写规则,这个规则看起来应当这么写:

3、主从的判断是根据最终执行的SQL语句来判断的,所以数据库配置中的自动链接autoinit参数就不用设置为true了,如果默认连接了而又不需要操作该库就浪费资源了。

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

public function findByAttributes($where = array())
{
  $query = $this->db->from($this->tableName())->where($where)->get();
  return $query->row_array();
}

复制代码 代码如下:

本文由小鱼儿玄机30码发布于编程,转载请注明出处:引用方法,未配置读写分离

关键词: 小鱼儿玄机30码