在 Laravel 中使用 MongoDB 的副本集

安装mongodb

系统环境,centos6.6 64位版本。
创建mongodb3.0的yum源
$ vi /etc/yum.repos.d/mongodb-org-3.0.repo
写入
[mongodb-org-3.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$relea...
gpgcheck=0
enabled=1
执行安装命令
$ yum install -y mongodb-org
或者指定版本
$ yum install -y mongodb-org-3.0.4 mongodb-org-server-3.0.4 mongodb-org-shell-3.0.4 mongodb-org-mongos-3.0.4 mongodb-org-tools-3.0.4

创建数据目录并修改权限
$ mkdir -p /hwdata/mongo/data
$ mkdir -p /hwdata/mongo/log
$ chown mongod:mongod /hwdata/mongo/data
$ chown mongod:mongod /hwdata/mongo/log
修改配置
$ vi /etc/mongod.conf
logpath=/hwdata/mongo/log/mongod.log
dbpath=/hwdata/mongo/data
bind_ip=192.168.10.85
replSet=epgSet
oplogSize=1024
修改文件句柄数
$ vi /etc/security/limits.conf mongod soft nofile 64000
mongod hard nofile 64000 mongod soft nproc 32000
mongod hard nproc 32000`
加入启动项
$ chkconfig mongod on
启动mongodb
$ service mongod start
以上所有操作同样安装在192.168.10.86,192.168.10.87上。

在每台机器上加上域名别名
$ vi /etc/hosts
192.168.10.85 mongodb01
192.168.10.86 mongodb02
192.168.10.87 mongodb03

配置副本集
在其中一台机器上,登录到mongo命令行中
$ mongo 192.168.10.85
输入
config={_id : 'epgSet',members : [{_id : 1, host : 'mongodb01:27017'},{_id : 2, host : 'mongodb02:27017'},{_id : 3, host : 'mongodb03:27017'}]}
rs.initiate(config);
至此,副本集基本配置完成,可以查看副本集状态

如果不成功,有可能是防火墙的问题,修改防火墙即可
vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 27017 -j ACCEPT
service iptables restart

file

======== 我是分割线 ======

现在开始配置laravel。我们使用jenssegers/mongodb,他的packagist地址为https://packagist.org/packages/jenssegers/mongodb

安装jenssegers/mongodb
composer require jenssegers/mongodb
在config/app.php中加上
Jenssegers\Mongodb\MongodbServiceProvider::class,
修改数据库配置 app/config/database.php
'default' => 'mongodb',
添加数据库连接
'mongodb' => array(
'driver' => 'mongodb',
'host' => array('192.168.10.85','192.168.10.86','192.168.10.87'),
'port' => 27017,
'username' => '',
'password' => '',
'database' => 'epg',
'options' => array(
'replicaSet' => 'epgSet',
'db' => 'admin'
)
)
创建一个user的模型,指定表名和字段
protected $table = 'users';
protected $fillable = ['name', 'email', 'password'];
如果前面的默认连接没有修改,或者要使用别的连接,也可以为每个模型指定连接
protected $connection = 'mongodb';
创建一个seeder
php artisan make:seeder UserTableSeeder
修改UserTableSeeder的run方法
DB::collection('users')->insert(["name" => "superwen","email" => "superwen@test.com"]);
DB::collection('users')->insert(["name" => "alibaba","email" => "alibaba@test.com"]);
DB::collection('users')->insert(["name" => "spring","email" => "alibaba@test.com"]);
DB::collection('users')->insert(["name" => "pinkpig","email" => "pinkpig@test.com"]);
执行seeder
php artisan db:seed
或者
php artisan db:seed --class=UserTableSeeder

执行完成就可以看到数据库中都有这些记录了。下面是查询结果

file

关于jenssegers/mongodb的更多用法还请查看官方文档。

下面摘抄一些常用的。
DB::collection('users')->get();
DB::collection('users')->where('name', 'John')->first();
DB::connection('mongodb')->collection('users')->get();
User::all();
User::find('517c43667db388101e00000f');
User::where('votes', '>', 100)->take(10)->get();
User::where('votes', '>', 100)->orWhere('name', 'John')->get();
User::whereIn('age', array(16, 18, 20))->get();
User::distinct()->get(array('name'));
Users::groupBy('title')->get(array('title', 'name'));
User::where('name', 'John Doe')->increment('age');
User::where('name', 'Jaques')->decrement('weight', 50);
下面是nosql数据库特有的一些操作
User::where('age', 'exists', true)->get();
User::where('roles', 'all', array('moderator', 'author'))->get();
User::where('tags', 'size', 3)->get();
User::where('name', 'regex', new MongoRegex("/.doe/i"))->get();
User::where('name', 'regexp', '/.
doe/i'))->get();
User::where('name', 'not regexp', '/.*doe/i'))->get();
User::where('age', 'type', 2)->get();
其他insert,update,delete方法和Eloquent一样的。

结束。

superwen
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!