2014-02-08 2 views
2

Salesforce에서 JSON 데이터를 가져옵니다. 약 10 000 개의 레코드를 가질 수 있지만 그 이상은 없습니다. Api 한계를 피하고 모든 요청에 ​​대해 Salesforce를 치지 않으면 매 시간마다 데이터를 쿼리 한 다음이를 메모리에 저장할 수 있다고 생각했습니다. 분명히 이것은 훨씬 더 빠르며 오류가 발생하기 쉽습니다.노드를 사용하여 메모리에있는 큰 JSON 데이터 세트로 작업하기

JSON 개체에는 약 10 개의 속성이 있고 두 개 또는 세 개의 속성이있는 다른 중첩 JSON 개체가 하나씩 있습니다.

아래와 비슷한 방법으로 레코드를 쿼리합니다.

getUniqueProperty: function (data, property) { 
    return _.chain(data) 
     .sortBy(function(item) { return item[property]; }) 
     .pluck(property) 
     .uniq() 
     .value(); 
} 

내 질문은 파급 효과가 메모리에 데이터를 저장하고 메모리에 데이터로 작업 무엇을 것

  • 입니까? 분명히 데이터에 대한 과도한 필터링을 실행하여 서버를 차단하고 싶지는 않습니다.

  • 나는 이전에 redis를 사용 해본 적이 없지만 캐싱 데 도움이 될만한 것이 있습니까?

  • 매 시간마다 데이터를 쿼리하고 Mongo와 같은 JSON 응답을 저장하는 것이 가장 좋을까요? 나는 메모리 내에서와 대조적으로 몽고에 대한 모든 질문을 수행 할 것인가? 매 시간 Salesforce에 쿼리하면 데이터베이스를 플러시하고 데이터를 다시 삽입합니다. 메모리에 데이터를 저장

+0

해당 시간 동안 salesforce 데이터가 업데이트된다고 가정하면 모든 업데이트가 다음 업데이트 때까지 유효하지 않습니다. – Andy

+0

데이터가 오래되었다고 걱정하지 않습니다. 그것은 시간대에 대해 구식 일 수 있습니다. 아마도 업데이트 될 것이고 어쨌든 매시간마다 뽑아야 할 필요가있을 것입니다. – TYRONEMICHAEL

답변

1

는 단점이 몇 가지 있습니다

  • 비 확장 성 - 당신이 더 많은 프로세스를 사용하기로 결정하면, 각 프로세스는 동일한 API 요청을해야 할 것이다;
  • 깨지기 쉬운 - 프로세스가 충돌하면 데이터가 손실됩니다.

많은 양의 데이터로 작업하면 원하는 시간보다 더 오랜 시간 동안 프로세스를 차단할 수 있습니다.

해결책 : - 외부 저장소를 사용하십시오! redis 또는 MongoDB 또는 RDBMS 일 수 있습니다. - cron으로 트리거 된 별도의 프로세스에서 데이터를 업데이트합니다. - 전체 데이터베이스를 삭제하지 마십시오. 저장소가 저장소를 트랜잭션을 지원하지 않는 경우 곧바로 요청할 수있는 기회가 있습니다. 레코드를 업데이트하십시오.

+0

나는 간단히 redis를 보았다. 키 값 저장소이므로 데이터에 대해 풍부한 쿼리를 수행하는 것이 불가능하지 않습니까? 예를 들어, vehicleMake가 Toyota 인 JSON 데이터를 쿼리 할 수 ​​없습니다. 나는 레코드를 업데이트하는 것에 대해 생각했지만, 상황은 상당히 복잡해졌습니다. 어쨌든 모든 데이터가 Salesforce에 저장되므로 응용 프로그램과 관련된 데이터 만 필요합니다. 데이터가 손실되면 Salesforce에 쿼리하여 관련 데이터를 다시 얻고 작업하십시오. 복잡한 쿼리를 위해 하위 프로세스를 생성 할 수 있습니까? – TYRONEMICHAEL

+0

@TyroneMichael 복잡한 쿼리가 필요한 경우 MongoDB 또는 RDBMS를 선택하는 것이 좋습니다. 각 쿼리에 대해 자식을 생성하려면 매번 IPC를 통해 데이터를 전달하거나 salesforce에서 데이터를 요청하는 오버 헤드를 처리해야합니다. 악마 쿼리 프로세스가 있다면 기본적으로 DBMS를 다시 작성합니다. – vkurchatkin

관련 문제