2014-11-03 1 views
0

내 질문에는 데이터베이스 테이블에 전체 JSON 문서를 저장하고 주기적으로 새로 고치는 것이 가장 효율적인 방법이 포함됩니다.데이터베이스를 캐시로 사용. 재구성 대 업데이트

기본적으로 사이트에 대한 데이터를 추출하기 위해 cron 작업을 통해 15 분마다 Google Analytics API를 호출합니다. 내 프런트 엔드 응용 프로그램 검색, 정렬 및 소비 할 수 있도록 SQL 테이블에이 정보를 덤핑 해요. 이 JSON은 페이지가 매겨져 한 번에 5,000 개의 행만 나오게됩니다. 나는 10 만개를 저장할 것입니다.

내가하려는 것은 테이블을 다시 작성하는 방식을 최적화하는 것입니다. 가장 순진한 방법은 테이블을 자르고 JSON에서 모든 행을 새로 삽입하는 것입니다. 나는 이것이 나쁜 접근이라고 느낀다. 그러나 아마 나는 SQL을 과소 평가하고있다.

기존의 각 행을 업데이트하고 필요에 따라 새 행을 추가 할 수도 있습니다. 그러나, 나는 신선한 JSON 객체에 없을 수도있는 오래된 행을 어떻게 삭제해야하는지 고심하고있다.

아니면 더 확실한 해결책이 없습니다.

답변

1

이 질문에 대한 진정한 대답은 무엇이 가장 효과가 있는지에 달려 있습니다. 데이터에 익숙하지 않으므로 앞으로는 답을주지 않고 몇 가지 지침을 제공합니다.

먼저 SQL 서버가 처리 할 행은 100 000 행입니다. 따라서 테이블을 자르고 새 값을 삽입하는 것은 실제로 실행 가능할 수 있습니다. 그러나이 데이터가 크게 증가한다면 이는 잘 확장되는 솔루션이 아닐 수도 있습니다. 이 접근법의 가장 큰 단점은 일정 기간 동안 테이블이 비어있을 수 있으며 이는 일부 사용자에게는 문제가 될 수 있다는 점입니다.

이 방법의 요약 :

  1. 쉽고 빠른 코드 및 유지 관리.
  2. 잘라 내기는 항상 빠르지 만 볼륨이 커질수록 삽입 속도가 느려집니다.
  3. 데이터가 잘리고 삽입되는 동안 오프라인 상태가됩니다.

삽입 및 업데이트는 업서스/병합으로 알려져 있습니다. 이 접근 방식은 더 많은 작업을 필요로하지만 데이터는 항상 온라인 상태가됩니다. 귀하가 직면 한 어려움 중 하나는 JSON 데이터와 SQL 데이터 (SQL 테이블과 비교하여 기본 JSON 데이터 세트의 차이점 찾기)로 작업하는 것입니다. 이는 비효율적이며 성가신 일입니다.

그래서 JSON에 대한 스테이징 테이블을 만들 것입니다. 이 표는 최종 생산 표의 정확한 사본입니다. 그런 다음 왼쪽 및 오른쪽 조인을 사용하여 새 데이터를 삽입하고 삭제 된 데이터를 제거합니다. 또한 각 행에 대해 해시를 만들고 이러한 해시를 비교하여 변경 사항이있는 행을 식별 한 다음 필요한 경우에만 업데이트 할 수 있습니다. 이러한 모든 변환은 간단한 SQL 스크립트로 처리 할 수 ​​있습니다.

  1. 더 많은 코드를 복잡하지만, 조인 및 해시 비교는 트릭을 할 것입니다 간단한 코딩 어렵지 않다 : 예 당신은이 방법의

    요약 ... SQL 조금 과소 평가된다.

  2. 새 값을 삽입하고 변경된 값을 업데이트하고 이전 값만 삭제하십시오. 이 솔루션을 확장 할 때 결국에는 잘린, 삽입 사이클보다 성능이 우수합니다.
  3. 데이터는 항상 온라인 상태로 유지됩니다.

이 문제를 해결하려면이 번호로 문의하십시오.

관련 문제