나는처럼 보이는 API에서 데이터를 검색 해요 :가능하면 테이블 스키마를 통해 쿼리 수를 줄입니까?
[{"type": "a", "value": 1, "identifier": 1},
{"type": "b", "value": 9, "identifier": 1},
{...},{...},
{"type": "a", "value": 2, "identifier": n}]
이 식별자는 1-500 사이의 값이 될 수 있으며, 모든 레코드가 같은 식별자있을 것이라는 점을 보장 아니에요. 식별자가 있으면 동일한 유형 및 특정 범위의 값을 갖습니다. 내가 처음 레코드를 업데이트하기 위해 사용 된 것은이처럼 보였다 :
api_data.each do |x|
temp = Object.find_or_create_by_type_and_identifier_and_id(x["type]", x["identifier"], user_id)
temp.update_attributes(x)
end
이 매우 느리고, 약 2200 쿼리이 데이터가로드 될 때마다 실행. 한 번 데이터가 존재하는지 확인한 다음 한 번 업데이트하여 1100 개의 항목을 찾습니다.
이create table (type, identifier, id, value)
이것은 obviously inefficient
, 내가 얼마나 그래서 몰랐어요 : 현재 사용중인 테이블 방식은 같다. 새 사용자 데이터를 업데이트하거나 가져와야 할 때 응용 프로그램이 크롤링하지 않도록 쿼리 수를 줄이려면 어떻게해야합니까?
제안 된 방법은 업데이트가 필요할 때 이전 항목을 대량 삽입하고 삭제하는 것입니다.이 경우 2로 줄일 수 있지만 가장 좋은 방법인지는 확실하지 않습니다.
스테이징 테이블에 대량 삽입을 수행하고 메인 테이블을 업데이트하십시오. –
또는 스레드를 사용하여 – phoet