@NoSQL
@フォロワー #0
[Mongodb]ERROR: Insufficient free space for journal files @MongoDB @NoSQL
iQi @回答 • 2015-05-25 11:26 • @フォロワー #2 • 1 回答 • 2498 Views
MongoDBコマンドとSQL文の違いについて @NoSQL @MongoDB
iQi @回答 • 2014-09-15 10:30 • @フォロワー #2 • 1 回答 • 2547 Views
MongoDBのインストール方法について、 @MongoDB @NoSQL @database
iQi @回答 • 2014-06-07 15:23 • @フォロワー #3 • 1 回答 • 2547 Views
MongoDBでのリモート接続設定について @MongoDB @database @NoSQL
iQi @回答 • 2014-06-07 15:15 • @フォロワー #3 • 1 回答 • 7528 Views
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
}}}
これでエラー解消。
リレーショナルデータベース管理システム (RDBMS) 以外のデータベース管理システムを指すおおまかな分類語である。
リレーショナルデータベースをやみくもに使用してきた長い歴史を打破し、
それ以外のデータベースの利用・発展を促進させようとする運動の標語としての意味合いを持つ。
関係モデルではないデータストアの特徴として、固定されたスキーマに縛られないこと、
関係モデルの結合操作を利用しないこと(場合によっては単にそのような機能が欠落しているだけ)、
水平スケーラビリティが確保しやすい事が多いこと、トランザクションを利用できないものが多いことなどが挙げられる。
学術的な世界では、この種のデータベースのことを構造型ストレージ (英: structured storage) と呼ぶことが多い。
NoSQL系データベース管理システムには、データの格納および取得が高度に最適化されているものが多い。
その最適化のために機能性を最小限にしているものもある。
「値」およびそれを取得するための「キー」だけを格納できるKey-Value型データベースは、その最たる例である。
NoSQL系データベース管理システムが有用な場面は、関係モデルを必要としないデータを扱う時や、大量のデータを扱う時である。用途は多様であり、数百万のkey-valueペアを格納したり、数個程度の連想配列を格納したり、数百万の構造的データを格納したりと、様々に使われる。この構造は、大規模なデータを統計的に解析したり、増えつづける情報をリアルタイムに解析するのにも便利である。
産業界での有名な実装として、GoogleのBigTable、アマゾンのAmazon DynamoDBなどがある。オープンソースの実装も数多く存在し、例えばMongoDB、 Redis、Apache HBase、Apache Cassandraなどがある。