2011-04-05 4 views
8

개체 데이터베이스를 사용하는 경우 개체 모델의 구조를 변경해야 할 때 어떻게됩니까?개체 데이터베이스를 사용할 때 개체 모델의 중요한 변경을 어떻게 처리합니까?

예를 들어 Google App Engine으로 놀고 있습니다. 내 애플 리케이션을 개발하는 동안, 나는 어떤 경우에, 나는 클래스를 잘못 명명했고, 나는 그 이름을 바꾸길 원한다는 것을 깨달았다. 그리고 나는 내가 통합해야 할 두 가지 수업을 가지고 있습니다.

그러나 클래스의 이름이 직관적으로 데이터 저장소에 연결되어 있고 클래스 이름 아래에 실제 데이터가 저장되어 있기 때문에 가능하지 않다고 생각합니다.

데이터 저장소에서 개체 모델을 추상화하는 "오래된 방법"에 대한 좋은 점은 데이터 저장소가 개체 모델에 대해 전혀 알지 못한다는 것입니다. 단지 데이터 일뿐입니다. 따라서 개체 모델을 변경하고 데이터 저장소에서 데이터를 다르게로드 할 수 있습니다.

일반적으로 데이터 모델과 친밀한 데이터 저장소를 사용할 때 ... 어떻게 주변 상황을 바꿀 수 있습니까?

답변

2

, 당신은 종류 (데이터 저장소에서 사용되는 식별자)를 변경하지 않고 클래스 이름을 변경할 수 있습니다 위와 같이 kind() 메서드를 구현하고 이전 종류의 이름을 반환하도록합니다.

데이터 저장소의 데이터 표현을 변경해야하는 경우 이전 데이터를 업데이트하려면 mapreduce을 실행해야합니다.

1

당신이 좋은 간단한 SQL 스크립트없이 제외하고, 관계형 데이터베이스에서 그것을 같은 방식 : 또한 http://code.google.com/appengine/articles/update_schema.html

, 단지 옛날처럼, 속성이없는 개체가 자동으로하지 않는 기본 설정 및 속성을하지 않습니다 스키마에 존재하지만 여전히 객체에 팬텀처럼 매달려 있습니다.

속성의 이름을 바꾸려면 이전 속성을 제거하고 (팬텀이 멈춤) 새 이름을 추가하고 이전 (팬텀) 속성의 복사본으로 데이터를 채우십시오. 재 작성된 객체는 새 등록을해야합니다

0

당신은 우리가 우리의 프로젝트에 그 일을하는 방법을 수행 할 수 있습니다 : 우리는 객체 모델 (스키마)를 업데이트하기 전에

, 우리는 수출을 우리의 사용자 지정 내보내기 함수 및 버전 태그를 사용하여 json 형식의 파일 또는 BLOB에 데이터를 저장합니다. 스키마가 업데이트 된 후 새 엔티티를 만들고 이전 데이터로 채우는 다른 사용자 정의 함수로 json을 가져옵니다. 물론 가져 오기 버전은 각 버전 번호와 관련된 json 형식을 알아야합니다. 당신이 당신의 클래스 이름을 바꾸려면

class Foo(db.Model): 
    @classmethod 
    def kind(cls): 
    return 'Bar' 

: 당신이 염려되는 명명 단지 클래스의 경우

관련 문제