2013-03-14 4 views
0

우리는 전자 상거래 시스템이 있으며 인벤토리 시스템이 별도입니다. 우리는 PHP와 MySQL을 사용합니다. 전자 상거래 서버에 인벤토리 세부 정보가 필요합니다. 1 시간마다 약 7500 개의 레코드를 서버에 푸시해야합니다. Google은 인벤토리를 추가하는 전자 상거래 시스템에서 API를 만들었습니다. 그러나 두 서버가 서로 다른 위치에 있으므로 시간이 많이 걸립니다. 이 인벤토리를 서버로 푸시 할 수있는 더 빠른 방법이 있습니까? 즉 서버의 특정 테이블에 레코드를 추가하고 2 개의 컬럼 만 추가합니다.서버에 엄청난 수의 레코드 추가

+0

플랫 파일이 작동합니까? – Leeish

+0

이 가져 오기 API는 정확히 어떻게 작동합니까? 명확히 해 주시겠습니까? –

+0

@Thomas Hambach - API는 테이블에 간단한 삽입물이었습니다. 그래서 우리는 우리가 가지고있는 많은 수의 레코드를 반복해야했습니다. – Hacker

답변

1

은, rsync를, LOAD 데이터 INFILE 같은 MySQL의 측면에 대한 옵션의 많은 수 (토마스 말한대로) 더 빨리해야 Prepared Statements 사용할 수있는 PHP 측 등

을 여러 행을 삽입해야합니다. 여기에서는 params 만 바인드하고 루프로 실행합니다. 쿼리 정의가 루프 측면에 있지 않습니다. 하지만 여전히 MySQL 솔루션이 더 효과적이어야합니다.

1

병목 현상이 어디에 있는지 알려줄 수 있습니까? 귀하의 API는 데이터베이스에 의해 유지되고 있습니까? 한 번의 통화로 얼마나 많은 항목을 API로 보냅니 까?

+0

단일 호출에서 단 하나의 레코드 만 푸시되었습니다. – Hacker

1

테이블의 행당 하나의 API 요청을 수행하고 있습니다. 이로 인해의 오버 헤드가 에 많이 발생합니다.

대신, 7.500+ 행 (좋지 않지만 여전히 1/1보다 낫다) 또는 n 레코드의 여러 요청 중 큰 요청을하십시오. 성능에 따라 n을 조정하십시오.

편집

당신이 당신의 전자 상거래 솔루션이라는 결코 때문에

, 나는 당신이 API와 수리를 할 수 집에와 있어요 있으리라 믿고있어. 이것이 사실이 아니라면 알려주십시오.

1

MySQL에서는 단일 테이블에 많은 양의 데이터를 추가하면 복수 ROWS에 대해 하나의 INSERT을 수행 할 수 있습니다. 그렇게 훨씬 빠릅니다.

INSERT INTO inventory VALUES (2, 'Lamp'), (1, 'Bike'), (8, 'TV'); 

당신은 MySQL documentation에 대한 INSERT 최적화 문서를 찾을 수 있습니다.

설명서에는 고려해야 할 다른 솔루션이 나와 있습니다.

+0

@ Thomas Potaire - 문제는 서버가 다른 위치에 있고 데이터베이스를 직접 만질 수 없다는 것입니다. – Hacker

+0

나는 타사 솔루션을 사용하여 DB에 데이터를 주입하고 있습니까? 여러 행이있는 단일 삽입을 허용하는 API 호출을 제공하도록 요청할 수 있습니까? DB에 대한 액세스 권한이 없다면 정말 힘들 것입니다 .. –

관련 문제