Я пробую несколько различных вариантов для разработки и сохранения структуры документа эффективным способом в RavenDB.
Структура, с которой я работаю, это информация об отслеживании сеанса и активности.
Сессия запускается, когда пользователь входит в систему, и действия начинают создаваться. Там может быть сотни мероприятий за сеанс.
Сеанс заканчивается, когда пользователь закрывается / выходит из системы.
Фактор, который немного усложняет сценарий, заключается в том, что сеансы отображаются на веб-портале в режиме реального времени. Другими словами: мне нужно следить за сессией и действиями и соотносить их, чтобы иметь возможность выяснить, продолжаются ли они (и как долго они выполняются), или они выполнены.
Вы также можете копаться в истории, конечно.
Я провел некоторое исследование и нашел здесь два важных вопроса о переполнении стека, но ни один из них не помог мне:
Структура документа для RavenDB
Проектирование потока активности с 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 кажется гораздо более эффективной, я могу просто добавлять события (почти как источники событий). Но выбор при копании в событиях и отображении их за сеанс становится немного сложнее.
Возможно, существует третья лучшая альтернатива?
Может ли быть решение отделить события и создать другую модель чтения?
Я слишком усложняю проблему?