@paz

MS sql. Тысяча таблиц или одна большая?

Добрый день, уважаемые знатоки MS SQL

Имеется база куда с большой частотой пишутся данные по 2-3 тысячам сущностей. Пишется все в несколько таблиц. Объем базы больше 1тб, рост около 50-60 гб/ месяц.

С ростом базы начались проблемы по скорости при вставке. Также, т.к. база должна быть онлайн 24х7 возникали проблемы при необходимости переиндексации или диагностики базы (необходим был монопольный доступ)

Есть идея сделать на каждую сущность свою таблицу данных. Даст ли это прирост скорости при вставке (индекс на таблицу меньше) или наоборот заставит систему держать больше индексов в памяти? также, это дало бы удобство при переносе данных и распределении данных на несколько баз. Вся бизнес логика работает по сущностно, выборки идут только по ключу сущности.

По использованию базы: пишется постоянно практически в каждую сущность с интенсивностью раз в 1-5 секунд. Читается по разному, в зависимости от активности пользователей, в основном нечасто, но выборка должна быть быстрой, чтобы получить строк 20-30 тыщ за пару секунд. Хранилище на ssd.
  • Вопрос задан
  • 1174 просмотра
Пригласить эксперта
Ответы на вопрос 3
@nApoBo3
Проблемы со скоростью вставки с чем связаны?
Несколько таблиц по идее должны быть быстрее по целому ряду причин, но может вырасти кол-во джойнов на выборке, что скажется на производительности. Плюс возможно потребуется дополнительные проверки значений которые обеспечивались уникальными ключами, что сведет все плюсы на нет.
В любом случае это потребует пересмотра архитектуры базы и приложения, и не факт, что на выходе будет быстрее.
Возможно имеет смысл сделать разделение таблиц не по сущностям, а по каким то другим признакам, не зная структуры базы сказать сложно.
А может надо просто разделить объекты на чет-нечет и раскидать на два сервера.
Ответ написан
@lega
Разными таблицами должно быть лучше, ещё можете попробовать партицирование и сжатие.
получить строк 20-30 тыщ за пару секунд
Если у вас данные выбираются пачками, например по дням, то можно их хранить по дням при этом сжимать (если там текст, то сжать можно в 10-30 раз), таким образом выборка будет быстрее (экономия io), занимаемое место и индекс будет сильно меньше.
Ответ написан
Комментировать
sim3x
@sim3x
В систему просто сыпятся данные с датчиков. пользователи берут отчеты за интервал времени - просто сгружаются данные и на клиенте считается математика. вобщем нужно быстро писать, быстро отдавать по одному ключу - времени. никаких навороченных выборок не нужно.

неправильная архитектура - не нужно писать raw логи в бд
для каждого датчика своя таблица

как бекапить
никак - поднимай репликацию

как выделить часть данных, которые чаще всего используются и должны работать быстрее, чем архивные
определи период, через, который данные отправляются в архив
разбей их на периоды (за месяц или за неделю)
оставь в виде статических файлов

И еще
У тебя не бигдата - у тебя неправильная архитектура
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы