DocumentDb에서 데이터를 분리하여 별도의 컬렉션에 저장하는 가장 좋은 방법은 무엇입니까?DocumentDb의 여러 컬렉션에 데이터 저장
지금까지 DocumentDb로 데이터를 관리하는 방법의 대부분은 단순한 개체를 사용하지만 실생활에서는 거의 수행하지 않습니다. DocumentDb에서 Json 객체로 저장하기 전에 복잡한 클래스를 어떻게 처리해야 하는지를 이해하고 싶습니다.
다음 예를 살펴 보겠습니다. 내 프로젝트 정보를 Projects 컬렉션에 저장 하겠지만 프로젝트 문서에 프로젝트 팀원의 전체 이름을 저장하고 싶지는 않습니다. 나는 그들의 EmployeeId를 프로젝트 문서에 저장하려고한다. 개인/직원 특정 정보를 저장하려는 별도의 직원 컬렉션이 있습니다. 내 프로젝트 개체는 다음과 같습니다
public class Project
{
[JsonProperty(PropertyName="id")]
public int ProjectId {get; set;}
[JsonProperty(PropertyName="projectName")]
public string ProjectName {get; set;}
[JsonProperty(PropertyName="projectType")]
public string ProjectType {get; set;}
[JsonProperty(PropertyName="projectTeam")]
public List<TeamMember> ProjectTeam {get; set}
}
내 TeamMember 클래스는 Employee 객체에서 상속 및 다음과 같습니다
내 Employee 클래스는 다음과 같습니다public class TeamMember : Employee
{
[JsonProperty(PropertyName="position")]
public string Position {get; set;}
}
:에 저장하기 전에
public class Employee
{
[JsonProperty(PropertyName="id")]
public int EmployeeId {get; set;}
[JsonProperty(PropertyName="firstName")]
public string FirstName {get; set;}
[JsonProperty(PropertyName="lastName")]
public string LastName {get; set;}
[JsonProperty(PropertyName="gender")]
public string Gender {get; set;}
[JsonProperty(PropertyName="emailAddress")]
public string EmailAddress {get; set;}
}
프로젝트 컬렉션은 다음과 같습니다. 내 프로젝트 문서의 모양 예 :
{
id: 12345,
projectName: "My first project",
projectType: "Construction Project",
projectTeam: [
{ id: 7777, position: "Engineer" },
{ id: 8998, position: "Project Manager" }
]
}
보시다시피 프로젝트 데이터를 자신의 컬렉션 인 Projects 및 Employees 컬렉션에 각각 저장하기 위해 직원 데이터에서 프로젝트 정보를 분리했습니다.
데이터를 분리해야하는 이유는 무엇입니까? 가장 빠른 결과를 얻기 위해 어떻게 그리고 어디에서 디커플링을 처리해야하는지 알고 싶습니다. Best Practice에 따라 DocumentDb을 사용하는 전문가가이 시나리오를 처리하는 방법을보고 싶습니다.
을 나는이 문제를 처리하기 위해 두 곳 생각할 수 있지만이 작업을 수행 할 수있는 더 나은, 더 직접적인 방법이 있는지 이해 할 :
-
내 C# 코드 내에서 JSON 객체로 내 프로젝트 클래스를 변환 할 수 있습니다
- 저장을 위해 DocumentDb에 JSON 객체를 전달합니다.
- 또는 내 Project 개체를 DocumentDb에 직접 전달하고 JavaScript 저장 프로 시저에 전달할 수 있으며 DocumentDb 내의 두 개 이상의 컬렉션에서 데이터를 분리하고 저장할 수 있습니다. 여기
는 내가 알고 싶은 내용은 다음과 같습니다
감 데이터를 처리 할 수있는 권리 장소입니다- ?
- 더 나은 성능을 제공합니까?
- 이 문제를 해결하는 더 좋은 방법이 있습니까? 나는 내가 POCO 클래스를 DocumentDb에 전달할 수있는 방법에 대해 읽고있다. DocumentDb가이보다 복잡한 시나리오를 처리합니까? 그렇다면 어떻게?
감사합니다. 고맙습니다.
라이언, 네 말이 맞아! 나는 콜렉션을 테이블로 취급하고 있었다. 같은 컬렉션에 프로젝트와 직원을 모두 저장하면 쿼리 할 문서의 유형을 어떻게 알 수 있습니까? – Sam
오늘 가장 쉬운 방법은 각 JSON 문서에 "type"속성을 추가하고이를 쿼리에 포함시키는 것입니다. WHERE type = project 또는 WHERE type = employee 오늘 어디서 3 절로 제한되어 있는지 알지만, 더 많은 것을 허용하기 위해 현재 변경 될 가능성이 있습니다. 다른 방법으로 쉽게 이해할 수 있다면 듣고 싶습니다. 의견을 보내 주시기 바랍니다. –
다시 한 번 감사드립니다. Ryan – Sam