Во время проектирования хранилища данных мы изучаем способ разделения записей. Основным узким местом является разделение общих счетчиков. Допустим, у нас есть n билетов, которые будут предложены (Типовое бронирование поездов, IRCTC e.t.c). Как мы разделяем хранилище данных, чтобы клиенты видели живую согласованность между ними (с точки зрения процентного количества заказа, то есть currentvalue/x).Разбиение базы данных для общего счетчика
Агрегация для каждого считывания будет слишком дорогостоящей, любые другие указатели будут полезны.
Также предполагается, что для операции записи используется параллелизм (поэтому нет необходимости загружать чтение в подчиненные устройства), и это было бы хорошо для окончательной согласованности. Но есть ли способ, которым разница в несогласованности может быть сведена к минимуму через осколки. Например, партион из 100 билетов выполнен как 25, 25, 25, 25 через 4 осколка. В любой момент времени представление базы данных должно быть как x% заполнено и как минимизировать несогласованность (наивные операции, такие как round robin, hashing e.t.c) среди осколков.
Общий счетчик по определению не может быть разделен. Крайнее и простое решение - использовать отдельный экземпляр для этого счетчика (сколько пропускной способности вам нужно для этого счетчика?). В зависимости от требований существуют другие методы с различной степенью согласованности и точности. Вы можете использовать, например, per-partition HyperLogLog и объединить их при чтении очень эффективно. –
Могут быть случаи, когда одного экземпляра также может быть недостаточно, в какой-то момент нам может понадобиться разделить! Также может нанести ущерб заявлению о предоставлении вероятностного номера (в случае бронирования билетов). – titan