1

私は Codeigniter を使用してリレーショナル データベースに取り組んできましたが、DataMapper は深刻なプロジェクトには役に立たないことがわかりました。Codeigniter の Active レコードは、多対多または 1 対多の方法論も提供しないため、役に立ちません。DataMapper は遅く、構成できません!

  1. クエリを実行すると、テーブル全体がオブジェクトに読み込まれます。
  2. 最初に「A」を入力すると、2 回目に「A」を入力すると、データベースに 2 つの As が存在します。SQL のような無視オプションはありません。また、アイテムが存在するかどうかを確認するためにクエリを実行し、存在しない場合は挿入する必要があります。
  3. 彼らはそれのために多くのコーディングを行いましたが、巨大なデータベースを作成するのには適していないようです
  4. クエリは高速ではありません。

それはコミュニティ内のコンセンサスのようです。php で純粋な mysql を使用して、多対多および 1 対多の操作を行うことをお勧めしますか? それとも私が間違っていると思いますか!その上でお気軽にご相談ください。私の質問は、プロの Web デザイナーとしてデータベースを作成するために何を使用していますか?

4

1 に答える 1

17

ちょっと変わった発言。

要件を定義してから、それらの要件を満たすツールを選択します。その逆ではありません。

Datamapper は、オブジェクト リレーショナル マッパーである ORM です。この場合、アクティブ レコード デザイン パターンに従います (アクティブ レコードではなく、クエリ ビルダーである CI の AR と混同しないでください)。データ エンティティ (この場合は RDBMS テーブルのレコード) をオブジェクトにマップし、それらのオブジェクト間の関係を認識します。

それが ORM の機能です。PHP のネイティブ関数を使用してデータベースに直接アクセスするより遅いですか? 絶対。追加された抽象化のレベルに応じて、処理時間が追加されます。

ORM の目標は、データ操作で最速になることではありません。コントローラ ロジックからデータ操作を抽象化することが目標です。これにより、アプリケーションの作成がより簡単かつ迅速になり、そのようなアプリケーションの維持が絶対的に速くなります。ビジネス コンテキストの時間 == お金と同様に、ここにメリットがあります。無料でコーディングし、2 ビットの共有ホストでコードを実行する場合、ORM は適していない可能性があります。

また、ORM はスイス アーミー ナイフではありません。これは、データ コレクションに対するオブジェクト指向のアプローチである特定の目的のために設計されており、これらのコレクションとその関係を操作します。

ジョブに適したツールでない場合は使用しないでください。奇妙な基準に基づいて 100 万件のレコードを一括更新する必要がある場合は、代わりにネイティブ SQL クエリを記述します。データ操作コードをコントローラーから抽象化したままにするために、カスタム モデル メソッドでこれを行います。

あなたの具体的なコメントについて:

  • Datamapper は遅い: 何と比べて?
  • これは構成可能ではありません: http://datamapper.wanwizard.eu/pages/config.htmlを参照してください。
  • テーブル全体をロードします。テーブル全体を get() すると、はい。私には奇妙に思えません。
  • 同じデータで 2 つのオブジェクトを作成すると、2 回保存されます: はい。同じ UPDATE クエリを 2 回実行した場合も同様です。
  • 大規模なデータベースには適していません。テラバイト サイズのデータ​​ベースを持つ Datamapper でサポートされているアプリケーションを使用しているため、サイズとの関係はわかりません。
  • 高速ではありません: 回答番号を参照してください。1.

プロの Web デザイナーであれば、MVC アーキテクチャを使用してアプリケーションを設計および構築する適切な方法を認識し、その仕事に適したツールセットを使用して、クライアントにアプリケーションをタイムリーに配信できるようにする必要があります。

時間 == お金です。より迅速に提供でき、より迅速に維持または改善できれば、顧客を維持できます。ORM はそれを支援します。ただし、意図されていない目的で使用しないでください。

于 2012-04-25T20:01:23.753 に答える