나는 RavenDB에서 효율적인 방식으로 문서 구조를 디자인하고 저장하기 위해 몇 가지 다른 옵션을 시험 중이다.문서 디자인
사용자를 처리하는 구조는 세션 및 활동 추적 정보입니다.
사용자가 시스템에 로그인하고 활동이 생성되기 시작하면 세션이 시작됩니다. 세션 당 수백 개의 활동이있을 수 있습니다. 사용자가 닫거나 로그 아웃 할 때 세션이 종료됩니다.
시나리오를 약간 복잡하게 만드는 요소는 세션이 실시간으로 웹 포털에 표시된다는 것입니다. 다른 말로하면 : 세션과 활동을 추적하고 진행 중인지 (그리고 얼마나 오래 실행 중인지) 또는 완료되었는지를 알 수 있도록 이들을 연관시켜야합니다.
당신은 또한 물론 역사에서 주위를 파다 수 있습니다.
는 제가 조사를 좀 해봤 스택 오버 플로우에 두 개의 관련 질문을 여기에서 찾을하지만 그들 중 누구도 정말 날 도왔 : Document structure for RavenDB Activity stream design with RavenDb
내가 성공적으로 아군있는 한 두 가지 옵션 : (간체 구조)
을 1 :
{
"User": "User1",
"Machine": "machinename",
"StartTime": "2012-02-13T13:11:52.0000000",
"EndTime": "2012-02-13T13:13:54.0000000",
"Activities": [
{
"Text": "Loaded Function X",
"StartTime": "2012-02-13T13:12:10.0000000",
"EndTime": "2012-02-13T13:12:10.0000000"
},
{
"Text": "Executed action Z",
"StartTime": "2012-02-13T13:12:10.0000000",
"EndTime": "2012-02-13T13:12:10.0000000"
}
}
2 :
{
"Session" : "SomeSessionId-1",
"User": "User1",
"Machine": "machinename",
"Text": "Loaded Function X",
"StartTime": "2012-02-13T13:12:10.0000000",
"EndTime": "2012-02-13T13:12:10.0000000"
}
{
"Session" : "SomeSessionId-1",
"User": "User1",
"Machine": "machinename",
"Text": "Executed action Z",
"StartTime": "2012-02-13T13:12:10.0000000",
"EndTime": "2012-02-13T13:12:10.0000000"
}
대체 1은 관계형 배경에서 더 자연 스럽다고 느낍니다. 세션을로드하고 이벤트를 추가하고 저장하는 것은 정말 간단합니다. Session 객체를로드하는 오버 헤드와 매번 추가되는 이벤트는 매번 삽입 성능에 좋지 않습니다.
대체 2는 훨씬 효율적으로 느껴지고 이벤트를 추가 할 수 있습니다 (거의 이벤트 소싱과 유사). 그러나 이벤트를 파고 세션별로 표시 할 때 선택 사항은 좀 더 복잡해집니다.
아마도 더 좋은 대안이 있습니까? 솔루션은 이벤트를 분리하고 다른 읽기 모델을 생성 할 수 있습니까? 문제가 과도하게 복잡합니까?
여러 사용자가 동시에 여러 세션 (활동)을 만들 수 있습니까? – ZVenue
예 동시에 여러 사용자가있을 수 있습니다. 물론 자신의 세션에만 활동을 추가 할 것입니다. – Jon
사용자 이름과 컴퓨터를 유지하는 유일한 이유는 UI로 그룹화/정렬 할 수 있기 때문입니다. – Jon