中年engineerの独り言 - crumbjp

LinuxとApacheの憂鬱

Aggregation FWの特徴と地雷

MongoDBのAggregation FWはSQLの集約関数(COUNT,SUM,GROUP等)の様な組み込み機能の集合である。非常に便利なのだが、色々と問題があって、手放しにはお勧めできない。Aggregation FWの機能や利用する時のハマリ所をリストアップしてみた。 機能 MapReduceの…

Aggregation FW機能、SQLとの比較

使い方や例など詳細は本家のドキュメントを参照してください。 基本機能 オペレータ SQL相当 説明 $project SELECT 集計用のフィールドの削除・追加・定義など $match WHERE 絞込み条件を指定 $limit LIMIT 対象行数指定 $skip LIMIT 読み飛ばし行数指定 $un…

mongodb in Sakura VPSのスローダウン仮説

サクラvps3Gのmongoで原因不明のスローダウンが発生。どうも、急激にディスクリードが遅くなったようだ。プロセス再起動も効果なし、メモリーも十分。謎だったのだが、一つ仮定は作れた。・どうやら50Gもあるコレクションで起きてるっぽい ・そこには古くて…

MongoDB丸の内勉強会でしゃべって来ました

MongoDB丸の内勉強会 #14 http://atnd.org/events/44449もう14回ですか!月1なので一年以上経ちましたね。 思えばこの勉強会から色々始まったものがあるなぁ〜 Sharding体験? 前半は参加者でシャーディング構築のハンズオン 皆さん、Firewall設定とかで…

サーチ評価の話(和訳)

仕事で考えなきゃならないケースが出てきたので 『後でやる』シリーズを消化していく。(赤字は私の所感) Googleサーチエンジンの改善に関する記事の和訳 (想定される問題をピックアップする目的) Search evaluation at Google Posted: Monday, September…

転職しました。。

退職エントリーが流行の様なので・・・ 9月末付けで楽天を退社しました。 楽天は、6年間お世話になりました。非常に働き易く良い会社だったと思います。 それまでは、長くても同じ職場には2年は居つかなかったのですが 特に大きな不満もなく、居心地が良…

自然言語処理の落書き(canopy問題)

やはりcanopyが厄介だ。。 T2サンプリングの問題 自然言語処理では物凄くスパースなベクトルを扱ってるので canopy(T2)の段階で、クラスタ数が必要以上に増える。その後、canopy(T1)で重心算出すると、20個以上の重心がT2内に入ってる状態になったりする。…

自然言語解析 in MONMO(後編)

一連の自然言語処理をMONMOちゃん上で実現する試みの第3弾 前回はベクタライズまで行った。今回は、形態素解析結果から、そのドキュメントの特徴を表す『ベクトル』を算出する、ベクタライズを行う。 monmo-NLProcessing github https://github.com/monmo/m…

自然言語解析 in MONMO(中編)

一連の自然言語処理をMONMOちゃん上で実現する試みの第2弾 前回は形態素解析まで行った。今回は、形態素解析結果から、そのドキュメントの特徴を表す『ベクトル』を算出する、ベクタライズを行う。 monmo-NLProcessing github https://github.com/monmo/mon…

自然言語解析 in MONMO(前編)

前回MONMOちゃんの紹介の続き。今回は(日本語)自然言語解析の第一歩であるトークンナイズ(tokenize)を行う。 monmo-NLProcessing github https://github.com/monmo/monmo-NLProcessing 形態素解析 日本語の解析で一般的に使われるtokenize手法で、辞書を…

MongoDB製JOB Queue

お盆が暇だったので MongoDB製Job queue を作った。 名前はMONMOちゃん。javascriptで手軽に使いたい部分があって個人用で考えていたが 結構マトモなモノが出来上がったので公開する事にする。またMONMOちゃんを使って、自然言語処理も一式書いてみたが こち…

熟語解析が難しい。。。(もはや走り書きメモ)

修正: x: unigram => o: bigram 勢いで書くとこうだよ・・・ 形態素解析でTokenize後にN-gramで熟語解析しようとしたが、ちと困った。。 日本 維新 の 会これをbigramすると 日本維新 維新の の会となって、これを使ってもう一回Tokenizeすると 日本維新 の…

MongoDBはDBではない。環境である!

勢いでtwiteしたついでに、軽く書いてみた。MongoDBのfindAndModifyは物凄く便利で色々使い方があるのだが $setOnInsertと組み合わせると、お手軽セマフォになるので こんな感じで簡単にJOB管理に使える訳だ。 全ドキュメントを並列に処理する例 このスクリ…

今週末7/28は、大岡山でもんご祭り!

2013納涼もんご祭りここの所、これに掛かりきりです。 遊びに来てくださいな!・参加無料! ・色々面白い発表あり!! ・10gen来るかも? ・プロレスラーあり!?いや、、ホントかよ? いい大人が悪乗りすると怖いね!! 人とお金集めてホントにやっちゃうか…

All in mongo の形態素解析エンジン

.body .section { margin-left:10px; } .body .section dl{ margin-left:20px; } https://github.com/crumbjp/analysis/tree/master/monmorp About MONMORP MongoDB上で動作する ”とにかくお手軽な 形態素解析エンジンです。 MongoDBが立ち上がってる状態か…

Cockatoo

彼此数年ほど手がけているMongoDBベースのPHP製WEBフレームワーク『Cockatoo』いくつかのサービスで数年間、安定稼働を続けているのでそろそろ自信がついてきました。本来は社内で広めて行きたいのだけど諸般の(非技術的な)事情から暫く身動きが取れない状…

MongoDBのデータファイルを直撃してHadoopでM/Rすると。。

なんかまた、おかしなプロダクトを発見した。https://github.com/groupon/mongo-deep-mapreduce最初、mongo-hadoopと何が違うんだ?と思ったが。。 Move the raw Mongo files into HDFSなんだと!?データファイルを直撃して食うのか!!! またC++ => Java…

今更ながら簡単Sharding構築

Sharding構築手順とポイント 構成 mongos +-----------------+ | 192.168.159.50 | +-----------------+ ConfigDB +-----------------+ +-----------------+ +-----------------+ | 192.168.159.3 | | 192.168.159.4 | | 192.168.159.5 | +-----------------…

MongoDB 2.4 の性能 徹底評価(Memory vs DISK)

大体欲しいデータは揃ったのと、MongoDBの気持ちが解ってきたのでMongoDB2.4の性能調査は今回で最後の予定 実は前回MongoDB 2.4 の性能 徹底評価(レコード長による評価)のFETCHバイト数(1.5GB) 実は今回のOn-memoryデータ vs DISKリードに繋げる事を意図…

MongoDBが適さないケース

> 原文(Why MongoDB is a bad choice for storing our scraped data)私自身はMongoDBを推進する立場なのだが、確かにMongoDBに適さないケースはある。 闇雲に推進しても結局は全員がアンハッピーになるので、この様なネタもどんどん紹介していこうと思う。こ…

MongoDB 2.4 の性能 徹底評価(レコード長による評価)

前回のMongoDB 2.4 の性能 徹底評価の反響が大きかったので続編。 今回の調査対象 ドキュメントサイズ毎の性能を評価する。今回の検証用にベンチを書いた。 性能見積りにも使えると思うので、紹介しておきます。 MongoDB-JP/mongo_bench今回の検証も、Sakura…

/proc/[pid]/stat まとめ

いつも忘れるので、まとめておくことにした td { border-bottom: 1px solid #D6E3F7; } stat No フィールド scanf 説明 0 pid %d プロセス ID。 1 comm %s 括弧でくくられた実行形式のファイル名。実行形式がスワップアウトされているかどうかによらず、見る…

NumberLong(64-bit integer) in MongoDB was smaller than I expected...

As you know, the default number type in MongoDB is 64-bit float. number ( 64-bit float) : double fraction 52-bit (Actually meaning 53-bit precision) exponent 11-bit sign 1-bit So "0x20000000000001=2^53+1" will cause overflow. > db.test.sav…

MongoDBの64bit整数型が思ったより小さかった

ご存じの様に、MongoDBの数値型(number)はfloat(64-bit) だ。 number ( 64-bit float) : double 指数部 52 bit(精度は53 bit) 仮数部 11 bit 符号 1 bit なので0x20000000000001=2^53+1は桁溢れを起す。 > db.test.drop() true > db.test.save({i:0x1fffff…

グラフ君

MongoDBの計測結果をグラフ化する為にjavascriptをちょろっと書いた。 hatenaに張れないのが残念だが・・・ MongoDBでレコードサイズ 400b , 4kb , 40kb , 400kb 4mb の時のInsert性能。

MongoDB 2.4 の性能 徹底評価

まとめ 超長くなったのでまとめを上に持ってきた。 巷で言われているチューニングは結構嘘が多い事が解ってきた。 ツール等 workingSet Analyzer は信用ならない。(overSecondsはまあ良い) mongoperfの値は完全に参考にならない。 insert mongoperfの値はi…

ハノイの塔

Jr エンジニア向けにアルゴリズムの勉強会を主催した時のコード Hanoi #!/usr/bin/env ruby ## -*- coding: utf-8 -*- class Poll def initialize @arr = Array.new end def push(v) raise "Could not push : " + v.to_s if @arr.size > 0 and @arr.last <= …

git-repo最高

git-repo が素晴らし過ぎる!複数のリポジトリを組み合わせて使えるのと、リビジョンがちゃんと指定できる所が非常に運用に乗せやすい。(javaの)mavenと同じノリで使えるね。 chefと組み合わせて使う(またはchefを置き換える?)と色々要らなくなるなぁ・…

Rubyのブロックを勉強した

Block Rubyにはブロックという要素があるが、File.open の様に、 値を返却したり、ブロックで扱ったりを両方出来る関数 がふと気になった。 f = File.open("file") f.each {|l| ... } File.open("file"){ |f| f.each {|l| ... } } block_given? こんな関数で…

Analyze the Analyzer (MongoDB 2.4)

Analyzer problem ? MongoDB Analyzer sometimes retuns below values that is difficult to interpret. RS:PRIMARY> db.serverStatus().mem { "bits" : 64, "resident" : 127, "virtual" : 11292, "supported" : true, "mapped" : 5262, "mappedWithJournal…