MongoDBをためしてみた
NoSQLが話題になりはじめてそろそろ1年くらいになるでしょうか。仕事ではMySQLで足りているしスケールアウトが求められる案件もでてこないので触ることもなく時は過ぎ・・
触ってみなければと、Herokuで使えるということもありMongoDBを使ってみました。
環境はCentOS5.5。
インストール
ここから環境にあったものをダウンロードします。
$ wget http://fastdl.mongodb.org/linux/mongodb-linux-i686-1.6.5.tgz $ tar zxvf mongodb-linux-i686-1.6.5.tgz $ cd mongodb-linux-i686-1.6.5/bin
データベースを作成するディレクトリを適当に作成します。
$ makedir ~/mongodb
binディレクトリ内のmongodを実行するとフロントエンドで起動するみたい。--dbpathオプションで先ほど作成したディレクトリを指定します。
$ ./mongod --dbpath ~/mongodb
バックエンドで実行するには、--fork --logpath ~/mongodb/mongodb.log のようにします。
シェルから使ってみる
別のターミナルを開いてmongoコマンドを実行すると、シェルが起動してMongoDBに触れることができます。
ではmongoっと
$ ./mongo MongoDB shell version: 1.6.4 connecting to: test >
公式にチュートリアルがありますが、Masatomo Nakanoさんが翻訳されたDeveloper Zoneがわかりやすいです。
ドキュメントの作成にはsaveを使います。コレクション名をusersとすると
> db.users.save({firstname: "taro"})
ドキュメントの取得はfindを使います
> db.users.find() > { "_id" : ObjectId("4d6367286681d38c875e50f7"), "firstname" : "taro" }
削除はremove。
> db.users.remove({firstname: "taro"})
removeでパラメータ指定なしにすると全削除されます
> db.users.remove()
基本操作は分りやすいです。またシェルはJavaScriptを使えるのでいろいろと書けるようです。
id:babie さんの以下のページがわかりやすくまとまっています。
ハンズオンで分かる MongoDB チュートリアル - babie cruising love
MongoDBの停止
フロントエンドで動かしているときは、Ctrl+cでよいそう。バックエンドの実行は、kill -2 (プロセスID)を実行します。
MongoDBが起動しない場合
起動しなくなったら、--repairをつけて実行する。このコマンドはそのまま終了してしまうので再度通常の起動方法で実行する。
$ ./mongod --dbpath ~/mongodb --repair ・・・・・・ Tue Feb 22 17:32:20 [initandlisten] shutdown: removing fs lock... Tue Feb 22 17:32:20 dbexit: really exiting now $ ./mongod --dbpath ~/mongodb
サービスが開始した時に案内をもらう「Notify Me」を試してみた
MOONGIFTさんで紹介されていた、「Notify Me」を試してみた。
サービスが開始した時に案内をもらう。メールアドレス登録システム「Notify Me」|オープンソース・ソフトウェア、ITニュースを毎日紹介するエンジニア、デザイナー向けブログ
フレームワークはsinatraでデータベースはsqlite3を使用しているシンプルなWebアプリケーションです。
■導入手順(OS: CentOS5.2)
sqlite3をいれてから、sqlite3-rubyをgemでインストールします
$ gem install sqlite3-ruby
sinatraを入れます
$ gem install sinatra sinatra-sequel
次のコマンドを実行すると、notify-me.dbというデータベースファイルが作られてサーバが起動します
$ ruby -rubygems notify_me.rb
sinatraなので、http://localhost:4567 にアクセスします。
メールアドレスを入力して「NotifyMe!」ボタンをクリックすると完了画面が表示されます。
データベースを見てみる
$ sqlite3 notify-me.db SQLite version 3.7.4 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> select * from subscriptions; 1|test1111@yahoo.co.jp|2011-02-09 11:34:31.491670+0900 sqlite>
ちゃんと入ってますね!
MacBook Air 11インチ欲しい!
はてなダイアリーでブログを書くだけでMacBook Airが当たるキャンペーンを実施中ですが、締め切りが迫ってきたのでエントリーしておこうかと。
MacBook Air 11インチ欲しい!とは - はてなキーワード
やっぱり、外出時にMacBook Pro13は重く感じる。
最近は勉強会へいくと、Air11を持っている人が結構いるし開発環境とするにも問題ないみたいだしな。
しかしこの日ではてブ3900もいってるのが凄いな
サーバ監視 phptopを動かしてみた
以下で紹介されていたサーバ監視ツールphptopを試してみた。
サーバ上で動いてるどのphpが重いか?を調べられる「phptop」:phpspot開発日誌
本家はこちら PhpTop – Bearstech Forge
ただすんなり動かなかったのでメモ。環境は、CentOS 5.2, PHP 5.2
phptopのサイトからダウンロードして解凍
$ wget http://forge.bearstech.com/trac/raw-attachment/wiki/PhpTop/phptop-0.5.2.tar.gz $ tar -zxvf phptop-0.5.2.tar.gz $ cd phptop-0.5.2/ $ ./phptop -t 15 -s mem
実行するとエラーが
Can't locate Term/Size.pm in @INC (@INC contains:
Term-Sizeがないらしい
※2010.12.21 追記)CPANモジュールを入れるのがいいみたい
$ perl -MCPAN -e shell cpan> install Term::Size
こちらは自分で試したもの
$ yum --enablerepo=rpmforge install perl-Term-Size
インストールして実行するとまたエラーが
Bareword "POSIX::LC_NUMERIC" not allowed while "strict subs" in use at ./phptop line 118. BEGIN not safe after errors--compilation aborted at ./phptop line 357.
よくわからないので118行目をみてみる
$ vi phptop setlocale(POSIX::LC_NUMERIC, 'C'); # Use . as decimal separator
locale?よくわからん。。
とりあえずこの行をコメントにして保存して実行!
Error: no log files found/processed. Tried: /var/log/apache2/error*log, /var/log/apache2/*/error*log
apache2 ?
ソースを見ると確かに356行目、
push(@log, '/var/log/apache2/error*log', '/var/log/apache2/*/error*log' ) if !@log;
自分の環境は、/var/log/httpd なのでパスを変更して、今度こそ・・
URL Hit Time User Sys >Mem/hit Mem_max http://xxxx/test1 2 0.8 0.7 0.1 8.2 8.2 http://xxxx/test2 1 0.3 0.2 0.0 8.2 8.2 http://xxxx/test3 2 0.5 0.4 0.0 8.2 8.2 http://xxxx/test4 1 0.3 0.2 0.0 8.0 8.0 http://xxxx/test5 1 0.2 0.2 0.0 8.0 8.0 http://xxxx/test6 9 2.4 1.6 0.1 7.2 7.2 Total (from last 15 min) 16 4.5 3.3 0.3
でたー!
コマンドの15は最後の15分間分を出力ということなので、適宜変更すればOK。
htmlに出力するときは、-o html オプションをつける。
$ ./phptop -t 15 -s mem -o html
Visual Studio2008でVimライクにするViEmu
かなり今更感がありますが、VS2008を使う仕事がきたため仕方なくVSを起動してみた。
VSはIDEとしてはいいのだけどVimに慣れているとハンパなくストレスがたまります。
ということでVimのキーバインドにしてくれるものを探したところ、ViEmuというのがありました。
ViEmu: vi-vim editor emulation for Xcode, Visual Studio, Word, Outlook and SQL Server
99ドルですが、1ヶ月は無料で使えるようです。
インストールしてみたところ、これはいい!Vimっぽくキーバインドがなるのかと思いきや
モードがNormal,Visual,InsertなどありVimと同じように操作できます。
また、ホームディレクトリに_viemurcファイルを置くことでカスタマイズが可能です。
ただ、Ctrl-[ でESCとならなかったり(Ctrl+@になっている)、whichwrap が使えなかったりと完全にVimと同じようにはいかないところはあります。
whichwapは、
nnoremap h <backspace> nnoremap l <space> nnoremap <Left> <backspace> nnoremap <Right> <space>
とすることでなんとかできます。
当然インストールしてもVSの補完機能はそのまま動くのでかなり快適になりますし、VS2008が続きそうなので購入することになりそうです。
因みにVisual Studio2010にはフリーでVsVimというのがあるらしいです。
Google AJAX Search API ウェブ検索の表示部分をカスタマイズしてみる
Google AJAX Search APIのウェブ検索を使うと、Googleで検索した結果をすばやく表示することができます。
ただデフォルトだとGoogleの検索の表示イメージそのままなので、今回は検索ボックスなし、結果はタイトルのみ、ページングリンクはなしというをやってみた。
<script language="Javascript" type="text/javascript"> google.load("search", "1", {"language" : "jp"}); function OnLoad() { var searcher = new google.search.WebSearch(); //Web検索 searcher.setSearchCompleteCallback(searcher, searchComplete, null); searcher.execute('iphone4'); //検索キーワード指定 function searchComplete(){ showSearchResults(this.results,document.getElementById('searchResults')); } // 検索結果を表示 function showSearchResults(searchResults,domElement){ if (searchResults && searchResults.length > 0) { domElement.innerHTML = ''; for (var i = 0; i < searchResults.length; i++) { var result=searchResults[i]; domElement.innerHTML += '<a href="'+ result.url +'" target="_blank">'+ result.titleNoFormatting + '</a><BR>'; } } } } google.setOnLoadCallback(OnLoad); </script> <body> <div id="searchResults"></div> </body>