このサイトでこの種の質問をする必要があるかどうかはわかりませんが、Drupalフォーラム here で質問したところ、今のところ返信がありません。
次の要件を満たす必要がある既存のDrupal 7サイトにソリューションを実装する最良の方法を見つけようとしています。
以前は、クライアントはインポート要件を実装しようとしましたが、フィードプラグインと分類構造を使用して住所フィールドの一部を保存すると、遅くなりました(csvファイルをロードするだけで数日)。
私はDrupalでDrupalバックエンドの開発、主にフロントエンド、テーマ(html、js、css/sass、およびわずかなphpを含むテンプレート)に比較的慣れており、いくつかの簡単なことをしていますバックエンドのフォームですが、MySQLとPHPのバックグラウンドがあります。
だから私はモジュールを構築することを考えていました:
私がこれまでに調査したことから:
これが問題への最良のアプローチであるかどうか、およびDrupal 7でこれを実装するためのベストプラクティスは何であるかはわかりません。
Googleを検索しましたが、まだ混乱しています。誰かが私を正しい方向に向けることができますか?
私の最初のアプローチは、BatchAPIを使用して基本的なインポーターを作成し、アドレスデータ(コンテンツタイプではない)を保持するカスタムエンティティを作成し、アドレスフィールドと組み合わせて適切に保存することです。
次に、Search APIとSearch API Solrを使用してこれらのエンティティにインデックスを付けて保存します。その後、Form APIを使用してカスタムフォームを作成するか、ビューを使用してインデックスを公開および検索できます。これはDrupalよりもはるかに高速です。 dbクエリ。これはあなたのサイトを悩ませるものであるため、可能な限り、MySQLが作業を行わないようにしてください。
これにより、Solrで発生したパフォーマンスの問題の多くを解決しながら、「Drupalネイティブ」に近い状態を維持できます。
Form APIを使用して、#ajaxコールバックでフォームを作成し、Search APIクエリからデータをクエリして返すこともできます。
Drupal APIを使用してエンティティ として格納しない限り、インポートは高速ではありません。それらをエンティティとして保存しないと、かなりの作業をせずにビューや検索APIにプラグインするなど、柔軟性が大幅に失われます。フィールドAPIを使用してフィールドを追加することもできませんでした。この時点では、データはフラットなデータであるため、分類フィールドを簡単に追加したり、住所フィールドを使用したりすることはできません。
Solrは常に新しいエンティティと更新されたエンティティのインデックスを作成するので、合理的である限り、インポートを高速化することは実際には優先度(IMO)ではありません。数百万のアドレスがある場合、Drupalは行を非常に高速に解析できるだけであり、これの多くはイベントシステム(エンティティの保存、フィールドのアタッチ、フックの発火、発火の変更など)によるものです。 )entity_save
を呼び出すたびに。ここで高速に支払う価格は、後でそのデータを操作したり、コントリビュートスペースと統合したりするときに払い戻されます。
リンクした要点は、DataモジュールとCSVファイルを使用して行った実験です。これにより、CSVファイル全体がロードされ、load infileを使用してその内容がMySQLにダンプされます。これにより、データがデータベースにすぐに埋め込まれますが、先ほど述べたように、Drupalがそのデータを認識、通信、および拡張できるようにするためには、さらに多くの作業が必要になります。
完全にDrupal以外の別のアプローチは、PostgreSQL(9.4+)データベースまたはSQLに相当しないものにデータをインポートすることです。おそらく Firebase 、それに対して検索を実行します。繰り返しますが、これはSearch API + Search API Solrを実行する場合とほぼ同じですが、クエリを作成してサーバーに送信するためにラッパーを作成する必要があります。したがって、データを整理するためだけに、この作業のすべてを別のシステムでオフロードすることは依然として有効です。それは本当にあなたがどれくらいプログラミングをしたいかによって異なります。
明確にするために、ここにはいくつかのオプションがあります。それは、何らかの方法でDrupalを使用しない場合に、どれだけお腹を満たせるかに依存します。個人的には、データモデルの理解に関してDrupal APIが提供する柔軟性を放棄したくないので、カスタムエンティティを作成してそこから始めます。遅くなりますが、最終的にはモジュールエコシステムでの統合のポイントが増えます。
可能なアプローチは、MySQLデータベースにデータをインポートすることです(1つ以上のテーブル、独自の想像まで)。そして Forena モジュール(開示:私は共同メンテナです)を使用して、それらのデータに関連するレポート(および/またはグラフ)を作成します。
本当にファンシーにするために、これを DataTables と組み合わせることもできます。それを実装するのは、それに付属する典型的な検索機能です。
さらに、Forenaを介して、CSV、XLSなどの一般的な形式のいずれかにデータをエクスポートできます。
PS:別のバリエーションは、データをインポートせずに、Drupal内から既存のデータにForenaにアクセスさせることです。これが機能するために必要なことは、データベースフォーマットがForenaによってサポートされていることです(PDO準拠、Oracle、MS SQL、SQLite、MySQLなど)。