powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как правильно разбить большую БД на части/файлы?
9 сообщений из 9, страница 1 из 1
Как правильно разбить большую БД на части/файлы?
    #40094603
Badhabit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
День добрый. Подскажите, как будет лучше сделать следующее. Есть довольно много данных 5-6Тб разделенных в файлы помесячно. Их нужно "залить" в две таблицы БД, по одной предварительно построив ClusterdColumnStore индекс (для сжатия данных) ну и потом по некоторым полям построить обычные индексы. БД будет использоваться исключительно для чтения ну и "доливки" новых данных каждый месяц...
Заливать весь объем в одиночные таблицы что-то не хочется, т.к. может понадобится заменить какой-нибудь месяц в середине, ну а delete, как я понимаю с такими объемами не справится да и размер .mdf-файла получается огромным. Есть две идеи.
1. Сделать много "маленьких" БД куда заливать данные по месяцу, ну и строить индексы и сделать одну БД в которой сделать два View в котором через union all объединять соответствующие таблицы из этих "маленьких" баз.
2. Заливать в одну БД в разные таблицы, которые каждая в своей файловой группе (ну и в отдельном файле) и потом объединить все их секционированием.
Так собственно вопрос какой из подходов лучше/оптимальнее с точки зрения логики, скорости работы (может есть какие-нибудь нюансы с индексами) и пр. Или вообще всё не так и нужно делать всё по другому?
...
Рейтинг: 0 / 0
Как правильно разбить большую БД на части/файлы?
    #40094607
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
разбивая по разным базам у тебя будут разные права на разных базах.

Секционирование в этом случае проще.
...
Рейтинг: 0 / 0
Как правильно разбить большую БД на части/файлы?
    #40094610
flexgen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Badhabit,

Я не очень понял вот это:
автор2. Заливать в одну БД в разные таблицы, которые каждая в своей файловой группе (ну и в отдельном файле) и потом объединить все их секционированием.

Секционирование это, строго говоря, разделение данных, что ты собрался объединять? Или имеется ввиду загрузка данных в heap таблицы с последующим переключением в заранее созданную секционированную таблицу? Если время загрузки ограничено, то это вполне подходящий вариант, ты можешь грузить данные в несколько таблиц одновременно.
...
Рейтинг: 0 / 0
Как правильно разбить большую БД на части/файлы?
    #40094635
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Badhabit,

если потребуется перезагрузить какой-то период полностью, то секционирование по этому периоду. Секции можно переключать через alter table.
...
Рейтинг: 0 / 0
Как правильно разбить большую БД на части/файлы?
    #40094780
Badhabit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторразбивая по разным базам у тебя будут разные права на разных базах.
Наверно с правами проблем не будет, БД вообще на локальном компе и работаю из под sa и права сам все назначаю... Или какие-то другие права?
авторсекционирование это, строго говоря, разделение данных, что ты собрался объединять? Или имеется ввиду загрузка данных в heap таблицы с последующим переключением в заранее созданную секционированную таблицу? Если время загрузки ограничено, то это вполне подходящий вариант, ты можешь грузить данные в несколько таблиц одновременно.
Да, имелось ввиду подключение закруженных месяцев в заранее созданную секционированную таблицу...

Ну в принципе я хотел узнать есть ли преимущество у секций перед View с union all из разных БД? Потому что мне как-то комфортнее работать именно с несколькими маленькими ДБ, чем с секционированными таблицами в одной БД. Только не будет ли каких-нибудь просадок в производительности при данном выборе?
...
Рейтинг: 0 / 0
Как правильно разбить большую БД на части/файлы?
    #40094793
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Badhabit,

есть только один способ узнать. Я не замечал, например.
...
Рейтинг: 0 / 0
Как правильно разбить большую БД на части/файлы?
    #40094796
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Badhabit
День добрый. Подскажите, как будет лучше сделать следующее. Есть довольно много данных 5-6Тб разделенных в файлы помесячно. Их нужно "залить" в две таблицы БД, по одной предварительно построив ClusterdColumnStore индекс (для сжатия данных) ну и потом по некоторым полям построить обычные индексы. БД будет использоваться исключительно для чтения ну и "доливки" новых данных каждый месяц...
Заливать весь объем в одиночные таблицы что-то не хочется, т.к. может понадобится заменить какой-нибудь месяц в середине, ну а delete, как я понимаю с такими объемами не справится да и размер .mdf-файла получается огромным. Есть две идеи.
1. Сделать много "маленьких" БД куда заливать данные по месяцу, ну и строить индексы и сделать одну БД в которой сделать два View в котором через union all объединять соответствующие таблицы из этих "маленьких" баз.
2. Заливать в одну БД в разные таблицы, которые каждая в своей файловой группе (ну и в отдельном файле) и потом объединить все их секционированием.
Так собственно вопрос какой из подходов лучше/оптимальнее с точки зрения логики, скорости работы (может есть какие-нибудь нюансы с индексами) и пр. Или вообще всё не так и нужно делать всё по другому?

Это классическая задача под секционирование.
У меня, например, аналогичная задача. Сводная БД, куда (пере)загружаются данные разных филиалов помесячно.
Таблицы поделены на, примерно, 6000 секций, с ключом по id филиала + месяц.
Заливка происходит в динамически создаваемые создаваемые таблицы в отдельной схеме, а потом секция подменяется через partition switch.
С учетом того, что данные льются не в основную структуру, чтение данных из основной структуры - практически не блокируется. Практически, потому что partition switch приводит к аварийному завершению запроса, если он работает на момент переключения секций. Но, к счастью, в 2019 появилось ленивое переключение. Оно сначала ждет задаваемый в команде таймаут, а потом - переключает.
Да!
Дозагрузка реализована несколько уродски. :-)
В автономные таблицы заливаются новые данные, а потом туда же - ранее загруженные данные из продуктовой таблицы.
Потом в этой таблице строятся индексы, а потом - секция переключается.

Могу сказать, что не смотря на постоянную заливку данных 24Х7 в 8 потоков, по продуктовым таблицам вполне можно строить оперативные отчеты. Сложные агрегаты, конечно, считаются в кубе, который строится на базе, восстановленной из бэкапа раз в сутки.

Объем всего этого дела не очень большой, чуть менее 10 Тб, но, думаю, потенциал у нее где то до 20-30 Тб дорасти, судя по нагрузке, откликам и т.д.
...
Рейтинг: 0 / 0
Как правильно разбить большую БД на части/файлы?
    #40094797
Badhabit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторесть только один способ узнать. Я не замечал, например.
Понял, потестирую...
Всем спасибо!
...
Рейтинг: 0 / 0
Как правильно разбить большую БД на части/файлы?
    #40094900
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
Badhabit,

если потребуется перезагрузить какой-то период полностью, то секционирование по этому периоду. Секции можно переключать через alter table.


По моему опыту altertable с целью разбить партиции на части виснет замертво. Всегда создавал и подменял таблицу.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как правильно разбить большую БД на части/файлы?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]