У меня есть набор баз данных, распределенных по нескольким местоположениям в сети и напр. один клиент, которому необходимо хранить некоторые данные в этих базах данных.Консистенция для чтения из распределенных баз данных
Мне нужно убедиться, что мои данные всегда будут сохранены.
Я не могу организовать набор реплик с репликацией sync/async, поскольку он заставит меня подключиться к одному хозяину, который является точкой отказа, поэтому я отправляю данные от клиента ко всем базам данных, которые я знаю. По-видимому, одна база данных может не сохраниться, поэтому я полагаюсь на другие записи баз данных. В конце концов, я получаю разные наборы данных, хранящиеся в БД, хотя эти наборы перекрываются. (Пример DB1 -> [1, 2, 3], DB2 -> [1, 3], DB3 -> [2,3,4])
Как получить согласованные данные при чтении из этих БД? Какие методы следует применять на клиенте, который пишет данные и клиент, который читает, чтобы иметь возможность успешно объединять наборы данных (получение на читателе [1,2,3,4])?
Спасибо за хороший ответ. Я прочитал статью Вернера о типах возможной согласованности, где он говорит о чтении ваших собственных записей, монотонном чтении и т. Д. Это все о наборе реплик EC, так что каждый экземпляр в конечном итоге получит те же данные, что и другие. Мне, вероятно, не нужно, так как основной целью этого хранилища является низкая латентность записи, я просто хочу иметь возможность читать со всех узлов и воссоздавать набор данных, который был отправлен клиентом. На данный момент я вижу решение, которое я назначаю номер каждой партии, которую я отправляю на узлы, поэтому позже в читателе я могу обнаружить уникальные элементы данных. – glaz666
Я вижу. Я немного перепутал ваш вопрос. Вы можете изучить использование векторных часов в качестве метода обнаружения конфликтов. Затем возникает вопрос о создании детерминированной функции слияния для применения во время чтения (т. Е. Разрешения чтения) – mpm