Решено Одновременное редактирование полей сервером и пользователем

Тема в разделе "Lotus - Программирование", создана пользователем Gandliar, 17 янв 2016.

  1. Gandliar

    Gandliar Well-Known Member

    Регистрация:
    16 фев 2004
    Сообщения:
    222
    Симпатии:
    0
    Пользователи могут редактировать документ на сервере либо в локальной реплике.
    Агенты на сервере могут менять ряд полей документа.
    Задача избежать конфликтов репликации и сохранить корректность данных.
    Предлагаемое решение
    1. Установить для документа $ConflictAction = "3" merge\no conflicts
    2. Условно разделить поля документа на 2 части: а) поля пользователя (формы) и б) поля сервера (например с префиксом s_ )
    3. Поля формы показываются и могут редактироваться пользователем, поля сервера показываются только через CFD поля и редактируются сервером.
    4. Документ создается как обычно.
    5. При редактировании документа, при его сохранении, документ не сохраняется как обычно, а находится через вид его документ в базе и туда перезаписываются все поля документа, за исключением полей сервера "s_"
    Таким образом исключаются конфликты репликации, кто позже сохранил (пользовательские поля) тот и прав, поля измененные сервером автоматически остаются нетронутыми.
    Что вы думаете об этой идее?

    Конкретная задача - база данных на сервере также является интернет-сайтом. Для некоторых страниц необходимо вести подсчет просмотров уникальными пользователями.
    Сейчас подсчет ведется в связанном документе, чтобы избежать конфликтов репликации. По мне это уменьшает производительность, так как постоянно надо подтягивать этот связанный документ.
    Думаю что вышеприведенный подход позволит вести статистику в самом документе, без всяких дополнительных.
    Какие могут быть подводные камни?

    Заранее благодарю.
     
  2. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    я изменил цену продукта и ты изменил цену продукта, оба в локальной реплике, оба реплицируют на сервер
    кто в этой ситуации прав? ;)
     
  3. Gandliar

    Gandliar Well-Known Member

    Регистрация:
    16 фев 2004
    Сообщения:
    222
    Симпатии:
    0
    Кто последний поменял тот и прав, его изменения сохранятся

    Меня больше морочит создавать теневые/дополнительные документы когда база как веб-сайт используется и сервер постоянно что то пишет в доки. Может с таким подходом получится оставить 1 документ и все.
     
  4. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    это не мерже ;)

    никак у вас работать не будет пока система в оффлайне
     
  5. Gandliar

    Gandliar Well-Known Member

    Регистрация:
    16 фев 2004
    Сообщения:
    222
    Симпатии:
    0
    То есть для уменьшения последствий одновременного редактирования
    надо при сохранении изменений пользователя проверять значения полей и сохранять только изменившиеся поля.

    Ну и в принципе сверив дату изменения документа можно выдать, что пока вы редактировали, кто то уже успел поредактировать ...

    а реплицируется с сервером постоянно база
     
  6. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    применять фронтэнд и к ним есть туевахуча средств подсчета чего угодно (это не доминошная задача)
     
  7. Gandliar

    Gandliar Well-Known Member

    Регистрация:
    16 фев 2004
    Сообщения:
    222
    Симпатии:
    0
    Тут речь идет не о глобальной статистике сайта а о просмотре конкретной страничке клиента пользователями.
    Например есть каталог услуг и в есть странички услуг конкретных клиентов.
    Поэтому я думаю что простой +1 с проверкой на уникальность ip в течение часа достаточно
    идея в том и состоит, чтобы не делать дополнительные документы, а все хранить в одном, не смотря на то что изменять этот документ будут и сервер и пользователи
    и чтобы это происходило безконфликтно.
    также сервер время от времени (например исходя из наступления определенного периода или его окончания) изменяет признаки отображения документа.
    при этом, другие поля могут редактироваться пользователем.
    сейчас в моей программе сервер меняет связанные документы, чтобы разграничить изменения пользователя и сервера
    но это стало совсем неудобно, приходится таскать за собой практически копию всех данных и обновлять ее.
    вот решил переделать на иной подход.
    однако это глобальная переделка и боюсь что все гдалко на бумаге, не напороться бы на овраги...
     
  8. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    какая разница? - для домины это задача лишняя
     
  9. Gandliar

    Gandliar Well-Known Member

    Регистрация:
    16 фев 2004
    Сообщения:
    222
    Симпатии:
    0
    вопрос был про подводные камни :)

    1 камень уже нашелся -> при сохранении сохранять только измененные поля.
    непонятно правда как проверить изменилось ли ричтекствое поле.
     
  10. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    DXML вам в помощь
    ну или не использовать эти поля вообще
     
  11. Gandliar

    Gandliar Well-Known Member

    Регистрация:
    16 фев 2004
    Сообщения:
    222
    Симпатии:
    0
    Всем спасибо большое.
     
Загрузка...
Похожие Темы - Одновременное редактирование полей
  1. Вовкин
    Ответов:
    0
    Просмотров:
    723
  2. Вовкин
    Ответов:
    0
    Просмотров:
    684
  3. Вовкин
    Ответов:
    0
    Просмотров:
    781
  4. orion
    Ответов:
    8
    Просмотров:
    1.671
  5. Fleerka
    Ответов:
    25
    Просмотров:
    529

Поделиться этой страницей