Как бороться с коллизиями данных при синхронизации нескольких хранилищ/коллекций?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как бороться с коллизиями данных при синхронизации нескольких хранилищ/коллекций?

Сообщение Anonymous »

Я создаю программное обеспечение, которое может обрабатывать и хранить данные на нескольких конечных точках (например, в базах данных SQL, в файле и т. д. не имеет особого значения).
И я имею в виду случай, когда я использую и базу данных, и файл для хранения данных, или две базы данных, и мне хочется время от времени синхронизировать эти хранилища.
Когда данные не синхронизированы, но коллизий нет, решение тривиально, например:

Код: Выделить всё

Storage A
----------+----------+-----------+
Id    |   Name   |   Login   |
----------+----------+-----------+
1    |   Jonh   |   Login1  |
3    |   Alice  |   Login2  |
4    |   Jane   |   Login3  |
----------+----------+-----------+

Storage B
----------+----------+-----------+
Id    |   Name   |   Login   |
----------+----------+-----------+
1    |   Jonh   |   Login4  |
2    |   Mike   |   Login5  |
5    |   Nick   |   Login6  |
----------+----------+-----------+
Я бы сделал разницу между A и B, а затем между B и A и добавил обе разницы в эти коллекции:

Код: Выделить всё

var diffA = storageA.Except(storageB);
var diffB = storageB.Except(storageA);

storageA.AddRange(diffB);
storageB.AddRange(diffA);
И результат будет таким:

Код: Выделить всё

Storage A and Storage B
----------+----------+-----------+
Id    |   Name   |   Login   |
----------+----------+-----------+
1    |   Jonh   |   Login1  |
2    |   Mike   |   Login5  |
3    |   Alice  |   Login2  |
4    |   Jane   |   Login3  |
5    |   Nick   |   Login6  |
----------+----------+-----------+
НО, что, если в этих хранилищах каким-то образом появятся две строки с одинаковыми идентификаторами? например:

Код: Выделить всё

Storage A
----------+----------+-----------+
Id    |   Name   |   Login   |
----------+----------+-----------+
2    |   Mike   |   Login5  |
----------+----------+-----------+

Storage B
----------+----------+-----------+
Id    |   Name   |   Login   |
----------+----------+-----------+
2    | NotMike  |   Login9  |
----------+----------+-----------+
Как мне справиться с такой ситуацией?
Я знаю, что могу, например, изменить поле идентификатора для второго хранилища, установить его до 6 или что-то еще, доступное во всех хранилищах, которые я пытаюсь синхронизировать, но тогда как быть с другими таблицами/коллекциями, которые ссылаются на новую конфликтующую строку?
А что, если те таблицы, которые ссылаются на упомянутую таблицу, также сталкиваются?
Как разработчики программного обеспечения подходят к такой проблеме?

Подробнее здесь: https://stackoverflow.com/questions/792 ... collection
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как бороться с коллизиями данных при синхронизации нескольких хранилищ/коллекций?
    Anonymous » » в форуме C#
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Unity — использование собственных коллекций вместо коллекций C#
    Anonymous » » в форуме C#
    0 Ответы
    30 Просмотры
    Последнее сообщение Anonymous
  • Unity — использование собственных коллекций вместо коллекций C#
    Anonymous » » в форуме C#
    0 Ответы
    42 Просмотры
    Последнее сообщение Anonymous
  • Исключение нескольких хранилищ данных в тесте инструментов Android
    Anonymous » » в форуме Android
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Проблемы с коллизиями с использованием tilemap raylib C++
    Anonymous » » в форуме C++
    0 Ответы
    32 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»