私が取り組んでいるプロジェクトでは、ExtJSフレームワークを大量に使用しています。表示するデータはたくさんあり、グリッドを使用してデータを送信します。グリッドは、すべて標準のページング、ソート、およびフィルタリング機能を備えています。リモートグリッドフィルタリング/ページ区切り/並べ替えのためのMyBatisを使用した非常に動的なクエリ
現在、私たちのバックエンドはPHPで作成されており、まっすぐなSQLを使用しています。 PHPでは、クエリ、フィルタのリスト、ソート情報、ページ情報を受け入れ、適切なWHERE、ORDER BY、およびページ分割機能を持つクエリを出力するSQLラッパーを、サブクエリとして元のクエリを使用して作成しました。私たちのプロジェクトはOracleに関連していることに注意してください。
フィルタは、比較の形式(=、<、< =、> =、>、IS NULL)またはリスト(IN())になり、並べ替えは単方向の列です。ページネーションは開始と終了の列です。
SpringishとMyBatisを使用してJavaベースのアーキテクチャに移行しようとしています。私は簡単な方法でMyBatisを使用して同じ機能をどのように実装するかを考え出すのに苦労しています。ラッパーについての良い点は、ベースクエリを一度書いておけば、グリッドに必要なクエリーに変身するということでした。潜在的に何万ものレコードについて話しているので、ページングが必要になり、サーバーに物事を戻して、Javaベースのフィルタリング/並べ替えを行うことは実際の選択ではありません。
これまで誰かがこの(または同様の)問題を解決しましたか?私はMyBatisのDynamic SQL機能を簡単に見てきましたが、必要な柔軟性とパワーを提供していないようです。私が間違っている?
味付けされたMyBatisユーザーからのガイダンスは非常に高く評価されます。
私たちは今調査中であり、ORMを使用しても完全にテーブルから離れているわけではないことに注意してください。これは、例えば、Hibernateを使って簡単に達成できますか?
私は、無限スクロールページングとリモートフィルタ/ソートで同じことをしているプロジェクトに入っています。グリッドは10k〜30kのレコードを持っています。私はそれをすべてサーバーに戻し、問題なくJavaのフィルタリングと並べ替えを使用します。フィルタやソートをバックエンドに渡すと、Ajaxの応答は100〜200msの範囲になります。私はTomcatとsqlserverでORMを実行していますが、ApacheのDBUtilsとapacheコレクションのライブラリだけです。あなたがそのルートを試してみたいと思ったら、私はおそらくそれをどのようにセットアップしているのでしょうか。 – Geronimo
うわー。メモリフットプリントはどうですか?あなたは通常どのくらい多くの要求を処理する必要がありますか?それを見ると、これは最適な解決策ではないと感じましたが、100〜200msの応答で暮らすことができました。あなたがしていることについてもっと聞いてみたい! –
私がしていないことの1つは、各リクエストでデータベースから新しいデータを取り出すことです。頻繁に変更されないため、定義された時間だけサーバー上で調理しています。それぞれのリクエストで新しいクエリを実行しなければならない場合、私は別の何かをしなければならないと確信しています。そのため、requests/secは決してデータベースの終わりには配慮されませんでした。サーバー側では、これは一度にすべてではない50〜100人のユーザーのイントラネットアプリケーションです。そこにも重い。 – Geronimo