2016-06-28 10 views
1

私は現在、剣道グリッドウィジェットによって消費されるOpenEdgeで新しいオブジェクト指向WebSpeedハンドラを使用してREST APIを開発中です。クエリの総レコード数を取得する最速の方法

私が本当に苦労している分野の1つは、ページングを実装することです。剣道グリッドには、そこにいくつのページがあるかを判断するための総レコード数を提供するAPIが必要です。サーバへのリクエストは、グリッドが非常に低迷感じること、ページごとに72msから500msのに上がった -

CREATE QUERY hQuery. 
hQuery:SET-BUFFERS(BUFFER sales_order:HANDLE). 
hQuery:QUERY-PREPARE("PRESELECT EACH sales_order WHERE co_no = 1"). 
hQuery:QUERY-OPEN(). 
oJson:Add("total", hQuery:NUM-RESULTS). 

これは、予想通り、愚か遅いですので、同じようThe only recommended way I've found of doing itは、PRESELECTクエリを実行し、その後NUM-RESULTSを使用することです。これはページサイズが非常に小さいためです。

ここで明らか解決策は以下のとおりです。

  • キャッシュレコード数:私は、データベースの変更を行う権限を持っていない、そしてそれは同期でこれを維持するために、レガシーシステムへの更新を必要とします私はこれがワームの缶を開くように感じる。
  • レコードの数を非同期的に取得します。元の要求で合計を返さない場合は、the Kendo grid will only let you get it through a synchronous requestというユーザーエクスペリエンスには不思議なことはありません。

私の質問は、クエリのレコードの総数を取得する高速な方法があるということですか?

+1

この件については、コミュニティレビューに入ったばかりのビジネスエンティティの共通コンポーネント仕様でも説明しています。カウントは挑戦です。キャッシングは素晴らしいアイデアです。結果の数をDBテーブルに格納し、それを一晩中入力します。キャッシュが利用できない場合は、コードのように実行する必要があります。 STOP-AFTER 1ブロックで囲み、1秒より悪くならないようにします。 –

+0

@MikeFechner:私は上司にキャッシングを実装するための議論をしなければならないでしょう。情報をありがとう、私はCCSを見てみましょう。 –

+1

また、剣道UIグリッドページャーのテキストパターンを変更するJavaScriptコードにいくつかのロジックを追加することを検討する必要があります:1 - 10 ???カウントが正確でないか、まったく決定できない場合、動的に1から10に変わる必要があります。 –

答えて

1

残念ながら、これはまだOEの問題です。

キャッシングは言及されていますが、フィルタが適用されていない場合は、レコードの総数はフィルタの条件に依存します。あなたはこれは、あなたがこれまでにできる最善のことです事前に選択

hQuery:QUERY-PREPARE("PRESELECT EACH sales_order FIELDS(table_field_here) WHERE co_no = 1"). 

にFIELDSオプションを含めているパフォーマンスを向上させるために行うことができます

唯一のことは、少なくともこの記事で推奨されているものです。4GL. WHICH IS THE FASTEST WAY TO COUNT RECORDS IN A TABLE?

+0

私の上司は同じ提案をしましたが、私たちが行方不明のものがあるかどうかは確かではありませんでした。すべてのクエリでそれをやらなくてはいけないと思っていますが、リクエスト時間は数えられないバージョンの数ミリ秒以内になりますので、私は不平を言っていません! –

+0

私は同じ闘いだった。 FIELDSは今までのところエレガントなソリューションではありませんでしたが、この特定のシナリオでは、決してそれを変更することは決してないので、それほど悪くはありません。 –

関連する問題