2017-10-22 5 views
2

4 개의 다른 생산자로부터 보고서를 수집하는 PostgreSQL 데이터베이스가 있습니다. 내가 이것을 썼을 때 나는 4 개의 서로 다른 스키마 (생산자마다 하나씩)를 정의했고 보고서의 구조가 비슷하기 때문에 각 스키마는 정확히 같은 테이블을 가지고있다. 스키마를 하나로 결합하고 테이블에 생산자 ID가있는 추가 열을 추가하고 싶습니다.필자의 스키마를 안전하게 결합 할 수 있습니까

현재 나는 4 개의 파이썬 프로세스가 실행 중이며 하나는 생산자 당 하나입니다. 프로세스는 보고서를 수집하여 DB에 삽입합니다.

아주 간단한 코드가 지난 몇 달 동안 충돌없이 실행되었습니다. 현재의 디자인은 2 개의 프로세스가 동시에 DB에 데이터를 삽입하는 것을 불가능하게 만듭니다. DB를 변경 한 경우 (단일 테이블이있는 단일 스키마) 여러 프로세스가 동시에 데이터를 삽입하려고 할 수 있습니다. 지금 당장은 프로세스를 하나의 프로세스로 결합하는 것을 배제 할 것입니다. 제가 이것을하지 않는다고 가정하십시오.

DB에 데이터를 삽입하는 프로세스가 두 개 이상인 경우를 처리하기 위해 특별한 코드가 필요한지 잘 모르겠습니다. 나는 python3 + SQLAlchemy + Flask를 사용하고 있습니다. 나는 DB의 ACID 속성이 데이터를 동시에 삽입하고자하는 2 개 이상의 프로세스 (데이터가 작고 삽입이 1 초 미만)를 자동으로 처리해야한다고 생각합니다. 프로세스가 충돌을 삽입 할 염려없이 스키마를 결합 할 수 있습니까?

+0

어떤 종류의 데이터베이스를 사용하고 있습니까? – chasmani

+0

updated : postgres – s5s

+0

"많은 양의 데이터"로 무엇을 정의합니까? 초당 행 수는 얼마입니까? 각 행에 몇 개의 열이 삽입됩니까? 심지어 작은 Linux 서버 (PostgreSQL을 말한 이래로 Linux라고 가정)는 더 많은 경우가 아니라면 초당 수십만 INSERT를 처리 할 수 ​​있어야합니다. –

답변

1

Postgres 또는 MySQL과 같은 적절한 데이터베이스를 사용하는 경우 문제가되지 않습니다. 그들은 이것을 처리하도록 설계되었습니다.

sqlite를 사용하는 경우 깨질 수 있습니다.

+0

대용량의 데이터를 삽입하고 하나의 삽입으로 다른 시간 초과가 발생하면 문제가 될 수 있다고 생각합니까? – s5s

+0

@ s5s 저는 db 전문가가 아니므로 매우 큰 작업에 어떤 제한이 있는지 확실히 말할 수는 없습니다. 하지만 내 비 (非) 과학적 의견은 포스트 그레스가 일반적으로 당신이 던지는 모든 것을 다룰 것이라는 것이다. – chasmani

0

간단한 INSERT의 경우 네 개의 생산자가 안전하게 행을 추가 할 수 있습니다. 일관성있는 읽기는 삽입이 1 시간 동안 JOIN을 계속하는 경우 흥미로운 로그 공간을 할당해야 할 수도 있기 때문에 장기 실행 쿼리가 없다고 가정합니다.

대용량의 데이터를 삽입하고 하나의 삽입으로 다른 시간 초과가 발생하면 어떻게해야합니까?

여러 경쟁 INSERT에서 시간 초과가 발생할 수 있지만 그 원인을 이해할 수는 없습니다. 나는 이것이 당신이 지금까지 관찰 한 문제는 아니라고 생각합니다. 독자와 작가는 자물쇠를 놓고 경쟁 할 수 있지만 독립적 인 INSERT 프로세스는 매우 안전합니다. 네 개의 프로세스가 BEGIN, UPDATE 1, ... UPDATE N, COMMIT을 수행했다면 전역 순서를 존중해야하지만 유스 케이스는 매우 단순하다는 장점이 있습니다.

관련 문제