2012-05-03 9 views
4

これを試して試してみるのが一番良いかもしれませんが、mysqlから非常に単純な構造をマイグレートするための最良の方法を理解しようとしています。 mongodb。 mysqlに 'articles'というメインテーブルがあり、 'categories'と 'category_linkage'という2つのテーブルがあります。カテゴリはすべてIDと名前を持ちます。記事にはIDとその他のデータがあります。リンケージテーブルは記事をカテゴリに関連付けるので、各記事に関連する無限のカテゴリを持つことができます。MySQLからMongoDBへの移行 - ベストプラクティス

MongoDBのアプローチでは、同じ記事に属する記事データとカテゴリIDを同じコレクションに格納するだけで、2つのデータコレクション(記事用とカテゴリ用)が2つしかありません。私の考えは、記事のカテゴリを追加/削除する場合、その記事のドキュメントを更新するだけです($ pull/$ push)、いいえ?

+0

テーブルをマージするのが適切です。記事に記事を保存する場合は、カテゴリのコレクションが必要ですか?一度にどこかにそれらをリストアップすることを私はおそらく思いますか? –

+0

ええ、まあまあ、カテゴリを追加/編集/削除することができます(サイトのナビゲーションなど)。 – jpea

答えて

3

、良いモデルは次のようになります。

{"article_name": "name", 
"category": ["category1_name", "category2_name", ...], 
"other_data": "other data value" 
} 

ので、記事の文書に直接カテゴリ名を埋め込みます。記事カテゴリを更新するのは簡単ですが、カテゴリを削除するには、そのカテゴリに属する​​すべての記事を変更する必要があります。カテゴリを削除することが頻繁に行われる場合は、それらを別々に保つことがパフォーマンス上の良い考えになるかもしれません。

このアプローチでは、カテゴリ名にクエリを行うことも簡単になります(名前を別のクエリでidにマップする必要はありません)。

したがって、データをモデル化する「正しい」方法は、一般的にmongodbや他のnosqlデータベースの場合のように、想定される使用例に依存します。

+0

カテゴリが別の場合は、カテゴリIDを記事コレクションに入れ、残りのカテゴリデータ(猫の名前、ID、スラッグなど)で 'カテゴリ'コレクションにリンクするIDを使用するだけです)? – jpea

+0

はい、これは私には意味があり、うまくいきます。覚えておいていただきたいのは、記事を表示するにはカテゴリの名前を取得するためにカテゴリコレクションにもっと多くのクエリが必要になることです。別のオプションは、idとしてカテゴリ名を使用することです。ただし、カテゴリ名は一意である必要があります。 – jhonkola

3

Macコンピュータにアクセスできる場合は、MongoHub GUIを試すことができます。それは "MySQLからのインポート"機能を持っています。私の意見で

+0

見つかりませんでした:( –

+0

ウィンドウの右上にあります。http://imgur.com/7ZcisYh – thomas

+0

実際、問題はボタンがまったくないことでした。最近のバージョンのmongohubではボタンを追加する必要がありますhttps://www.dropbox.com/s/sewbh0gc62sycyx/Screenshot%202014-12-17%2010.29.35.png?dl=0 –