한계와 오프셋 | Mendix

메인 컨텐츠로 가기

한계와 오프셋

최근에 제 애플리케이션에 가져오는 데이터가 업데이트되지 않는 문제가 발생했습니다. 하지만 저는 제 프로세스가 예상한 대로 정확하게 구축되었다고 확신했습니다.

이 문제에 대한 배경 지식으로 시작하겠습니다. 말씀드렸듯이, 저는 제 애플리케이션에 레코드를 가져왔습니다. 예를 들어, 약 10,000개의 레코드를 가져왔고, 이를 업데이트하고 "처리됨"으로 표시하고 싶었습니다.

그래서 웹 서비스를 사용하여 가져오기를 빌드했고, 제 데이터는 아무 문제 없이 들어왔습니다. 그런 다음 한 번에 1,000개의 레코드로 제한하는 프로세스를 빌드하고 업데이트했습니다. 제한을 사용하여 검색하면 테이블 내 데이터의 하위 집합을 처리할 수 있으므로 메모리에 너무 많은 레코드를 넣지 않고 잠재적으로 애플리케이션 성능에 영향을 미치지 않도록 할 수 있습니다.

또한 오프셋을 사용했습니다. 오프셋을 사용하면 테이블에서 검색을 시작할 위치를 지정할 수 있습니다. 이를 적용하면 제한을 늘려 프로세스를 반복하여 모든 레코드를 처리했는지 확인할 수 있습니다. 아래에 표시된 대로:

마이크로플로우의 예

데이터 시각화

그럼, 위 그림에 대한 기본적인 설명은 다음과 같습니다.

  • 검색을 "제한"하려는 레코드 수와 동일한 정수를 만듭니다(이 경우 1,000개).
  • 오프셋과 같은 정수를 만듭니다. 이 예에서는 0에서 시작해야 하는데, 당연히 첫 번째 레코드입니다.
  • 사용자 정의 검색을 사용하여 엔터티 목록을 검색합니다.
    • 한도를 $Limit로 정의하세요
    • 오프셋을 $Offset으로 정의하세요제한 정의 스크린샷
  • 목록을 반복하고 원하는 프로세스를 수행합니다.
  • 검색 작업에서 검색한 엔터티 수를 계산합니다.
  • 검색된 엔터티 수가 정의한 제한과 같은지 확인하십시오.
    • 네(참)라면 다시 해보세요. 더 많은 것이 있을 수 있습니다.
    • 아니요(거짓)이면 목록의 끝에 도달한 것입니다.

꽤 쉽죠? 글쎄요, 안타깝게도 가장 중요한 것, 즉 검색에 정렬을 통합하는 것을 놓쳤어요.

이것이 왜 중요한지 설명해 드리겠습니다. 아래에서 위의 마이크로플로에서 정의한 "작은 사각형"을 검색한 결과를 볼 수 있습니다.

데이터 시각화

위의 그림이 100개의 작은 사각형이 있는 표라고 가정해 보겠습니다. 저는 오프셋 10으로 0개의 제한을 검색하고 있습니다. 강조된 사각형은 검색되고 처리되는 것입니다. 이 프로세스가 완료되면 오프셋을 이전 검색 번호(10)로 변경한 후 데이터베이스에서 다시 검색합니다.

이제 내 레코드 세트가 검색되었지만 정렬 순서를 정의하지 않았기 때문에 검색이 임의로 특정 순서 없이 목록을 반환합니다. 오프셋이 10이므로 레코드 10부터 시작하지만 불행히도 이미 처리된 레코드일 수 있습니다. 아래 이미지는 두 번째로 검색된 목록을 보여주고 강조 표시된 레코드는 우리가 처리할 레코드입니다.

데이터 시각화

이제 아래 이미지는 정렬이 적용된 검색을 보여줍니다. 정렬을 적용할 때 가능한 가장 고유한 속성을 사용하고자 합니다. 이렇게 하면 검색된 목록이 항상 동일하고 테이블의 모든 레코드를 확실히 처리할 수 있습니다.

데이터 시각화

이제 오프셋을 구현하는 것이 현명하지 않은 경우가 있습니다. 이 예를 상상해 보겠습니다. 작은 사각형은 흰색(처리되지 않음)이거나 파란색(처리됨)입니다. 처리되지 않은 모든 레코드를 검색하여 처리하고 싶습니다. 검색 작업에서 [Processed = false()]의 XPath 제약 조건을 적용합니다.

처리됨은 거짓입니다

다시 말해서, 아래에 그림으로 표시된 것처럼 모두 처리되지 않은 100개의 레코드가 있는 테이블이 있습니다. 10개의 제한과 0의 오프셋을 사용하여 처음 XNUMX개의 레코드를 가져옵니다. 그런 다음 각 레코드를 처리합니다.

데이터 시각화

10개 레코드를 처리했고 이제 내 데이터 세트는 아래 이미지와 같습니다. 수정된 오프셋을 적용하지만 XPath 제약 조건을 계속 사용하면 내 프로세스는 결과 데이터 세트의 처음 XNUMX개 레코드를 건너뛰어 부분 업데이트만 발생합니다.

데이터 시각화

제 경험에 따르면 이 게시물에 제공된 예는 한계 및 오프셋 검색 및 처리의 가장 일반적인 예입니다. 속성 값이나 다른 이유에 따라 데이터가 처리될 수도 있고 그렇지 않을 수도 있는 다른 상황이 있습니다. 항상 가능한 한 정적인 목록이 되도록 정렬을 사용해야 합니다.

한계와 오프셋10

요약하자면, 대용량 데이터 세트를 검색할 때는 다음을 수행해야 합니다.

  • 제한 및 오프셋 사용
    • 캐시 메모리와 시스템 성능에 미치는 영향을 최소화하려면 제한을 3,000 이하로 설정해야 합니다.
    • 검색 제약 조건으로 인해 레코드 세트가 변경되지 않는 경우 오프셋을 사용해야 합니다. 또한 변수여야 하며 처리를 시작하려는 목록의 위치로 설정해야 합니다.
  • 반복적인 프로세스에서 검색을 정적으로 만들기 위해 가장 고유한 속성에 대한 정렬을 사용하세요.

당신이 만든 모든 프로세스와 마찬가지로 Mendix, 항상 그 안에서 내리는 선택과 행동이 데이터에 어떤 영향을 미치는지 신중하게 고려하세요. 이전 게시물이 이 주제에 대한 빛을 비추고 여러분 모두에게 행복한 모델링을 기원합니다!

언어를 선택하세요