문제

Rails는 마이그레이션 개념을 사용하여 ActiveRecord API를 사용하여 모델 변경을 처리합니다.

CouchDB는 JSON (중첩지도 및 배열)을 사용하여 모델 객체를 나타냅니다.

지금까지 CouchDB와 협력 할 때 문서의 구조가 변경되었는지 (개발자로 징계를받는 것 외에) 또는 구식에서 새 모델로 문서를 마이그레이션 할 때를 인식하는 좋은 방법은 보이지 않습니다.

기존 기능이 있습니까? 아니면 CouchDB에서 모델 변경을 처리하기위한 모범 사례가 있습니까?

도움이 되었습니까?

해결책

rdbms de-brainwashing을위한 시간. :)

CouchDB의 스키마리스 디자인의 가장 큰 요점 중 하나는 마이그레이션의 필요성을 방지하는 것입니다. 객체의 JSON 표현은 객체를 쉽게 입력하기 쉽습니다.

예를 들어, 게시물이있는 블로그 유형 웹 앱과 사람들이 블로그에 저장하는 멋진 것들이 있으면 주어지면됩니다. 귀하의 게시물 문서에는 저자, 제목, 제작 등의 필드가 있습니다. 이제 당신은 함께 와서 스스로 와서 "내 게시물을 게시 할 때 달이 어떤 단계에 있는지 추적해야합니다 ..." 새 게시물에 대한 속성.

당신이 완성되기를 원한다면, 당신은 돌아가서 moon_phase를 오래된 게시물에 추가하지만 그것은 엄격하게 필요하지 않습니다.

당신의 견해에서, 당신은 moon_phase에 속성으로 액세스 할 수 있습니다. 그리고 그것은 null이거나 예외 또는 무언가를 유발할 것입니다. (JS 전문가가 아니라 Null이 정답이라고 생각합니다)

문제는 중요하지 않습니다. 당신이 무언가를 바꾸고 싶다고 느끼면 그냥 바꾸십시오. 당신의 견해가 그 변화를 이해하도록하십시오. 내 경험상 실제로는 많이 필요하지 않습니다.

또한 실제로 편집증이있는 경우 다음과 같이 버전/유형 속성을 저장할 수 있습니다.

{
   _id: "foo-post",
   _rev: "23490AD",
   type: "post",
   typevers: 0,
   moon_phase: "full"
}

도움이되기를 바랍니다.

다른 팁

스키마를 가지고 있고 여전히 couchDB를 사용하고 싶다면 "임피던스 불일치"를 얻습니다.

그럼에도 불구하고 "마이그레이션"을 갖는 것은 그리 어렵지 않습니다. 을 추가하다 schema_version 각 문서에 요소. 그런 다음 "문서 읽기 기능"에 업데이트를 포함하도록하십시오. 이 같은:

def read(doc_id):
    doc = db.get(doc_id)
    if doc.schema_version == 1:
        # version 1 had names broken down too much
        doc.name = "%s %s" % (doc.first, doc.last)
        del doc.first
        del doc.last
        doc.schema_version = 2
        db.put(doc)
    if doc.schema_version == 2: weight
        # version 2 used kg instead of g
        doc.weight_g = doc.weight_kg * 1000
        del doc.volume_kg
        doc.schema_version = 3
        db.put(doc)
    return doc

한 번에 전체 DB를 업그레이드하려면 read(doc_id) 모든 문서에 대해.

체크 아웃 activecouch.

CouchDB는 의도적으로 스키마가 없으므로 ActiveRecord 마이그레이션에서 CouchDB에 해당하는 개념의 1 대 1 매핑은 없습니다. 그러나 ActiveCouch에는 CouchDB의 '보기'를위한 마이그레이션이 포함되어 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top