web-dev-qa-db-ja.com

Mongodb:使用する前に知っておくべきことは?

Ruby on Railsを使用して趣味(収益なし)プロジェクトを開始しています。Postgresqlを使用して、Rails正規化されたスキーマをかなりうまく模倣することはできますが、Mongrodbは光沢があり、新しいように見えます。

Mongodbの使用を開始したときのことを思い出してください。 「始めたときにそれを知っていたなら!」自分だけが知っていれば、最初から使用していたプラグインを発見しましたか?ブックマークしたいリファレンスは何ですか?

92
Wayne Conrad

RailsでMongoDBを使用する場合、MongoMapperの推奨事項は間違いなく2番目です。ただし、いくつかのブログ投稿以外にドキュメントは(今のところ)ないことを警告します。ソースコードを掘り下げて物事がどのように機能するかを気に入らないのであれば、おそらくあなたには向いていないでしょう。

Rails以外で作業している場合は、MongoMapperから離れることをお勧めします。 MongoDBをSQLでサポートされたORMに期待するものに似せて機能させているため、MongoDBの背後にあるさまざまな考え方の力についての良いアイデアを実際に提供することはできません。下位レベルのRubyドライバー、さらにはJavaScriptコンソールでも試してみてください。

特にスキーマを正規化する方法を知っていると述べたので、私がお勧めするもう1つのことは、MongoDBを今のところデータベースとして考えることですnotです。 MongoDBでデータを整理する方法は、リレーショナルデータベースとは大きく異なります。 Rubyハッシュを格納および取得する場所として考えてみてください。MongoDBを使用していくつかのリレーショナルな処理を実行できますが、必要なのは自己完結型のドキュメントのみを使用することです。 NoSQLに頭を包もうとしています。

どのリンクを見るべきかについては、MongoDBサイトでできることをすべて読むことを強くお勧めします。彼らのドキュメントはとても良いです。特に、 高度なクエリマルチキーインデックス 、および MapReduce を見て、独自の利点と長所を理解してください。 NoSQLデータベース。

63
Emily

私はあなたとほぼ同じ段階にいます。 MongoDBで新しいプロジェクトを開始します。私は約7週間の経験があります。これは私が非常に便利だと思ったものです:

Mongomapperの代わりにMongoidを使用します

http://mongoid.org/

ドキュメントは素晴らしいです。真剣に、素晴らしい。すべてのドキュメントを読むのに約15分かかります。Mongoidでできることとできないことを非常に正確に把握できます。

明日、mongoidの新しいメジャーバージョンのリリース候補がリリースされます。それは多くの有用なものをもたらすでしょう。

Rails 3.を使用しています。開発バージョンをインストールするには、これをgemファイルに追加します。

gem 'mongoid'、 "〜> 2.0.0.beta"

現在のベータ版は20ですが、私が言ったように、明日にはリリース候補版があります。

また、Googleグループへの参加もお勧めします。交通量が少なく、人々はどんな質問にも喜んで答えてくれます。例えば、私は彼らに私の最初のDBモデル設計を見せ、それを改善する多くの方法を与えてくれました。 Mongoidの作成者もあなたの質問に答えます。

2つの言葉で:素晴らしいコミュニティ。

MongoでMachinistを使用できるようにするこのプラグインがあります。

https://github.com/nmerouze/machinist_mongo

かなりうまくいきます。

gem 'machinist_mongo', :require => 'machinist/mongoid', 
:git => 'http://github.com/nmerouze/machinist_mongo.git',
:branch => 'machinist2'

MachinistでForgeryを使用できます。素晴らしいミックス。

https://github.com/sevenwire/forgery

もう一つ言いたいことがあります。私は関係データベースの世界から来たので、これは最初は本当に奇妙に聞こえました。mongoデータベースにファイルを保存できます。

実際、以前のように管理するよりも速くなる可能性があります。これは、シャーディングに対するmongoのサポートが原因です。シャーディングとは、コンピューターのクラスターを使用してMongoデータベースを提供できることを意味します。シームレスです。マスタースレーブしたがって、多くのコンピューターからファイルを提供し、それぞれが一部を送信することができます。それは非常にうまくスケーリングします:)

これは、GridFSを使用して行われます。 http://www.mongodb.org/display/DOCS/GridFS

Mongoidはそのマスター/スレーブ構成をサポートしています。

さらに情報が必要かどうか尋ねてください。

編集:

また: http://railscasts.com/episodes/238-mongoid

26
Nerian

1.大文字と小文字を区別しないクエリ

eq

"_id": "1da259c70fe3392c3b000002",
"name": "Dany"

array('name' => 'dany') :: results 0
array('name' => 'Dany') :: results 1

2.最後の挿入ID:

$coll->insert($user, true);
echo (string) $user['_id'];

3. _idはMongoIdオブジェクトです

IDで検索:

$p->findOne(array('_id' => new MongoId( $UID  )), array('proj'));

_idを表示:

$coll['_id'] = ( string ) $coll['_id'];

また、_idはコレクションごとにのみ一意であり、他のサーバーでは異なる場合があります

4. MongoDBはLIMIT、OFFSET、ORDERをサポートしています

事前の並べ替えには、Aggregation Frameworkを使用できます。

5. SQLではMongoDBのSQLインジェクションは配列インジェクションです

そのため、何らかのデータを使用する場合(string)、またはis_arrayを確認します

$req = (string) $range['name'];

6. HDD DOS

pHPのデフォルトの_POSTサイズは8MBです。Mongoでは、ドキュメントごとに16MBの制限があります。したがって、分析スクリプトでユーザースプーフィングeq USER_AGENT STRINGを想像し、1回の挿入ごとに16MBを送信するとします。

7. MongoDbには過去にいくつかの問題がありましたが、現在3.0は非常に素晴らしく安定しています。

8
user956584

.NET RocksからのMongoDbポッドキャストの素晴らしい初心者/紹介です-

http://www.dotnetrocks.com/default.aspx?ShowNum=507

マイク・ディロルフは審査中です...彼はMongoDbプロジェクトに取り組んでいます。ああ、音質は素晴らしいです。

Mike Dirolfは10genのソフトウェアエンジニアで、MongoDBプロジェクトに取り組んでいます。彼は主にPythonとRubyのクライアントドライバーに取り組んでいますが、MongoDBについて話すのにも時間がかかります。ニューヨーク、ロンドン、ワシントンDC、サンフランシスコのグループ。

3
Kris Krause

絶対にjunemakers mongo-mapperを見てください: http://github.com/jnunemaker/mongomapper しかし、純粋なRuby Mongo-mapperが内部でどのように機能するかを確認するためのMongoドライバーRubyを使用してMongoデータベースにデータを入れるのはそれほど難しくありません。

Ruby Mongo Tutorial。を既に見つけていると思います。もしあなたが見つけられなかった場合のために、ここにリンクがあります: http://www.mongodb.org/display/DOCS/ Ruby +チュートリアル

2
t6d