Схема повторяющихся событий с MongoDB

Я читал некоторые статьи, описывающие методы хранения данных для повторяющихся событий, но я все еще пытаюсь обдумать лучшие практики, особенно в отношении MongoDB.

Моя главная задача состоит в том, чтобы дешево получить все события, которые происходят в течение определенного периода времени. Моя вторичная задача состоит в том, чтобы модифицировать и изменять отдельные события, не выводя из строя всю цепочку событий.

Глядя на тех, кто задавал подобные вопросы, я придумал возможность. Я не полностью продан на этом, и хотел бы некоторые указатели в правильном направлении.

Моя идея: в каждом документе мероприятия есть...

  • повторяющееся строковое поле, которое близко соответствует стандарту iCal
  • вложенный документ или поле массива "экземпляры", которое содержит изменения / редактирование для определенных экземпляров (например, изменение описания или времени начала или отмена одного вхождения).
  • поле начала и конца вхождения для определения легко запрашиваемых границ правила повторения

Плюсы:

  • возможность сохранять изменения и сохранять связь с другими событиями
  • легко спросить, моя модель на стороне бизнеса должна была бы построить каждое событие, хотя

Минусы / Потенциальные проблемы:

  • если редактирует событие, и пользователь решает пометить изменения как относящиеся ко "всем событиям" - как предотвратить изменение уже прошедших событий

1 ответ

Решение

Это кажется хорошим подходом для меня. Чтобы "сохранить события, которые уже прошли, от изменения", просто пометьте их логическим флагом, который говорит об этом. Вы легко сможете использовать этот флаг и дату начала / окончания при запросах и обновлении.

Кроме того, вы можете: - установить дату окончания исходного события - клонировать событие и установить новую дату начала и окончания нового события. - очистить поле вхождений в клонированном событии

Примерно так:

До:

{
    'title' : "Gin O'Clock",
    'recurrance' : 'DAILY',
    'start_date' : '2012-01-01 17:00',
    'end_date' : false,
    'occurences' : [
        { 'date' : '2012-06-03 17:00', 'title' : "Jubilee Gin O'Clock" }
    ]
}

После:

{
    'title' : "Gin O'Clock",
    'recurrance' : 'DAILY',
    'start_date' : '2012-01-01 17:00',
    'end_date' : '2012-06-05 17:00,
    'occurences' : [
        { 'date' : '2012-06-03 17:00', 'title' : "Jubilee Gin O'Clock" }
    ]
},
{
    'title' : "Gin O'Clock an our earlier",
    'recurrance' : 'DAILY',
    'start_date' : '2012-06-06 16:00',
    'end_date' : false,
    'occurences' : [
    ]
}

Надеюсь, это поможет!

Другие вопросы по тегам