Я почти готов приступить к настройке хранилища данных SQL для некоторых служб SQL Server Analysis Services. Данные, которые я собираюсь разрезать и нарезать кубиками, находятся в базе данных вне сайта, которую я не контролирую, поэтому моя идея состоит в том, чтобы настроить регулярные задания, которые выходят, собирают новые записи и вставляют их в мою собственную версию стол.
Мне интересно, есть ли какие-нибудь хорошие инструменты, которые помогут спланировать требования к пространству базы данных. Всего через 5 месяцев интересующая меня таблица уже получила почти 4,5 миллиона записей, и к этому времени в следующем году, по моим оценкам, мы могли бы генерировать 3-4 миллиона записей в месяц.
Я полагаю, что я ищу то, во что я могу передать определение таблицы, а затем сказать мне, сколько места на диске займет миллиард строк.
Спасибо.
редактировать
Что ж, используя Excel, я получил теоретическое значение 1098 байт на запись, используя наихудший сценарий, когда varchar (1000) использовался в каждой записи по максимуму.
При 4 миллионах записей в месяц это 48 миллионов записей в год, а в худшем случае потребуется 50 гигабайт дискового пространства в год. Отбрасывание этого на varchar (255) дает мне не совсем 16 гигабайт в год, а varchar (50) дает мне ~ 6.5 гигабайт в год.
Есть ли кто-нибудь лучший администратор баз данных, чем я, и дайте мне знать, если я не в курсе или нет?
Редактировать # 2
В соответствии с просьбой, вот определение таблицы:
Type Size
int 4
int 4
int 4
datetime 8
Decimal(19,5) 9
int 4
int 4
varchar(1000) 1000
int 4
int 4
smalldatetime 4
int 4
int 4
int 4
int 4
decimal(9,2) 5
smallint 2
datetime 8
decimal(18,2) 9
bit 1
int 4
int 4
Всего 1098 байт, если все поля используются по максимуму.
Я не знаю никаких инструментов, которые бы это сделали; однако, хотя это немного неудобно, вы можете рассчитать это самостоятельно на основе типов столбцов строки. Вероятно, вы могли бы написать PowerShell, который поможет вам, если вы выведете create table
скрипты и скачали их в скрипт.
Может быть сценарий, который ищет все int
и добавляет к счетчику, и то же самое для каждого типа данных, затем вы можете выполнить быстрое умножение, чтобы вычислить прибл. размер стола. Наверное, будет сложно подобрать размеры всех varchar(50)
и char(10)
типы данных, но опять же, немного магии PowerShell, вероятно, может помочь.
Обновить
Я тоже прихожу к тому же выводу, что и вы, в худшем случае у вас 1098 байт на запись. Вы знаете свои данные, но, судя по внесенным вами изменениям, велика вероятность того, что ваши данные будут меньше varchar(1000)
для многих записей. Это даст вам экономию места на каждой записи, когда это так, поэтому в лучшем случае у вас будет 98 байтов на запись. На вашем месте я бы использовал эту информацию, чтобы проверить данные, которые у вас уже есть, и придумать базовую линию для средней длины этого varchar(1000)
и используйте это среднее значение для вычисления хорошей медианы.