13

私は現在、かなり珍しい要件を持つプロジェクトに取り組んでおり、それを処理するための最良の方法についてのアドバイスや、ソリューションの構築に役立つ情報へのポインタさえも得たいと思っています。

わかりました、これが私がする必要があることです。アプリケーションはさまざまなタイプのメディア ファイルを保存および管理しますが、アプリケーションの展開ごとにメディア ファイルのメタデータ要件がまったく異なります。

このメタデータには、さまざまなタイプの任意の数のフィールド (1 行のテキスト、複数行のテキスト、チェックボックス、選択された値など) を含めることができ、多くの場合、特に存在と一意性の検証などの検証が必要になります。

アプリケーションは値を簡単に取得できる必要があり、最も重要なことは、これらのフィールドで完全な検索機能を処理できる必要があることです。

私が検討したオプションの 1 つは、データベース テーブルに各メディア ファイルの各メタデータ フィールドのプロパティ名と値が含まれているだけのプロパティ リスト配置を使用することでした。しかし、このソリューションのプロトタイプを作成すると、特にデータベースがかなり大きくなる可能性がある場合、特にレコードの検索と取得には十分に効率的ではないことがすぐに明らかになりました。田畑。また、検索を実行して関連するレコードを取得するためのクエリは、すぐに非常に複雑になりました。

システムが現在使用している別のオプションは、メタデータ構成が前もって定義され、展開中に移行が実行されて標準名のテーブルとモデルが作成され、システムが使用するメディア モデルをそれに関連付けることができます。これは通常は問題なく動作しますが、展開とテストで重大な問題が発生します。

たとえば、デプロイまで構成がわからない場合、単体テストの作成ははるかに困難になります。サンプル構成を作成してその方法でコードをテストすることはできますが、特定の展開の特定の要件をテストすることはできません。

同様に、開発中は現在、構成からメイン フォルダーに移行をコピーして実行し、すべてのテストと開発を行ってから、その移行をロールバックしてメイン フォルダーから削除することを忘れないでください。アプリケーションは標準状態です。これは、バグを修正していて、テストとデバッグの目的でアプリケーションを特定の構成にする必要がある場合に特に困難になります。さまざまな構成を切り替えようとすると、本当に悪夢になります。

理想的には、サーバーの起動時に構成ファイルから検証などを含むテーブルとモデルを動的に作成できるようにしたいです。アプリケーションが現在使用している設定ファイルを変更するだけで、それぞれが独自のテーブルを持つ 1 つのデータベースで複数のメタデータ設定を維持できれば、さらに良いでしょう。

これはRailsで実行できると確信していますが、過去数日間の調査中に、Railsを構築する方法の正しい方向を示すことができる情報がほとんどないため、助けや提案があればよろしくお願いします!

4

5 に答える 5

4

私の理解が正しければ、Rails にはこれらの問題を解決するのに役立つ便利なトリックがいくつかあります。

ActiveRecord ORM では、単一テーブルの継承パターンを使用するか、ポリモーフィックな関連付けを使用して、リレーショナル データベースで実行しようとしていることをモデル化できます(... もう少し複雑ですが、より柔軟です)。ポリモーフィックな関連付けにより、モデルはさまざまなタイプの他のモデルに属することができます。このトピックに関する最近の Railscast がありますが、有料のサブスクリプションが必要なのでリンクしません。

展開側では、多くのことを手動で行っているように思えますが、パターンが現れるまでは、これが正しい開始方法です。パターンを確認し始めると、構成、ビルド、デプロイの自動化に使用できる優れたプログラム ( Capistrano、OpsCode ChefPuppetなど) がいくつかあります。また、より良いワークフローを実現するために、構成と展開をソース コード リポジトリと統合することでメリットが得られる場合もあります。たとえば、Git を使用すると、さまざまなメディア ファイル タイプのトピック ブランチを定義し、トピック ブランチに一致する各ブランチに異なる構成を設定できます。

Martin Fowler の優れた本 ' PoEAA ' と彼のWeb サイトのいくつかのトピックをチェックしてみてください。答えはかなり一般的ですが、この答えが役立つことを願っています。あなたの質問は非常に幅広く、単純な答えは 1 つではありません。

于 2013-04-16T19:32:50.277 に答える
2

アプリケーションの展開ごとに、メディア ファイルのメタデータ要件がまったく異なります。

データベースにはmongoDBを、ORM にはMongoidを使用することをお勧めします。これにより、恐ろしいスキーマ操作、動的モデル/テーブル、およびすべての恐怖なしに、必要に応じてスキーマを変更するために必要な柔軟性が得られます。

アプリケーションは値を簡単に取得できる必要があり、最も重要なことは、これらのフィールドで完全な検索機能を処理できる必要があることです。

これはデータベースの問題ではなく、検索の問題です。最新バージョンの mongoDB で全文検索機能を試してみることをお勧めします。それがニーズを満たさない場合は、Tire gem (Rails とうまく統合された Elasticsearch クライアント)と組み合わせてelasticsearchを試してください。

于 2013-04-27T05:27:16.087 に答える
1

あなたが説明したことは、キー値ストレージを使用した非伝統的なストレージメカニズムの定義要件とまったく同じように聞こえます。

私はこれを次のように感じます:

  • 「完全に異なるメタデータ要件」および「-「異なるタイプの任意の数のフィールド」-キー値データ ストアには多くの場合、スキーマがなく、その場で変化するさまざまなレコード レイアウトに対して非常に柔軟です。

  • アプリケーションは値を簡単に取得できる必要があり、最も重要なことは、これらのフィールドで完全な検索機能を処理できる必要があることです。キーと値のストアは、クエリの行を取得してフィルター処理する際に非常に効率的になるように作られています。

「データベース テーブルに各メタデータのプロパティ名と値が含まれているだけのプロパティ リスト配置」は、基本的にキー値ストアです。

いくつかのオプションは次のとおりです。

于 2013-04-15T00:26:18.790 に答える
0

おそらく、メタデータを保存する jsonb フィールドを使用し、それらをクラディングするための動的ビューレイヤーを作成します。

于 2018-08-01T14:01:09.280 に答える