2010-12-08 2 views
4

내가 코딩하고있는 웹 프로젝트는 복잡한 CSV를 사용하여 데이터베이스를 만드는 MySQL 변환기를 사용합니다. 이것이 의미하는 바는 CSV의 최신 변경 내용으로 db 내용을 업데이트하려면 관련 테이블을 자르고 (웹 사이트를 통해 채워진 다른 테이블은 남겨 둡니다) 변환기를 실행하고 CSV의 데이터로 다시 채 웁니다.라이브 데이터베이스에서 큰 업데이트를 실행하는 방법은 무엇입니까?

예, 이것은 훌륭한 프로세스는 아니지만이 접근 방식이 표준 "실제 db 작업"접근 방식을 선택한 이유는 있습니다.

내가 고심하는 것은 사용자 경험을 너무 많이 해치지 않으면 서이 업데이트 프로세스를 실행하는 최선의 방법을 찾기위한 것입니다. 몇 가지 유의해야 할 점은 다음과 같습니다.

1)이 프로세스는 매주 몇 주/한 달에 한 번씩 실행해야합니다.
2) db 변환기는 현재 약 1 시간이 걸리고 아마도 (예, 아!)
3) 전체 데이터베이스의 sql 덤프는 현재 20MB 미만 (phpmyadmin을 통해 쉽게 가져올 수 있음)이지만 중단 될 수 있습니다 곧 그 장벽. SSH 업로드를 대신 사용할 수 있으므로 문제가되지 않아야합니다.

내가 생각했던 대안 중 일부는 모두 글로벌 설정을 사용하는 별도의 데이터베이스를 사용합니다 (이 설정은 사이트의 모든 읽기/쓰기에 대해 확인 됨). 대안 2는 변환의 전체 시간 동안 읽기 액세스를 방해하는 최악의 경우 인 것 같습니다. 그들 모두는 비록 사용자가 가입하거나 그와 같은 비판적인 것을 막지는 못합니다. 나는 큰 덤프를 업로드 할 필요가 없으므로 이론적으로 읽기 기능의 단시간 정지를 허용하므로 세 번째 대안의 실현 가능성에 대해 상당히 궁금합니다.

누구나 이런 식으로 일 했습니까? 그들이 거기 밖으로 또는 사전 :

Alternative 1
1) Set globalsettings_booleans_writeable to 0
2) Download current DB (SQL dump)
3) Import downloaded DB locally
4) Run converter (in update mode) on local database
5) Export local DB
6) Set globalsettings_booleans_readable to 0
7) Import exported DB online
8) Set globalsettings_booleans_readable to 1
9) Set globalsettings_booleans_writeable to 1

Alternative 2
1) Set globalsettings_booleans_writeable to 0
2) Set globalsettings_booleans_readable to 0
3) Run converter (in update mode) on live database
4) Set globalsettings_booleans_readable to 1
5) Set globalsettings_booleans_writeable to 1

Alternative 3
1) Set globalsettings_booleans_writeable to 0
2) Create a remote copy of the database
3) Run converter (in update mode) on remote copy
4) Set globalsettings_booleans_readable to 0
5) Replace remote original with remote copy (easy?)
6) Set globalsettings_booleans_readable to 1
7) Set globalsettings_booleans_writeable to 1

1 또는 3 감사를 선택할지 여부를 다음을 개선하는 방법에 대한 의견 있다면 우수한 대안을 감사하겠습니다
+0

현재 데이터베이스에는 어떤 종류의 변환이 수행됩니까? 데이터 자체가 변경되었거나 구조입니까? – gnur

답변

1

CSV를 검사하여 실제로 어떤 레코드가 데이터베이스를 변경하는지 확인하면 많은 독점을 피할 수 있습니다. CSV 생성기가 데이터의 실제 출처 인 것처럼 보이고 데이터베이스는 단순히 그것의 미러 일뿐입니다. 맞습니까?

그렇다면 변경되지 않은 CSV 레코드는 무시할 수 있고 d/b 테이블은 잘리지 않으며 나머지 CSV 레코드는 대체로 2 분을 사용하여 실행할 수 있습니다. 이는 아마도 몇 분 정도 걸릴 것입니다.

이 접근법의 주요 단점은 레코드가 원본에서 삭제되고 d/b가 로컬에서 삭제해야한다는 표시가없는 경우입니다.

+0

오해가 없는지 확인하십시오. CSV 생성 프로그램이 없습니다. CSV는 수동으로 생성/업데이트 된 다음 Java 도구로 데이터베이스로 변환됩니다. 그래서 소스는 변환기에 의해 db에 맞춰지는 CSV입니다. 어쨌든, 가장 좋은 방법은 절단 및 생성 대신 필요한 것을 변경하여 변환기를 빠르게 만드는 것입니다.불행히도 이것은 거의 불가능합니다 (예, 다른 문제와 함께 CSV에서 삭제됨). 그렇지 않은 경우 매우 복잡하고 오류가 발생하기 쉽습니다. 그래서 나는 그렇게하지 않을 것입니다. – janb

관련 문제