DjangoプロジェクトをMySQLからMongoに変換すると、大きな落とし穴はありますか?

StackOverflow https://stackoverflow.com/questions/4718580

質問

mongodb w/ mongoengineを試してみたい。私はDjangoやデータベースを初めて使用していますが、外国の鍵、参加、円形の輸入品に適合しています(名前)。私は最終的にこれらの問題を乗り越えることができることを知っていますが、マンゴは私がやっていることのためのより単純な解決策のように思えます。私の質問は、私は多くのプラグ可能なアプリ(ImageKit、Haystack、登録など)を使用しており、切り替えを行うとこれらのアプリが機能し続けるかどうかを知りたいと思っています。もしそうなら、私が遭遇する既知の頭痛はありますか?mysqlで頭を叩き続けるかもしれません。

役に立ちましたか?

解決

すべての標準Djangoアプリに標準のRDBMSのいずれかを使用できない理由はありません。その後、アプリにMongo。 Django OrmからのものをMongoの方法で処理するすべての標準的な方法を交換するだけです。

したがって、urls.pyとそのきちんとしたパターンのマッチングを維持することができ、ビューはパラメーターを取得し、テンプレートはオブジェクトを取得できます。

RDBMSモデルに密接に結びついていると思うので、クエリセットを失うことになりますが、実際には怠laz的に評価されているリストです。モデルの作成に関するDjangoドキュメントを無視して、Mongoパラダイムでデータベースビジネスロジックをコードアップしてください。

ああ、データに簡単にアクセスできるDjango管理インターフェイスはありません。

他のヒント

あなたはチェックアウトしたいかもしれません django-nonrel, 、これは、DjangoのNOSQLバックエンドでの若いが有望な試みです。現時点ではドキュメントが不足していますが、それを解決するだけでうまく機能します。

MongoEngineをDjangoで使用しましたが、たとえばMongo_models.pyのようなファイルを作成する必要があります。そのファイルでは、Mongoドキュメントを定義します。次に、各Mongoドキュメントに一致するフォームを作成します。各フォームには、Mongoに保存されているものを挿入または更新する保存方法があります。 Djangoフォームは、データバックエンドに差し込むように設計されています(少しクラフトがあります)

注意:ドキュメントやモデルで説明できる非常によく定義され構造化されたデータがある場合は、Mongoを使用しないでください。そのために設計されておらず、PostgreSQLのようなものははるかにうまく機能します。

  • リレーショナルまたはよく構造化されたデータにPostgreSQLを使用しています。小さなメモリフットプリントと良い応答。
  • Redisを使用して、メモリキュー/リストでキャッシュまたは操作します。あなたがそれに対処するための記憶を持っていることを提供する素晴らしいパフォーマンス。
  • Mongoを使用して、大規模なJSONドキュメントを保存し、マップを実行して(必要に応じて)削減します。ルックアップをスピードアップできる場合は、特定の列でインデックスを使用してください。

四角い穴を埋めないでください。それはそれを埋めません。

マンゴはバズの言葉であるため、誰かがリレーショナルDBをマンゴに交換したいと思っている投稿が多すぎます。誤解しないでください、マンゴは本当に素晴らしいです...あなたがそれを適切に使用するとき。私はマンゴを適切に使用するのが大好きです

事前に、モデルを出荷する既存のDjangoアプリでは機能しません。 Mongodbまたは他のNosql StoragesにDjangoのモデルデータを保存するためのバックエンドはありません この時点で そして、データベースのバックエンドはさておき、モデル自体はやや論争のポイントです。django.contrib appsを含む)は、モデルテンプレートビュートライアドを出荷する場合、目的のためにわずかに異なるモデルが必要な場合はいつでも、アプリケーションコードを編集する必要があります(Plane誤り)、Runtime(Magical)、ForkでインポートされたPythonモジュールの内容を動的に編集する必要があります。アプリケーションソースは完全に(面倒)または追加の設定を提供します(良いが、それはまれな出会いであり、 django.contrib.auth おそらく、使用するモデルを動的に指定できるアプリケーションの唯一の広く知られている例です。 AUTH_PROFILE_MODULE 設定)。

これは悪いと聞こえるかもしれませんが、それが本当に意味するのは、SQLとNOSQLデータベースを並行して展開し、アプリからアプリから移動する必要があることです。特定のアプリ、地獄、独自のカスタムアプリをロールしてください。

nosqlの貯蔵庫が心にある素晴らしいdjangonautsがたくさんあります。過去のDjangoconのプレゼンテーションからのストリームに従えば、毎年、DjangoがNosqlの保管をどのように活用すべきかについて重要な議論がありました。今年または次の年に、誰かがアプリとモデルAPIをリファクタリングして、Django Coreの一部としてNosQlストレージのすべての異なるフレーバーを最終的に統合できるクリーンなデザインへのパスを開くと確信しています。

私は最近これを試しました(ただし、MongoEngineなし)。膨大な数の落とし穴があります、私見:

  • 管理インターフェイスはありません。
  • Auth django.contrib.authはDBインターフェイスに依存していません。
  • 多くのことがdjango.contrib.auth.userに依存しています。たとえば、RequestContextクラス。これは大きな障害です。
  • 登録なし(DBインターフェイスとdjango.contrib.authに依存しています)

基本的に、django.contrib.authへの参照をDjangoインターフェースで検索すると、壊れるものがいくつ表示されます。

とはいえ、MongoEngineはDjango.contrib.authをより良いもので置き換える/補強するためのサポートを提供する可能性がありますが、それに依存するものがたくさんあるので、あなたがどのようにモンキーのパッチを置くかを言うのは難しいです。

主な落とし穴(私にとって):参加しません!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top