2012-02-09 3 views
0

오늘은 푸른 테이블 저장소에 자식 개체를 저장하는 데 약간 만료했습니다. Person.Project와 같은 것 Person은 테이블 엔티티이고 Person은 POCO입니다. 내가 이것을 달성 할 수 있었던 유일한 방법은 프로젝트를 바이트 []로 직렬화하는 것이었다. 필요한 것일지도 모르지만 다른 방법이 있습니까?Azure 테이블 저장소에 자식 개체를 저장하는 기본 방법은

감사합니다 나는 당신이 사람이 단지 POCO 말할 때 프로젝트가 단지 인 POCO 의미하는 것으로 추정하고 있습니다

답변

0

원래 질문에 관해서는, 부모와 자식을 같은 테이블에 저장할 수 있습니다. 그렇게 할 때 오류가 발생 했습니까?

부모와 자식을 별도의 테이블로 구분하여 희생시킨 다른 한 가지는 업데이트를 트랜잭션으로 그룹화하는 기능입니다. 그 사람에 대해 새로운 '사람'을 만들고 여러 프로젝트를 추가했다고 가정 해보십시오. 동일한 파티션 키를 가진 동일한 테이블에있는 경우 다중 삽입을 하나의 원자 작업으로 보낼 수 있습니다. 다중 테이블 접근 방식을 사용하면 원자 성을 직접 관리해야합니다 (데이터 일관성 모델의 요구 사항 인 경우).

+0

당신보다이 다른 작업을 수행하는 방법의 좋은 예를 일이 수행 http://msdn.microsoft.com/

은 보라 ko-kr/library/ff803373.aspx # sec19. 이것은 지나치게 복잡한 이럴 것 같습니다. – s1mm0t

0

라스무스?

내가 선호하는 방법은 동일한 파티션 키와 행 키를 부모로 사용하여 자체 Azure 테이블에 하위 개체를 저장하는 것입니다. 주된 이유는이 작업을 수행해야 할 경우이 하위 개체에 대해 쿼리를 실행할 수 있다는 것입니다. 부모와 자식 모두에서 속성을 사용하는 하나의 쿼리 만 실행할 수는 없지만 적어도 하위 엔터티에 대해 쿼리를 실행할 수는 있습니다. 또 다른 장점은 하위 클래스가 더 많은 공간을 차지할 수 있다는 것을 의미합니다. 하나의 속성에 저장할 수있는 데이터의 양이 행에 저장할 수있는 양보다 적습니다.

위의 두 가지 문제가 모두 우려되지 않으면 수행 한 작업이 완벽하게 수용 될 수 있습니다.

1

개인적으로 나는 부모가 가진 파티션 키와 동일한 파티션 키 (Person의 파티션 키)를 사용하여 다른 테이블에 프로젝트를 저장하는 것을 선호합니다. 사람과 기본 프로젝트가 동일한 저장소 클러스터에 저장되도록합니다. 코드 측면에서 [참조 (typeof (Person))] 및 [컬렉션 (typeof (Project))]과 같은 참조 속성 위에 몇 가지 특성을 갖고 싶습니다. 데이터 컨텍스트 클래스에서 사용할 수 있습니다. 일부 확장 메소드는 필요에 따라 하위 요소를 검색합니다.

0

비슷한 문제가 발생하여 복잡한 개체를 플랫 EntityProperty 사전으로 병합하고 DynamicTableEntity 형태로 테이블 저장소에 쓸 수있게 만드는 일반 개체 flattener/recomposer API를 구현했습니다.

동일한 API는 DynamicTableEntityEntityProperty 사전에서 다시 전체 복합 객체를 다시 구성합니다. https://www.nuget.org/packages/ObjectFlattenerRecomposer/

사용법 :

//Flatten complex object (of type ie. Order) and convert it to EntityProperty Dictionary 
Dictionary<string, EntityProperty> flattenedProperties = EntityPropertyConverter.Flatten(order); 

// Create a DynamicTableEntity and set its PK and RK 
DynamicTableEntity dynamicTableEntity = new DynamicTableEntity(partitionKey, rowKey); 
dynamicTableEntity.Properties = flattenedProperties; 

// Write the DynamicTableEntity to Azure Table Storage using client SDK 

//Read the entity back from AzureTableStorage as DynamicTableEntity using the same PK and RK 
DynamicTableEntity entity = [Read from Azure using the PK and RK]; 

//Convert the DynamicTableEntity back to original complex object. 
Order order = EntityPropertyConverter.ConvertBack<Order>(entity.Properties); 
관련 문제