2013-08-30 3 views
1

저는 nodejs 초보자이고 DB에 많은 수의 행을 삽입하는 것이 더 좋은지 궁금해하고있었습니다. 표면적으로, 이벤트 루프를 신속하게 해제하고 다른 요청을 제공 할 수 있기 때문에 한 번에 하나씩 삽입하는 것처럼 보이게됩니다. 그러나 코드는 그런 식으로 이해하기가 어려워 보입니다. 벌크 삽입물의 경우, 미리 루프를 사용해야 함을 의미하는 데이터를 미리 준비해야합니다. 이렇게하면 이벤트 루프가 루프에서 사용 중일 때 해당 기간 동안 제공되는 요청 수가 줄어 듭니다.node.js DB 벌크 삽입 대 한 번에 삽입 삽입

그럼, 가장 좋은 방법은 무엇입니까? 내 분석이 맞습니까?

+0

MyISAM 엔진이있는 mysql,하지만 중요하지 않아도 될까요? – user2103008

+0

글쎄, MySQL은 NoSQL과 다르다 :) – tymeJV

+0

또한이 게시물은 MySQL 당 발견했다. http://stackoverflow.com/questions/1793169/which-is-faster-multiple-single-inserts-or-one-multiple- 행 삽입 – tymeJV

답변

1

여기에 정답은 없습니다. 세부 사항에 따라 달라집니다. 왜 막대한 수의 행을 삽입하고 있습니까? 얼마나 자주? 이것은 단지 일회성 부트 스트랩인가 아니면 앱이 10 초마다 이렇게합니까? 또한 컴퓨팅/IO 리소스가 사용 가능한지도 중요합니다. 귀하의 앱이 데이터베이스를 사용하는 유일한 앱입니까 아니면 다른 사용자를위한 서비스 거부 요청이 될 것입니까?

세부 사항이 없으면 나의 최대 어림짐작은 10까지 인서트와 같이 작은 동시성 제한으로 일괄 적으로 삽입 한 다음 다른 삽입 명령을 데이터베이스에 보내기 전에 완료 될 때까지 기다리는 것입니다. 이것은 async.eachLimit의 모델을 따릅니다. 이것은 브라우저가 주어진 웹 사이트에 대한 동시 요청을 처리하는 방법이며 합리적인 기본 정책으로 입증되었습니다.

+0

OK, 균형 잡힌 접근 방식처럼 보입니다. 내 async.eachLimit을 구현해야합니까? – user2103008

+0

아니요 https://github.com/caolan/async 또는 npm과 유사한 모듈을 사용할 수 없습니다. –

0

일반적으로 메모리 내 개체의 루프는 빠르고 빠릅니다.

나는 CPU를 막는 것에 대해 걱정하고 있지만, 수행해야 할 총 작업량을 고려해야합니다. 항목을 한 번에 하나씩 보내면 많은 오버 헤드가 발생합니다. DB에 대한 각각의 쿼리는 내부 시퀀스 for을 가지고있어 아마도 "일괄 처리"for 루프가 꽤 작아 보일 것입니다.

DB에 1000 개를 덤프해야하는 경우 수행 할 수있는 작업의 최소 작업은 한 번에 모두 실행하는 것입니다. 100 가지 "일"10 배치를 만들면 동일한 작업을 모두 수행해야합니다. + 이러한 모든 요청을 생성하고 추적해야합니다.

이렇게 대량 삽입물을 얼마나 자주하고 있습니까? 이것이 일반적인 경우, 작업량을 최소화하고 모든 것을 한 번에 대량 삽입하려고합니다.

여기서 로깅과 재 시도가 절충됩니다. 일반적으로 일부 유형의 대량 삽입을 수행하고이를 잊어 버리는 것만으로는 충분하지 않습니다. 대량 삽입은 결국 실패 할 것이며 (완전 또는 부분적으로) 재시도 또는 통합을 위해 일부 유형의 논리가 필요할 것입니다.

문제가되는 경우 블록을 지능적으로 다시 시도 할 수 있도록 대량 삽입물의 크기를 관리하는 것이 좋습니다.

+0

글쎄, 나는 그렇게 자주하지 않는다. 나는 지금 대량 삽입물을 가지고 갈 것이다. 대량 삽입이 결국 실패한다는 것은 무엇을 의미합니까? – user2103008

+0

결국 대량 삽입을 시도하고 어떤 이유로 실패합니다. 잘못된 데이터, 네트워크 오류, 서버 오류 등 대량 삽입의 경우 어떤 데이터가 성공했고 어떤 데이터가 실패했는지 식별해야하기 때문에 추가 인식이 필요합니다. 일부 데이터베이스의 경우 "모두 또는 없음"이고 다른 데이터베이스의 경우 다음 업데이트에서 "빈칸 채우기"를 의미하는 부분적인 성공을 얻을 수 있습니다. 일부 DB는 "INSERT OR MERGE"의미론을 가지므로 동일한 배치가 실패 할 경우 안전하게 다시 배치 할 수 있습니다. 이것들은 _my_ 큰 우려가 될 것입니다. –