현재 데이터베이스에는 3,000개가 넘는 기록이 있습니다. 각 기록에는 지역의 중국어 이름과 지역의 영어 이름이 포함되어 있습니다(아래 참조)
이제 Redis 대기열 lpush 및 rpop을 사용하여 일괄 업데이트를 구현하려고 합니다. 이미 SQL 문을 작성했습니다(아래 참조).
이렇게 코드를 작성했습니다(아래 그림 참조). 3,000개가 넘는 sql문을 리스트(lpush)에 저장하고 하나씩 꺼내서 실행(rpop)할 준비를 했습니다. 다음에는 어떻게 쓰는지 알려주세요. 이제 목록에 sql 문을 넣었는데 중국어도 있는 것 같습니다. (아래 그림과 같이) cli를 시작할 때 --raw를 추가했습니다. 답변해주세요
모두들 감사합니다~
현재 데이터베이스에는 3,000개가 넘는 기록이 있습니다. 각 기록에는 지역의 중국어 이름과 지역의 영어 이름이 포함되어 있습니다(아래 참조)
이제 Redis 대기열 lpush 및 rpop을 사용하여 일괄 업데이트를 구현하려고 합니다. 이미 SQL 문을 작성했습니다(아래 참조).
이렇게 코드를 작성했습니다(아래 그림 참조). 3,000개가 넘는 sql문을 리스트(lpush)에 저장하고 하나씩 꺼내서 실행(rpop)할 준비를 했습니다. 다음에는 어떻게 쓰는지 알려주세요. 이제 목록에 sql 문을 넣었는데 중국어도 있는 것 같습니다. (아래 그림과 같이) cli를 시작할 때 --raw를 추가했습니다. 답변해주세요
모두들 감사합니다~
초대해주셔서 감사합니다
사실 Redis는 필요없습니다. SQL을 하나하나 파일에 넣어서 하나하나 읽어보고 실행하면 되는거 아닌가요?
<code class="php">function getSql() { $fp = fopen('sql.txt', 'r'); while (!feof($fp)) { yield fgets($fp); } } foreach (getSql() as $sql) { executeSql($sql); } function executeSql() { //执行语句 }</code>
<code>insert into base_region(region_name, en_name) values('中国','Zhongguo'), ('北京', 'Beijing'),...,('上海', 'Shanghai') on duplicate key update en_name = values(en_name);</code>
오버헤드를 최소화하면서 단 하나의 SQL 문으로 수행할 수 있습니다(하나의 데이터베이스 연결, 성능은 데이터에 일괄 삽입하는 것과 유사함).
두 가지 사항에 유의해야 합니다.
values(),(),(),()의 () 값은 for 루프를 사용하여 연결해야 합니다
region_name은 고유 인덱스여야 합니다. 이 필드에 고유 인덱스를 임시로 추가한 다음 SQL이 실행된 후