@MongoDB
@フォロワー #0
[Mongodb]php.iniでのextension=mongo.soエラー @MongoDB
iQi @回答 • 2019-09-06 15:29 • @フォロワー #2 • 2 回答 • 4268 Views
[Mongodb]ERROR: Insufficient free space for journal files @MongoDB @NoSQL
iQi @回答 • 2015-05-25 11:26 • @フォロワー #2 • 1 回答 • 2486 Views
MongoDBコマンドとSQL文の違いについて @NoSQL @MongoDB
iQi @回答 • 2014-09-15 10:30 • @フォロワー #2 • 1 回答 • 2538 Views
MongoDBのインストール方法について、 @MongoDB @NoSQL @database
iQi @回答 • 2014-06-07 15:23 • @フォロワー #3 • 1 回答 • 2536 Views
MongoDBでのリモート接続設定について @MongoDB @database @NoSQL
iQi @回答 • 2014-06-07 15:15 • @フォロワー #3 • 1 回答 • 7498 Views
{{{
cd /tmp
wget -c https://github.com/mongodb/mongo-php-driver/archive/master.zip
unzip master.zip
cd mongo-php-driver-master
php...
cd /tmp
wget -c https://github.com/mongodb/mongo-php-driver/archive/master.zip
unzip master.zip
cd mongo-php-driver-master
phpize
./configure
make all
sudo make install
}}}
または、
{{{
$ sudo apt-get install php-pear php5-dev
$ sudo pecl install mongo
$ sudo touch /etc/php5/conf.d/mongo.ini
(extension=mongo.so)
}}}
また、PHPバージョンが5.5以下の場合、
{{{
wget http://pecl.php.net/get/mongo-1.3.6.tgz
/usr/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
/usr/local/php/etc/php.ini
extension=mongo.so;
}}}
1.テストアカウントを追加する。
{{{
> use admin
switched to db admin
> db.addUser('tank','test');
}}}
2. mongodbのconfファイルを修正する。
{{{
bi...
{{{
> use admin
switched to db admin
> db.addUser('tank','test');
}}}
2. mongodbのconfファイルを修正する。
{{{
bind_ip = 0.0.0.0
port = 27017
auth=true
}}}
または、
{{{
#bind_ip = 0.0.0.0 //コメントする
port = 27017
auth=true
}}}
または、
{{{
bind_ip = 173.194.38.35 //自分サーバーのipアドレスに指定する
port = 27017
auth=true
}}}
3. mongodbをリスタートする。
{{{service mongod restart}}}
または
{{{/etc/init.d/mongod restart}}}
4.サーバーfirewallの設定
{{{iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 27017 -j ACCEPT }}}
5.リモート接続テスト
{{{mongo ip/dbname -u username -p password}}}
下記、MongoDBをPHPから使う方法です。
###環境構築
まずは拡張パッケージのインストール
{{{
sudo pecl install mongo
}}}
次にphp.iniに
{{{
extension=mongo.so
}}}
を追記します。
...
###環境構築
まずは拡張パッケージのインストール
{{{
sudo pecl install mongo
}}}
次にphp.iniに
{{{
extension=mongo.so
}}}
を追記します。
php.iniが何処にあるかわからない場合はphpinfo()を実行すると場所がわかります。
CentOS6でyumを使ってデフォルトのままインストールすると/etcの下にあると思います。
これで環境構築は終わりです。
チュートリアルを試す。
これに従います。
コメントを追記したものを下に貼り付けてみます。
{{{
<?php
// MongoDBに接続 localhost:27017
$m = new Mongo();
// リモートホストにデフォルトポート27017で接続
// $m = new Mongo("exsample.com");
//リモートホストに任意のポートで接続(xxxxxはポート番号)
// $m = new mongo("exsample.com:xxxxx");
/*
データベースは $m->dbname; で選択できる。
存在しなければ作成される。
これは便利ではあるが、タイプミスをした場合、
そのままデータベースが作成されてしまうので気をつけて下さい。
*/
// データベース(comedy)を選択
$db = $m->comedy;
/*
コレクションもデータベースと同様に
$db->collection_name; で取得できます。
存在しなければ作成されます。
コレクション≒テーブル
*/
// コレクション(cartoons)を取得
$collection = $db->cartoons;
// コレクションにドキュメントを挿入します。
// まずはドキュメントを作成します。
/*
JSON形式を意識して
key => valueでドキュメントを連想配列として作成します。
*/
$obj = array("title" => "Calvin and Hobbes", "author" => "Bill Watterson");
// コレクションにドキュメントを挿入
$collection->insert($obj);
// 別のドキュメントを作成し、挿入します。
$obj = array("title" => "XKCD", "online" => true );
$collection->insert($obj);
// ドキュメントを全件取得します
$cursor = $collection->find();
// 全て表示します
foreach($cursor as $obj){
echo $obj["title"] . "\n";
}
?>
}}}
何回も実行すると、どんどんドキュメントが増えていきます。
実行後にMongoDBコンソールでデータベースが作成されていることを確かめます。
MongoDBコンソールを起動
mogno
データベースが出来ていることの確認(comedyが在ればOK)
show dbs;
データベースの選択
use comedy
コレクションの一覧取得(cartoonsが在ればOK)
db.getCollectionNames();
ドキュメントの一覧取得
db.cartoons.find();
チュートリアルの下の方には様々な関数の使い方などが解説されています。
時間があれば、そのうち記事にしようと思います。
以上です。
##Linuxにインストール
###CentOS
リポジトリの追加
64ビットの場合
{{{
$ su
# vim /etc/yum.repos.d/10gen.repo
[10gen]
name=10gen Repository
baseurl=http:/...
###CentOS
リポジトリの追加
64ビットの場合
{{{
$ su
# vim /etc/yum.repos.d/10gen.repo
[10gen]
name=10gen Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64
gpgcheck=0
enabled=1
}}}
32ビットの場合
{{{
$ su
# vim /etc/yum.repos.d/10gen.repo
[10gen]
name=10gen Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/i686
gpgcheck=0
enabled=1
}}}
インストール
{{{
$ sudo yum install mongo-10gen mongo-10gen-server
}}}
起動する
{{{
$ sudo service mongod start
}}}
停止する
{{{
$ sudo service mongod stop
}}}
再起動する
{{{
$ sudo service mongod restart
}}}
自動起動するように設定する
{{{
$ sudo chkconfig mongod on
}}}
###Ubuntu
↓検証中
パッケージ管理システム (APT) の設定 UbuntuはMongoDBのリポジトリへのアドレスを知らないので、それを設定ファイルに書いてやる。
まず、リポジトリの公開鍵を手に入れる。以下のコマンドをコンソールで実行する。
{{{
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10
}}}
続いて、/etc/apt/sources.list.d/10gen.listをエディタで開き(存在しないはずなので新規作成)、
以下1行を書き込んで保存。
{{{
deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen
}}}
次のコマンドを実行して、リポジトリを更新する。
{{{
sudo apt-get update
}}}
次のコマンドを実行して、MongoDBをインストールする。
{{{
sudo apt-get install mongodb-10gen
}}}
設定ファイル 設定ファイルは /etc/mongodb.conf に、コントロールスクリプトは /etc/init.d/mongodb に置かれている。
MongoDBの実行 以下のコマンドを実行して、MongoDBのプロセスを開始する。
{{{sudo service mongodb start}}}
以下のコマンドを実行して、MongoDBのプロセスを停止する。
{{{
sudo service mongodb stop
}}}
以下のコマンドを実行して、MongoDBのプロセスを再起動する。
{{{
sudo service mongodb restart
}}}
##OSXにインストール
MacPorts(長時間)
{{{
$ sudo port install mongodb
}}}
Homebrew(短時間)
{{{
$ brew install mongodb
}}}
/var/lib/mongodbを作成
{{{
$ sudo mkdir /var/lib/mongodb
}}}
/var/log/mongodb.logを作成
{{{
$ sudo touch /var/log/mongodb.log
}}}
mongodbの起動
{{{
$ sudo mongod --dbpath /var/lib/mongodb --logpath /var/log/mongodb.log
}}}
別のターミナルからmongoシェルを扱う
{{{
$ mongo
}}}
##Windowsにインストール
① MongoDBをダウンロードする
http://www.mongodb.org/downloads
② C:\ にダウンロードしてきたzipを展開する
③ 展開したフォルダ名を mongodb に変更する
④ 以下のフォルダを作成する
{{{
mkdir C:\mongodb\data C:\mongodb\logs
}}}
⑤ C:\mongodb\binにパスを通す
⑥ mongodbを起動
{{{
mongod --dbpath c:\mongodb\data --logpath c:\mongodb\logs\mongodb.log
}}}
以下、纏めましたので、ご参照ください。
定義参照
{{{
// use [データベース名] or create database [データベース名]
use [データベース名]
// show databases
show dbs
// show ta...
定義参照
{{{
// use [データベース名] or create database [データベース名]
use [データベース名]
// show databases
show dbs
// show tables
show collections
//create table [データベース名](options)
db.createCollection([テーブル名],{options})
}}}
参照系
{{{
// select * from [コレクション名]
db.[コレクション名].find()
// select * from [コレクション名] where x=4
db.[コレクション名].find({x:4})
// select j from [コレクション名] where x=4
db.[コレクション名].find({x:4}, {j:1})
// select * from [コレクション名] limit 1
db.[コレクション名].findOne()
// select * from [コレクション名] where x > 1
db.[コレクション名].find({x : {$gt: 1}})
// select * from [コレクション名] where x < 3 and x > 1
db.[コレクション名].find({x : {$gt: 1, $lt: 3}})
// select * from [コレクション名] limit 3
db.[コレクション名].find().limit(3);
// join的な事も可能
// select * from [コレクション名1] inner join [コレクション名2] on x = x
p = db.[コレクション名1].findOne({x:1});
db.[コレクション名2].findOne( { _id : p.x } )
// select * from [コレクション名] order by x desc
db.[コレクション名].find().sort({x:-1});
// select count(*) from [コレクション名]
db.[コレクション名1].find({x:1}).count();
// explan select * from [コレクション名] where x = 1
db.[コレクション名].find({x:1}).explain();
}}}
更新系
{{{
// insert into [コレクション名] (x) value( 3 )
t = { x : 3 };
db.[コレクション名].insert(t);
// update [コレクション名] set y = 1 where x = 1
db.[コレクション名].update( { x:1 }, { $set: { y : 1 } } );
// delete from [コレクション名] where x = 1
db.[コレクション名].remove({x:1})
t = { x : 3 };
// 「_id」が存在すればupdate、存在しなければinsert
db.[コレクション名].save(t)
}}}
index関係
{{{
// create index hoge on [コレクション名] (x)
db.[コレクション名].ensureIndex({x:1});
// 複合indexも可能
// create index hoge on [コレクション名] (x,y)
db.[コレクション名].ensureIndex({x:1, y:1});
// create unique index hoge on [コレクション名] (x)
db.[コレクション名].ensureIndex({x: 1}, {unique: true});
// drop index hoge
db.[コレクション名].dropIndex({x: 1, y: -1})
// コレクションの全てのindex削除
db.[コレクション名].dropIndexes();
// バックグラウンドで (lock無しに)indexを張る
db.[コレクション名].ensureIndex({x:1}, {background:true});
}}}
mongodbはjournalログをデフォルトで有効にし、その場合3.5Gのファイルを確保する。
ディスクに余裕がない場合は、この時点でエラーになる。
開発時などはjournalログを無効にすると解消する。
{{{
/etc/mongod.conf
変更前
...
ディスクに余裕がない場合は、この時点でエラーになる。
開発時などはjournalログを無効にすると解消する。
{{{
/etc/mongod.conf
変更前
#nojournal = true
変更後
nojournal = true
}}}
これでエラー解消。
いわゆるNoSQLに分類されるタイプのデータベースで対障害性とスケーラビリティに優れ、またNoSQLでは珍しくインデックスをサポートしており表結合(JOIN)は出来ないながらRDBMSの様な使い方が出来る事も大きな特徴です。
http://docs.mongodb.org/manual/
主な特徴
耐障害性(Durability)
MongoDBはレプリカセットと呼ばれる冗長構成(クラスタ)を組むことができます。レプリカセットには唯一のプライマリノード(PRIMARY)とセカンダリノード(SECONDARY)複数を含める事ができ、クラスタに対する書き込みは全てPRIMARYに対して行われます。
PRIMARYに対する更新は速やかに全てのSECONDARYにコピーされ安全に保持されます。
レプリカセットでは万一PRIMARYを喪失した場合でも自動的にそれを検知し任意のSECONDARYをPRIMARYに昇格させます。この動作によりレプリカセットは単一障害点(SPOF)を持たない極めて高い対障害性を実現しています。
スケーラビリティ(Scalability)
MongoDBはレプリカセットとシャーディング(Sharding)の負荷分散の仕組みを用意しておりシステムの負荷に応じて柔軟に対応する事ができます。レプリカセット
レプリカセットのデータは全てのSECONDARYにコピーされているので負荷に応じた数のSECONDARYを用意しSECONDARYからデータの取得する事で負荷分散ができます。Sharding
コレクションを水平分割する機能です。分割数やバランシングなどは通常MongoDBが自動的に行います。これによりレプリカセットでは対応出来ない規模のリクエストやデータ量に対応する事が出来ます。
ライセンス
MongoDBのライセンスは一部にGNU AGPL v3.0が含まれています。GNU AGPL v3.0ライセンスは商用利用が難しくMongoDB導入に際し(主に法務部と)揉め易いライセンスです。
しかし実際は他のオープンソースDBと同様にほとんど制約無しで利用する事ができます。