0

私の職場では、データベースに Oracle を使用しています。これはうまくいきます。私はメインのデータベース管理者ではありませんが、それを扱っています。私が気に入っていることの 1 つは、DB には、データの保存に関連するロジックを処理して取得できる PL/SQL を使用したロジック層が組み込まれていることです。MVC アプリケーション (PHP/Zend Framework) を軽量化し、デスクトップやモバイルなどの別のプラットフォームをデータに結び付けるのが簡単になるため、これは本当に気に入っています。

ただし、couchdb または mongodb を使用したい個人的なプロジェクトがあり、同様の目標を達成したいと考えています。mvc/framework の外側に、主要なアプリケーションが通信する API レイヤーが必要です。実際にはデータベースと直接対話しません。結果を取得するために、設計ドキュメント (couchdb) または mongo に類似したものを指定します。そして、その API レイヤーは受信データを検証し、データ自体が適切に保存および更新されていることを確認します。新しいユーザーの保存など、フレームワークでは、保存する必要があるキー/値を含む json オブジェクトを送信するだけで済み、API レイヤーは必要な場所にデータを保存します。

この API にはおそらく UI がありますが、管理目的と私の作業を楽にするためだけです。一般に、常に json 文字列で応答するか、場合によっては事前レンダリング/キャッシュされた html で応答します。とにかく、各 API レイヤーはアプリケーションに固有であるためです。

誰かがこのようなことをしたかどうか、またはこれを達成できる方法についてのヒントがあるかどうか疑問に思っていました。現在、Python でアプリケーションを作成しようとしていますが、フロント エンドは Angularjs のようなものになる可能性があります。バックエンドのnode.jsも検討していますが。

4

1 に答える 1

1

私たちは現在の仕事でこれを正確に行っています。バックエンドにMongoDBがあり、その上にRESTful APIがあり、フロントエンドにPHP/Zendがあります。

ほとんどのデータは読み取り専用であるため、そのデータをMongoDBにインポートすると、RESTful API(Java)がデータを提供します。

このアプローチで考慮すべきいくつかの事柄:

  1. APIで一般的な並べ替え/ページングロジックを記述します。データのリストにこれが必要になります。ユーザーはhttp://yourapi.com/entity/1?pageSize=10&page=3のようなものを渡すことができます。

  2. 人々がクエリするものと一致するように、Mongoで適切なインデックスを作成してください。ユーザーを保存していると想像してください。MongoでユーザーIDフィールドにインデックスを作成するか、すべての呼び出しですでにインデックスが作成されている_idフィールドを使用します。

  3. 特定のドキュメントにすべての関連データを含めるようにしてください。Mongoは、Oracleで慣れているような結合を行いません。モデリングデータはドキュメントデータベースとは大きく異なることに注意してください。

  4. データベースに依存しないレイヤー(中間層API)を作成したいようです。それは良い目標です。Mongo固有の用語が公開されたAPIに忍び込まないように注意してください。Mongoには、より一般的な用語でマスクする必要がある特定の演算子/概念があります。たとえば、$set演算子があります。それを直接公開しないでください。

最後に、CouchDBとMongoでかなりの経験を積んだ後、私は間違いなくMongoに行きます。

于 2013-02-19T03:10:31.303 に答える