1,使用mysql+mongodb数据库,主要使用mysql,辅助使用mongodb.
2,配置:全局配置为主数据库的配置(例如mysql是主数据库,配置就为mysql),辅助使用mongodb,可以在单独的模块的model里面使用protected $connection = array()配置,需要注意的是如果你的mongodb数据库名字和mysql名字不同,需要单独配置protected $dbName='数据库名称',现在发现的是在$connection里面配置数据库名称不起作用.$trueTableName='数据表'为表名.我自己的配置为
protected $connection = array(
'db_type' => 'mongo',
'db_user' => 'root',//用户名
'db_pwd' => 'root',//密码
'db_host' => 'localhost',//数据库地址
'db_port' => '',//数据库端口 默认27017
'db_name' => 'test',//数据库名 ,实际上不起作用,如果和你的全局配置有冲突的话,还是用的你的全局配置数据库名
'db_charset' => 'utf8',
);
protected $dbName='test';//如果配置了全局配置,mongodb数据库和mysql数据库名称不一样的话,必须配置此项
protected $trueTableName = 'test';//数据表名
Protected $_idType = self::TYPE_INT; //参考手册
protected $_autoinc = true;//参考手册3,mongodb的集群设置同mysql的集群设置一样,需要注意的是,如果你只是mongodb使用了集群,你可以在控制器里动态配置集群和读写分离参数
C('DB_DEPLOY_TYPE',1);//集群
C('DB_RW_SEPARATE',true);//读写分离
4,mongodb的主从设置
现在mongodb有种配置是集群,1台服务器为主服务器,其余几台为从服务器,主服务出问题后,从服务器随机一台为主服务器.
这样的话,前面的集群配置就会出问题,因为只有主服务器可以读写.
我的解决办法为改写thinkphp的mongo驱动(只是单纯的解决这个项目所需要),修改连接数据库方法
public function connect($config='',$linkNum=0) {
if ( !isset($this->linkID[$linkNum]) ) {
if(empty($config)) $config = $this->config;
// $host = 'mongodb://'.($config['username']?"{$config['username']}":'').($config['password']?":{$config['password']}@":'').$config['hostname'].($config['hostport']?":{$config['hostport']}":'').'/'.($config['database']?"{$config['database']}":'');//原代码
$host = 'mongodb://'.($config['username']?"{$config['username']}":'').($config['password']?":{$config['password']}@":'').$config['hostname'].'/'.($config['database']?"{$config['database']}":'');//修改代码,去掉端口$config['hostport'],需要修改配置文件
try{
$this->linkID[$linkNum] = new \mongoClient( $host,$config['params']);
$connections = $this->linkID[$linkNum]->getConnections();//返回有关所有打开的连接信息
foreach ( $connections as $con )
{
// 遍历所有连接,如果类型是 "PRIMARY" 则连接
if ( $con['connection']['connection_type_desc'] == "PRIMARY" )
{
$closed = $this->linkID[$linkNum]->close( $con['hash'] );
$this->linkID[$linkNum] = new \mongoClient('mongodb://'.($config['username']?"{$config['username']}":'').($config['password']?":{$config['password']}@":'').$con['server']['host'].($config['hostport']?":{$config['hostport']}":'').'/'.($config['database']?"{$config['database']}":''));//连接主服务器
}
}
}catch (\MongoConnectionException $e){
E($e->getmessage());
}
// 标记连接成功
$this->connected = true;
// 注销数据库连接配置信息
if(1 != C('DB_DEPLOY_TYPE')) unset($this->config);
}
return $this->linkID[$linkNum];
}相应的修改配置文件的'db_host' => '地址1:端口1,地址2:端口2,地址3:端口3',//数据库地址 最佳答案