読者です 読者をやめる 読者になる 読者になる

中年engineerの独り言 - crumbjp

LinuxとApacheの憂鬱

mongosが腐る・・・

mongosの後ろのshardでstepdownが起きたときにmongosが追随せずに以降のクエリーが全て刺さり続けることがある。 こうなるともう自動で復活はしないようだ。 すべてのmongosが腐る訳ではなく、stepdown時に高負荷だったmongosが腐る傾向にある。 shardConnPo…

MongoDBクラスタ間の同期

node-mongosync https://www.npmjs.com/package/node-mongosyncステージング環境へのデータ同期や、MongoDB引っ越しの際に便利。 そうそう引っ越さないけど・・以前 mongoshellで実装したものの焼き直しだ。 node-native-driverでは、tailable cursor の clo…

『もう二度と、絶対にMongoDBを使うべきじゃない理由』というのがあるらしい

記事 https://fa-works.com/blog/why-you-should-never-ever-ever-use-mongodbなかなか香しいな。 というよりコイツ他のブログも結構ヒドイw とりあえず不満をぶちまけるタイプのようだ。で、、事の本質はプロダクトの設計がちゃんと出来ない人はどんな場合…

MongoDB3.2 readConcernの挙動について

実装 mongosの場合はもうちょっと複雑になるが、レプリカセットの場合はこの辺に実装があるようだ === /db/repl/replication_coordinator_impl.cpp === auto loopCondition = [this, isMajorityReadConcern, targetOpTime] { return isMajorityReadConcern ?…

MongoDB3.2 ReleaseNote所感

そろそろ3.2も手を付けようと思うので、検証がてらつらつらと。。 リリースノート https://docs.mongodb.org/manual/release-notes/3.2/非常に丁寧な日本語訳があるので、こちらもどうぞ http://qiita.com/fetaro/items/cd570d70623b58b5deef WiredTiger as …

AWS上にハイパフォーマンスMongoDBを構築する方法

AWSインスタンスの選定 AWSインスタンスタイプ一覧以下のインスタンスボリュームが付随しているプロダクトラインが候補になる。 個人的にはi2.xxx が好みである。 r3.xxx メモリ最適化インスタンス i2.xxx SSD容量最適化インスタンス ただし、インスタンスボ…

あまり頻発するような問題ではないようだ

http://d.hatena.ne.jp/hiroppon/20151216/1450251504 以前、MongoDB3.0系のバックアップを取り上げた。色々検証したが、データファイル自体が破壊されるような事は起きなかった。 中のデータがある程度おかしいのかもしれないし、極稀にファイル破壊が起き…

バックアップができない!?

ご存知の様にMongoDBのバックアップは fsyncLock Snapshot fsyncUnlock の流れなのだが、、 最近、MongoDB3.2 系のドキュメントにこんな事が書かれていた Compatibility with WiredTiger Changed in version 3.2: Starting in MongoDB 3.2, db.fsyncLock() c…

MongoDB3.0.xの設定ファイルテンプレ

Advent Calendar にも投稿した内容ですが、MongoDB3系の設定周り。 僕はこんな感じで運用してますよ。という位の内容。/usr/local/mongodb/ 以下に構築する場合の設定周り 1. ディレクトリ構成 バイナリをDLして適当に配置してください。 # mkdir -p /usr/lo…

MongoDB3系(WiredTiger)の現状

ご無沙汰してます。最近全然更新出来てない訳ですが、MongoDBに愛想が尽きて、離れていた訳ではありません。 むしろガッツリ嵌ってます。。最近は MongoDB3 系 WiredTiger を使いながら頑張っている訳ですが・・・ キリの良い所で書こうと思っていたのに、メ…

MongoDB 3.0 リリースノート斜め読み

遂にMongoDB 3.0 が正式リリースされました!! 例によってリリースノートを斜め読みします。 http://docs.mongodb.org/master/release-notes/3.0/ が、、最初に一言で纏めると、まあ、、目玉機能はロックレベルの話だけですよー でわ。。 Pluggable Storage…

MongoDB aggregation の検証

だいぶ空いてしまったが、久々の更新!Aggregate周りを色々検証したので載せておく。基本的なTAG構造。TAGを扱う上でオーソドックスなクエリーと性能を調査。 性能は、people 2000万件、hobies 3200万件、完全ランダムデータで計測。 月数千円で手に入るコン…

Proposal about notablescan option

I issue this ticket from strong sense of impending crisis and wanted to know how others thinks about this. https://jira.mongodb.org/browse/SERVER-15561This proposal is about the feature of the notablescan option. This is not for the progra…

Mongoクエリー・ベース・レプリケーション

レプリカセット間レプリケーション MongoDBではレプリカセットを跨いでデータを同期する手段が無い。 そもそもレプリカセット自体が冗長構成を目的としているので設計に組み込まれていないのだろう。 しかし現実は Staging環境や、PV系/集計系の分離など、…

Index intersection を試してみた。(失敗談)

MongoDB 2.6 からIndex intersectionという機能が追加された。 1つのクエリーで2つのインデックスを使う(かもしれない)機能で、より効率的にクエリーを処理できる。 (どう効率的なのか?はこのへんが詳しい)さて、じゃあ実際に見てみようというのが今…

MongoDB2.6.1 でやっとメジャーバージョンアップ

チェンジログ http://docs.mongodb.org/master/release-notes/2.6-changelog/ひたすらヤバイ者揃いですが、やっとメジャーバージョンアップ程度の品質になったかと。 やっと頑張れば使えるかな?暇が出来次第 http://mongodb.jp/ を早々に生贄にする所存。。

MongoDB 2.4 => 2.6 アップデートした

2.6.1(人柱バージョン)にチャレンジ 2.4.4 => 2.6.1 バージョンアップ手順 今回データファイルには互換性があるので超簡単 ディレクトリ構成 /usr/local/mongo |- bin -> mongodb-linux-x86_64-2.4.4/bin |- mongodb-linux-x86_64-2.4.4 |- data |- logs |- …

MongoDB2.6.0は時期尚早

MongoDBのメジャーバージョンアップはいつもの通り大混乱だ。 最早様式美ですらある。。いつも思うがmongodb.incの連中はmongodb使って欲しい訳だ。 Eat yourown dog food !! jira眺めてて、今問題が多そうな部分 インデクシング(全体的におかしい) Aggreg…

MongoDB2.6リリースノート斜め読み!

ご存知の通りMongoDB2.6がリリースされました!相変わらず乱文で解説!! Aggregation Enhancements Aggregationが強化された。 db.collection.aggregate() がカーソルを返却するようになった 今まで最終結果には64MBの制約があったが、解消されたようだ。 …

mecabでのユーザ辞書でハマった話

コストは単純に足し込むと思ってたのだけど、遷移コストなんてものがあるのね。。 日本テレビ東京で学ぶMeCabのコスト計算しかし困ったぞ、、cost 0 でユーザ辞書に登録しても採用されない問題!どんな事が起きるかというと、、(形態素解析の例としては良く…

MongoDB vs MySQL性能比較

MongoDB Aggregation FWシリーズの最後 - Aggregation FW機能、SQLとの比較 - Aggregation FWの特徴と地雷 - (今回)MongoDB vs MySQL性能比較Aggregation FWについては、大体、把握している情報を吐き出したと思う。 MongoDBのRDBMSライクな機能について性…

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もあるコレクションで起きてるっぽい ・そこには古くて…

自然言語解析 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ちゃんを使って、自然言語処理も一式書いてみたが こち…

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…

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…

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…

MongoDB 2.4 Analyzerをアナライズした!

前回のエントリーで釈然としなかったAnalyzerの戻す値が信用出来ない件。 このままじゃ、安心して使えないので解析した。 MongoDB analyzer 問題 db.serverStatus().mem.resident mongodプロセスが利用している物理メモリサイズ db.serverStatus({workingSet…

MongoDB 2.4 の新クエリーcapped arrayを試した

capped arrayの機能と性能を検証をした。 結論 capped arrayでは配列数が多い場合、明らかにsortが性能劣化する。 (使い難いが)sortを使わない場合は殆ど気にしなくて良いレベルになる。 LRUキャッシュに使うにはちょっと厳しいかもしれない。。 capped ar…

MongoDB 2.4 の新クエリー$setOnInsertを試した

$setOnInsertの機能と性能を検証をした。 結論 $setOnInsertには副作用は無さそう。積極的に使っていきたい。 $setOnInsertの機能 upsertと組み合わせて使う。 upsert レコードが無かった場合はinsertとして働き既にレコードがあった場合はupdateとして働く…

MongoDB2.4新機能 Working Set Analyzer

Working Set Analyzer MongoDB2.4からはサーバリソースの管理・評価にAnalyzerが使えるようになりました。利用方法は既存のコマンドdb.serverStatus()を叩くだけです。 マニュアル 翻訳 workingSet New in version 2.4. Example:output of the workingSet fi…

Scheme design in MongoDB.

非常に参考になるMongoDBのノウハウ集を和訳(&少々所感)しました。内容はデータベースの基本に忠実です。 データサイズを圧縮し、レコードの移動を防ぎ、効率の良いクエリーを発行しろという事です。 突飛な手法では無いので理解し易い。 One of things t…

MongoDB 2.4 認証周り

以前、盛大にハマったので、備忘録です。 コアサーバ keyFileオプションの扱い(2.2から変わったかもしれない。。。) keyFileオプションを指定すると、authオプションも指定された事になる。 つまりkeyFileオプションはレプリカセット・ノード間の認証と、…

MongoDB で isExist

MongoDBでドキュメントがあるか無いか?を調べたい時 原文 Checking if a document exists -- MongoDB slow findOne vs find 参考になったので和訳した One of the biggest optimisations to make MongoDB writes faster is to avoid moving documents by do…

MongoDB2.4 リリース(和訳)

MongoDB 2.4 released を和訳(&少々所感)しました。 和訳 The MongoDB Engineering Team is pleased to announce the release of MongoDB 2.4. This is the latest stable release, following the September 2012 release of MongoDB 2.2. This release c…