2

学生が教授にコメントを残せるように、非常に単純な MySQL と PHP アプリを書き直して、NOSQL と Node.js をいじってみたいと思っています。

Table: Prof
Columns: id, first, last, university, department

Table: Comments
Columns: id, user_id, likes, data

この関係は、基本的に教授には多くのコメントがあり、コメントは 1 人の教授に属します。

CouchDB/JSON バージョンは次のようになると思います。

{ "Profs" : [{
  "Comments" : [ {"data" : "comment1", "likes" : 42 } , { "data" : "comment2", "likes" : 1} ],
 "first" : "Carlos",
 "last" : "Marx",
 "university" : "some university",
 "department" : "math"
}, {...another prof with comments...}], 
 }

私の最初の質問は、すべてのデータを CouchDB が機能するものにインポートするために実行できるツールまたはスクリプトがあるかどうかです。そうでない場合、何をお勧めしますか?phpmyadmin から .sql および .cvs にエクスポートできます。

2 番目の質問は、JSON でデータを正しく構造化したかどうかです。

ありがとう!

4

2 に答える 2

3

これは、古典的なブログ投稿+コメントタイプのシナリオです。

DB全体にモノリシックJSONドキュメントを使用する代わりに、コメントと教授を別々のJSONBLOBに分割します。IDにはメールアドレスを使用することをお勧めします。これは、IDが一意であり、ほとんどの人が持っているためです。CouchDBのinclude_docs機能を使用して、教授ドキュメントとコメントドキュメントをリンクします。

{
  "_id": "carlos_marx@uni.de",
  "university" : "Some Uni",
  "department" : "Math",
  "name" : "Carlos Marx"
}

{
  "_id": "comment1",
  "prof": "carlos_marx@uni.de",
  "comment": "Very smart"
}
于 2012-07-04T12:14:32.773 に答える
2

MySQL データベースを CouchDB やその他の NoSQL データベースにエクスポートするだけではありません。これらは異なるパラダイムであり、データの保存方法についての考え方を変える必要があります。リレーショナル データベースとドキュメント データベースの両方に優れた使用例があり、多くの重複がありますが、どちらも異なる点で優れています。

NoSQL データベースでは、データがどのように使用されるかを理解することが非常に重要です。アプリケーションによるデータの書き込み方法と使用方法、およびデータが頻繁に更新されるかどうかはすべて、ドキュメントの設計方法に非常に重要な影響を与えます。たとえば、あなたの例では。コメントを編集できますか?コメントはどのように表示されますか? 常にすべてを表示しますか、それとも結果をページングしますか? コメントはどのくらいの頻度で追加されますか? 削除できますか? これらの質問のいくつかに対する答えを知らなければ、CouchDB がこの問題に対する適切な NoSQL ソリューションでさえあるかどうか、はっきりとは言えません!

これはあなたの質問に対する間接的な回答で申し訳ありませんが、リレーショナル データベースから NoSQL ソリューションへの移行を、テーブルからコレクションへの単純なマップとしてアプローチすることは失敗のレシピです。ドキュメントが CouchDB でどのように表示されるかを設計することに時間をかけたら、データは変換プロセスを経る必要があります。それは多くの形をとることができます。MySQL から読み取って CouchDB に書き込むことができるアプリケーションを作成することも、他の形式にエクスポートしてスクリプトでインポートすることもできます。MySQL データベースを取得して Couch データベースに変換する魔法のボタンはありません。存在するとしても、上記の問題により存在しないはずです。

于 2012-07-04T08:35:54.687 に答える