Как обрабатывать параллелизм базы данных - PullRequest
1 голос
/ 13 декабря 2010

Как мне обработать событие, где

  1. Пользователь A редактирует документ
  2. Пользователь Б Начинает редактирование того же документа
  3. Пользователь B сохраняет
  4. Пользователь A сохраняет - Должен произойти сбой, но что мне с этим делать? Сказать пользователю, что страница (или сущность) была сохранена кем-то другим, недостаточно. Пользователь должен знать, какая часть документа / полей была изменена, и определить, хочет ли он повторить попытку сохранения или нет.
    • Если это просто короткие поля, я думаю, что я могу сравнить их - какой эффективный способ сравнить старые и новые значения в поле?
    • Если это длинный текстовый документ, как я могу сделать что-то вроде diff? Или как мне тогда справиться с этим? Просто сказать пользователю, что кто-то сохранил документ после того, как вы его открыли, недостаточно?

Ответы [ 2 ]

1 голос
/ 13 декабря 2010

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

Все, что выходит за рамки этого - пользовательское программирование. Ваше предложение о предложении diff зависит от вашего домена. Если речь идет о редактировании текстовых документов, вы можете использовать стандартные документы diff. Однако прежде чем идти по этому пути, спросите себя, действительно ли стоит тратить много времени на ...

0 голосов
/ 13 декабря 2010

Обратите внимание, для какого языка вы хотите это, но в Java я использую xstream , чтобы сериализовать объект в xml, а затем преобразовать XML, используя http://www.crosswire.org/jsword/java2html/org.crosswire.common.diff.index.html, чтобы увидеть, что изменилось.

Если у вас есть только несколько сущностей и вариантов использования, вы можете уйти, реализовав все это поведение вручную, и использовать механизм сравнения только для сравнения больших двоичных объектов текста.

...