Стоит ли делать на nosql highload с несколькими млрд строк, чтобы уйти от add column?
Юзеры могут создавать свои таблицы, хранить и получать данные через наш API.
Данных может быть несколько млрд. Будет использоваться горизонтальный шардеринг. шарда = 1 мастер и 2 слейва.
Если у юзера уже несколько млрд. строк и он решит добавить колонку, то он должен об этом объявить за неделю. Т.к. на всех шардах нужно будет сделать следующее:
1. Остановить репликацию на слейв 1 и 2, сделать add column на слейв 1 и 2
2. Включить репликацию на слейв 1 и 2.
3. Заменить мастер на слейв 1.
4. Со слейв 2 залить БД на старый мастер.
5. В итоге у всех новая колонка и свежие данные, при этом мастер не пропадал из сети.
Собственно вопрос. Если всё перенести на leveldb, то можно будет избавиться от add column, но не добавит ли это новых более серьёзных проблем?
А зачем останавливать репликацию и прочие странные вещи для добавления колонки в postgresql?
Добавляете default null колонку. Транзакционно, мгновенно. Если колонка не должна быть null - то после добавления колонки меняете ей default, затем небольшими пачками обновляете имеющиеся строки, затем drop null.
Melkij: Да, действительно, так должно сработать. Что-то я протупил. Просто по опыту реструктуризация много-миллион-строковых таблиц никогда не обходилась без проблем.
Подскажите, пожалуйста, что я делаю не так
в postgresql 9.4 с дефолтными настройками
CREATE TABLE "ds_citizens" (
"citizen_id" bigint NOT NULL DEFAULT '0'
);
INSERT 1000 строк занимает 5 сек, а в sqlite3 - 0.1 сек