2014-07-07 5 views
4

장고 앱을 만들고 있습니다. 이 앱을 통해 사용자는 파일을 업로드하고 다른 사용자에게 공개적으로 제공 할 수 있습니다.데이터베이스와 s3/cloudfront를 동기화하기위한 아키텍처

S3 또는 CloudFront를 사용하여 이러한 파일을 관리하고 제공 할 생각입니다. (논의를 위해 S3라고 부르 자.) S3는 S3가 많은 상태를 가질 것이라는 사실이 무엇인지 버그가있다. 내 Python 코드는 사용자 작업에 따라 S3에서 파일을 만들고 이름을 바꾸고 삭제합니다. 그러나 우리는 이미 데이터베이스에 모든 상태를 가지고 있습니다. 두 개의 개별 데이터 저장소에 상태가 있으면 동기화 문제가 발생하고 혼동 될 수 있습니다. 다른 말로하면, "동기화되지 않을 것"입니다. 예를 들어, 누군가가 장고 관리에서 데이터베이스의 레코드를 삭제할 경우, s3의 파일은 고아 상태로 유지됩니다. (그 시나리오를 다루는 코드를 작성할 수는 있지만 모든 시나리오를 포착 할 수는 없습니다.)

그래서 저는 생각합니다 : Postgres 데이터베이스의 데이터와 자동으로 동기화되도록하는 솔루션이 있습니까? ? (나는 데이터베이스에 블롭으로 파일을 저장하는 데 아무런 문제가 없다. 그곳에서 직접적으로 제공되지 않는 한 크지 않다.) 나는 항상 그들 사이의 동기화를 유지하는 활성화 된 프로그램을 갖는 것에 대해 이야기한다. 누군가 데이터베이스에서 레코드를 삭제하면 s3의 해당 파일이 삭제되고 누군가가 S3 인터페이스에서 파일을 삭제하면 데이터베이스에서 레코드가 다시 만들어집니다. 그렇게하면 내 마음이 동기화 문제와 관련하여 쉽게 휴식을 취할 수 있습니다.

그런 종류가 있습니까? 가장 바람직하게는 파이썬.

답변

0

과거에 동일한 문제가 발견되었지만 최고의 조언이 아닐 수도 있지만 여기에 제가 한 일이 있습니다.

모델의 S3 로직에 업로드/수정/제거를 작성하고 Model signals을 사용하여 업데이트를 유지했습니다. 예를 들어 post_delete 신호를 사용하여 S3에서 이미지를 삭제하고 고아를 피할 수 있습니다.

또한 모든 것이 동기화되어 있는지 확인하고 문제가있는 경우 문제를 해결하는 관리 명령이 있습니다. 불행히도 나는 이것을 클라이언트에게 썼다. 나는 그것을 공유 할 수 없다.

편집 : 나는 그들이 내가 당신의 두 패키지 바라 보았다

+0

도움이 될 수 django-cb-storage-s3django-s3sync을 발견했다. 첫 번째 것은 미디어 파일이 아닌 정적 파일 (이름에도 불구하고)을위한 것이고 어떤 식 으로든 업데이트되지 않았으며 두 번째 파일은 폐기 된 것처럼 보입니다. 대답에서 제안한 해결책이 효과가있을 수 있습니다 ...하지만 여전히 사용할 수있는 패키지가 필요합니다. –