93

Ruby on Rails を使って趣味の (無収入の) プロジェクトを始めています。私は Postgresql を使用して Rails でかなりの量の開発を行ってきましたが、正規化されたスキーマをかなりうまく模倣することができます。ただし、Mongrodb は光沢があり、新しく見えます。何か新しいことを試すのに、趣味のプロジェクトほど良いものはありません。

Mongodb を使い始めたときのことを思い出してください。後で学んだテクニックで、「始めたときに知っていればよかった」と思うようになったのはどのようなテクニックでしたか。知っていれば、最初から使用していたと思われるプラグインは何ですか? ブックマークしたい参考文献は何ですか?

4

5 に答える 5

63

Rails で MongoDB を使用する場合は、MongoMapper の推奨事項に間違いなく賛成します。ただし、(これまでのところ) いくつかのブログ投稿以外にドキュメントがないことを警告しておきます。ソース コードを掘り下げて動作を確認するのに慣れていない場合は、おそらくまだ慣れていません。

Rails 以外で作業している場合は、MongoMapper を使用しないことをお勧めします。これは、MongoDB を SQL に基づく ORM に期待されるものに似たものにしているため、MongoDB のパワーとその背後にある異なる考え方について、実際にはよくわかりません。低レベルの ruby​​ ドライバーや、javascript コンソールをいじってみてください。

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

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

于 2010-01-26T22:28:40.427 に答える
26

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

Mongomapperの代わりにMongoidを使用する

http://mongoid.org/

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

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

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

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

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

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

二言で言えば:素晴らしいコミュニティ。

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

https://github.com/nmerouze/machinist_mongo

かなりうまく機能します。

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

あなたは機械工と一緒に偽造を使うことができます。素晴らしいミックス。

https://github.com/sevenwire/forgery

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

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

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

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

さらに情報が必要な場合は私に聞いてください。

編集:

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

于 2011-01-06T21:37:06.817 に答える
8

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をサポートしています

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

5. SQLではSQLインジェクション、MongoDBではアレイインジェクションです

したがって、データを書き込むときは(文字列)を使用するか、is_arrayを確認してください

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

6. HDD DOS

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

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

于 2011-10-10T18:36:04.177 に答える
3

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

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

Mike Dirolf がインタビューを受けました... 彼は MongoDb プロジェクトに取り組んでいます。ああ、そして音質は素晴らしいです。

Mike Dirolf は 10gen のソフトウェア エンジニアで、MongoDB プロジェクトに取り組んでいます。彼は主に Python と Ruby のクライアント ドライバーに取り組んでいますが、MongoDB について話す時間も取っています。EuroPython、Strange Loop Conf、RubyEnRails、RuPy、RubyConf、およびニューヨーク、ロンドン、ワシントンのミートアップ グループでプレゼンテーションを行っています。 DCとサンフランシスコ。

于 2010-02-01T10:28:07.750 に答える
2

junemakers mongo-mapper を確認する必要があります: http://github.com/jnunemaker/mongomapperしかし、純粋な Ruby Mongo ドライバーで少し遊んで、mongo-mapper がフードの下でどのように機能するかを確認することもお勧めします。Ruby を使用して Mongo データベースにデータを入れるのはそれほど難しくありません。

Ruby Mongo チュートリアルは既に見つけたと思います。念のため、リンクは次のとおりです: http://www.mongodb.org/display/DOCS/Ruby+Tutorial

于 2010-01-24T11:57:20.520 に答える