2016-06-28 4 views
1

저는 현재 새로운 객체 지향 WebSpeed ​​처리기를 사용하여 OpenEdge에서 REST API를 개발 중이며 Kendo 그리드 위젯에서 사용합니다.쿼리의 총 레코드 수를 얻는 가장 빠른 방법

내가 몹시 고민하고있는 영역 중 하나는 페이징을 구현하는 것입니다. 켄도 그리드는 얼마나 많은 페이지가 있는지 결정하기 위해 총 레코드 수를 API에 제공해야합니다. The only recommended way I've found of doing it 지금처럼 PRESELECT 쿼리를 수행하고 NUM-RESULTS을 사용하는 것입니다

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). 

이, 예측, 바보 느린 - 서버에 요청이 그리드는 매우 부진한 느끼게 페이지 당은 500ms로 72ms에서 올라 갔다 . 이것은 매우 낮은 페이지 크기에도 있습니다!

  • 캐시 레코드의 수 :

    여기에 확실한 솔루션

    나는 데이터베이스 변경을 할 수있는 권한이없는, 그리고 동기화이 유지 레거시 시스템에 대한 업데이트를 필요 , 그래서 나는 이것이 벌레의 깡통을 열 것이라고 느낀다.
  • 비동기 적으로 레코드 수를 얻으십시오. 원래 요청에서 총계를 반환하지 않으면 사용자 경험에 대한 경이로움이 작용할 것 같지 않은 the Kendo grid will only let you get it through a synchronous request입니다.

제 질문은 쿼리의 총 레코드 수를 더 빨리 얻을 수있는 방법이 있습니까?

+1

이 주제는 방금 커뮤니티 검토를 마친 비즈니스 엔터티에 대한 공통 구성 요소 사양에서도 논의됩니다. 백작님은 도전입니다. 캐싱은 좋은 아이디어입니다. DB 테이블에 결과 수를 저장하고 밤에 채 웁니다. 캐시를 사용할 수없는 경우 코드에서했던 것처럼 캐시를 사용해야합니다. STOP-AFTER 1 블록으로 둘러싸므로 1 초보다 나빠지지 않습니다. –

+0

@MikeFechner : 내 상사에게 캐싱을 구현하는 것에 대한 논의를해야 할 것입니다. 정보를 제공해 주셔서 감사 드리며 CCS를 살펴 보겠습니다. –

+1

Kendo UI 그리드 호출기의 텍스트 패턴을 변경하는 JavaScript 코드에 로직을 추가해야합니다 : 1 - 10 ??? 카운트가 정확하지 않거나 전혀 결정할 수없는 경우 동적으로 1 - 10으로 바뀌어야합니다. –

답변

1

불행히도 OE에서는 여전히 문제가 있습니다.

캐시가 언급되었지만 총 레코드 수가 필터 기준에 따라 달라 지므로 필터가 적용되지 않은 경우에만 작동합니다. 4GL. WHICH IS THE FASTEST WAY TO COUNT RECORDS IN A TABLE? : 성능을 개선하기 위해 무엇을 할 수

유일한 것은 사전 선택

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

이, 적어도이 문서에서 권장 당신이 지금까지 할 수있는 최선입니다 필드 옵션을 포함입니다

+0

나의 사장님도 같은 제안을 하셨지만, 우리가 빠진 것이 있다면 확신 할 수 없었습니다. 그래서 확인해 주셔서 감사합니다! 모든 쿼리에서 그렇게하기가 약간 불편한 느낌이 들지만, 카운트없이 버전의 몇 밀리 초 이내에 요청 시간을 가져 오므로 불평하지는 않습니다! –

+0

나는 똑같은 투쟁을했다. FIELDS는 결코 우아한 솔루션은 아니지만이 시나리오에서는 변경하지 않을 가능성이 거의 없으므로 나쁘지 않습니다. –

관련 문제