Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Что лучше для аналитических запросов? / 23 сообщений из 23, страница 1 из 1
07.03.2019, 15:40
    #39783619
кириллk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что лучше для аналитических запросов?
1 таблица с 3 полями и 1 лярд записей

или

1 таблица 100 полей и 10 миллионов записей

Спвсибо
...
Рейтинг: 0 / 0
07.03.2019, 15:57
    #39783632
L_argo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что лучше для аналитических запросов?
кириллk1 таблица с 3 полями и 1 лярд записей

или

1 таблица 100 полей и 10 миллионов записей

СпвсибоОтвета на этот вопрос не существует. Нужно поковыряться.
Но второй вариант ковырять может быть проще.
...
Рейтинг: 0 / 0
07.03.2019, 15:58
    #39783636
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что лучше для аналитических запросов?
Очевидно, та, которая позволит меньше тратить ресурсов и выполнять запросы быстрее.
...
Рейтинг: 0 / 0
07.03.2019, 16:02
    #39783642
vikkiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что лучше для аналитических запросов?
зависит от типа нагрузки, логики/сложности расчётов и размеров выборок, кардинальности, конфигураций сервера и тд.

у обоих подходов в некоторых сценариях будут преимущества над другим методом

например у второго варианта будет явное преимущество в скорости навигации между элементами / комбинацией ключей
...
Рейтинг: 0 / 0
07.03.2019, 17:20
    #39783691
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что лучше для аналитических запросов?
кириллk1 таблица с 3 полями и 1 лярд записей

или

1 таблица 100 полей и 10 миллионов записейВ первом варианте таблица будет больше в 6 раз

Что быстрее - зависит от запросов, но чаще всего быстрее будет 2-й вариант.
...
Рейтинг: 0 / 0
07.03.2019, 22:50
    #39783790
Mind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что лучше для аналитических запросов?
кириллk1 таблица 100 полей и 10 миллионов записей Спвсибо+ Columnstore index
...
Рейтинг: 0 / 0
08.03.2019, 12:29
    #39783844
tarrus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что лучше для аналитических запросов?
alexeyvgкириллk1 таблица с 3 полями и 1 лярд записей

или

1 таблица 100 полей и 10 миллионов записейВ первом варианте таблица будет больше в 6 раз

Что быстрее - зависит от запросов, но чаще всего быстрее будет 2-й вариант.

Это как так? Количество информации не меняется.
...
Рейтинг: 0 / 0
08.03.2019, 13:50
    #39783852
vikkiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что лучше для аналитических запросов?
tarrusЭто как так? Количество информации не меняется.если сильно упрощённо чисто математически без особой специфики хранения RDBMS то:

допустим два ключа (bigint + int , 8+4=12 byte) и какой-нибудь факт (decimal/numeric/money) на скажем 13 байтов
итого 25 байтов с вертикальным хранением фактов на миллиард строк (в результате 25 * 1 Млрд = 25 Млрд байтов или 23Gb)

то-же самое с горизонтальным хранением (т.е. композитный ключ уникален): с 98 полей 13-байтных фактов и 2 ключа = 1286 байтов, но количество строк в 98 раз меньше
т.е. 1286 * 1 миллиард / 98 = 12Gb

итого хранение:
вертикально - 23Гб
горизонтально - 12Гб
экономия за счёт ключей в два раза (в данном случае: 12 байтов на ключи и 13 на факты)
...
Рейтинг: 0 / 0
08.03.2019, 14:37
    #39783858
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что лучше для аналитических запросов?
tarrusalexeyvgпропущено...
В первом варианте таблица будет больше в 6 раз

Что быстрее - зависит от запросов, но чаще всего быстрее будет 2-й вариант.

Это как так? Количество информации не меняется.Возмём для примера целые поля.

В первом варианте получаем 1Г * 3 * 4 = 12 Гб
Во втором варианте получаем 10М * 100 * 4 = 4 Гб

То есть, на первый взгляд разница в 3 раза.

Но на самом деле, для хранения строки нужно ещё 8 байт. То есть, по размеру, это ещё как 2 невидимых целых числа на строку.

Тогда в первом варианте получаем 1Г * ( 3 * 4 + 8 ) = 20 Гб, уже в 5 раз больше

Это я ещё не считаю верхний уровень индекса, ну да ладно, можно пренебречь.
...
Рейтинг: 0 / 0
08.03.2019, 14:53
    #39783864
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что лучше для аналитических запросов?
alexeyvgВозмём для примера целые поля.
...
в 5 раз большеДа, и если вернуться к собственно "аналтитческим запросам", то тут зависит от запросов - если в запросе одновременно используется вся длинная строка, или её бОльшая часть, то быстрее будет "широкий" вариант.
Если используется малая часть (или даже одно значение), то "узкий".

Это, в общем, классический DWH.

Есть время измерения, счётчик, значение.
Можно так и хранить, как "узкую" таблицу. А можно сделать таблицу с временем как ПК, и колонками-счётчиками.

У нас сначала хранились широкие таблицы, но это было несколько неудобно, потому что разные группы счётчиков мерялись в разное время, + их было долстаточно много (десятки тысяч), так что одну широкую таблицу было сделать невозможно.
Поэтому было много "широких" таблиц, по группам счётчиков.

Но для расчётов и прочего это было неудобно, поэтому потом перешли на одну узкую таблицу (занявшую все террабайты дисковой подсистемы). Хотя для места, и для скорости, это неэффективно.
...
Рейтинг: 0 / 0
08.03.2019, 18:44
    #39783913
Alexander Us
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что лучше для аналитических запросов?
кириллk,

Не для Qlikview случайно?
...
Рейтинг: 0 / 0
08.03.2019, 19:12
    #39783916
PizzaPizza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что лучше для аналитических запросов?
кириллk1 таблица с 3 полями и 1 лярд записей

или

1 таблица 100 полей и 10 миллионов записей

Спвсибо

Если уже считать по объёму данных (что конечно коррелирует со скоростью выборок), то я лично не понимаю, как можно сравнивать разные данные. Таблица с тремя полями и миллиардом записей != таблице с 100 полями и 10 миллионами записей. Чисто математически.

3 000 000 000 != 1 000 000 000
...
Рейтинг: 0 / 0
08.03.2019, 19:59
    #39783931
vikkiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что лучше для аналитических запросов?
PizzaPizza,

1Млрд = 1'000 миллионов
3 поля из которых два ключа и один факт
в горизонтальное (или широкое как указали выше)
хранение 100 полей (2 ключа и 98 фактов)
это 1'000 Млн. / 98 ~ 10.2 Млн т.е. в данном случае
миллиард вполне пропорционален 10 млн.
...
Рейтинг: 0 / 0
08.03.2019, 21:25
    #39783958
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что лучше для аналитических запросов?
PizzaPizzaЕсли уже считать по объёму данных (что конечно коррелирует со скоростью выборок), то я лично не понимаю, как можно сравнивать разные данные. Таблица с тремя полями и миллиардом записей != таблице с 100 полями и 10 миллионами записей. Чисто математически.

3 000 000 000 != 1 000 000 000Я же написал:
alexeyvgЭто, в общем, классический DWH.

Есть время измерения, счётчик, значение.
Можно так и хранить, как "узкую" таблицу. А можно сделать таблицу с временем как ПК, и колонками-счётчиками.В обоих случаях хранится один миллиард значений, но в первом случае он хранится в трёх миллиардах полей (то есть в одном миллиарде записей, по одной записи на каждое значение, в записи 3 поля - значение, + 2 ключа ), во втором случае в одном миллиарде полей - 10 миллионов записей по 100 значений.
...
Рейтинг: 0 / 0
08.03.2019, 21:28
    #39783959
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что лучше для аналитических запросов?
vikkivв горизонтальное (или широкое как указали выше)
хранение 100 полей (2 ключа и 98 фактов)Скорее, там 1 поле ключ, и 100 полей - факты.
Итого 101 поле, а до 100 автор просто округлил :-)
...
Рейтинг: 0 / 0
08.03.2019, 21:50
    #39783965
PizzaPizza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что лучше для аналитических запросов?
alexeyvgВ обоих случаях хранится один миллиард значений, но в первом случае он хранится в трёх миллиардах полей (то есть в одном миллиарде записей, по одной записи на каждое значение, в записи 3 поля - значение, + 2 ключа), во втором случае в одном миллиарде полей - 10 миллионов записей по 100 значений.

Не получается у меня никак. Автор пишет про

три поля - 1 000 000 000 000 (спасибо за поправку про миллиарды) записей
100 полей - 10 000 000 000 записей

Допустим на каждую запись служебной информации надо добавить (хотя мне кажется, что служебная информация для записи из 100 полей побольше будет, чем для записи в 3 поля и то на то и получится, но допустим), это +1 поле каждой записи. Получаем

4 * 1 000 000 000 000 полей
101 * 10 000 000 000 записей

Получаем 4 000 000 000 000 != (совсем никак) 1 010 000 000 000. Кстати хорошо бьется с вашими 2-3-5 разами разницы.

Имхо автор говорит о совершенно разном наборе данных, а все остальное, все допуски на 2 ключа (почему в первой таблице три ключа, а во второй не пять?) это уже чистая спекуляция без понимания реальной структуры и типа данных.
...
Рейтинг: 0 / 0
08.03.2019, 21:59
    #39783970
vikkiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что лучше для аналитических запросов?
PizzaPizza,

при чём здесь триллионы?
...
Рейтинг: 0 / 0
08.03.2019, 22:04
    #39783971
PizzaPizza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что лучше для аналитических запросов?
alexeyvg,

Я имею ввиду, что простое допущение про два ключа в первой таблице сразу дает большую разницу между таблицами. Поэтому сравнивать таблицу с одним ключом и двумя для меня странно - они не транслируются друг в друга, либо же во второй таблице из 100 полей есть больше одного ключа. Иначе это не сравнение горизонтальная vs вертикальная таблица и/или разный набор данных, который соответственно может различаться в разы по количеству полей и данных.
...
Рейтинг: 0 / 0
08.03.2019, 22:09
    #39783975
PizzaPizza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что лучше для аналитических запросов?
vikkivPizzaPizza,

при чём здесь триллионы?

Боже боже, теперь лишние нули накопировал.
Ну главное, что соотношение не меняется.
...
Рейтинг: 0 / 0
08.03.2019, 22:14
    #39783976
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что лучше для аналитических запросов?
PizzaPizzaalexeyvg,

Я имею ввиду, что простое допущение про два ключа в первой таблице сразу дает большую разницу между таблицами. Поэтому сравнивать таблицу с одним ключом и двумя для меня странно - они не транслируются друг в друга, либо же во второй таблице из 100 полей есть больше одного ключа. Иначе это не сравнение горизонтальная vs вертикальная таблица и/или разный набор данных, который соответственно может различаться в разы по количеству полей и данных.Это сравнение двух реализаций одной и той же задачи - "хранение миллиарда значений и аналитичечские запросы к этим данным"
В этом и вопрос автора.
Он выбирает, как хранить одни и те же данные - в 10 млн строк широкой таблицы, или в миллиарде строк узкой, что бы быстрее двыполнялись аналитическмие запросы.

Во второй таблице в принципе должен быть один ключ, но даже если (как в моём примере выше) там будет 2 ключа - это неважно, потому что добавление одного ключа в "широкую" таблицу не даёт какого либо изменения объёмов хранения. Какая разница, на 100 полезных полей будет одно бесполезное поле, или два?

Как они транслируются - я уже 2 раза написал выше.
Это типичный выбор для задач DWH, и именно так транслируются эти узкая и широкая таболицы в друг друга, я даже вам поля перечислил.
...
Рейтинг: 0 / 0
08.03.2019, 22:36
    #39783981
PizzaPizza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что лучше для аналитических запросов?
alexeyvgКак они транслируются - я уже 2 раза написал выше.
Это типичный выбор для задач DWH, и именно так транслируются эти узкая и широкая таболицы в друг друга, я даже вам поля перечислил.

Ага, спасибо. Время измерения это естественный ключ для горизонтальных таблиц, это для меня идея для подумать. Это конечно же экономит атрибут для широкой таблицы и добавляет для узкой.
Никогда не имел задач с выборкой по времени как сущности поэтому мне была не очевидна проблема.
...
Рейтинг: 0 / 0
08.03.2019, 23:12
    #39783987
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что лучше для аналитических запросов?
PizzaPizzaalexeyvgКак они транслируются - я уже 2 раза написал выше.
Это типичный выбор для задач DWH, и именно так транслируются эти узкая и широкая таболицы в друг друга, я даже вам поля перечислил.

Ага, спасибо. Время измерения это естественный ключ для горизонтальных таблиц, это для меня идея для подумать. Это конечно же экономит атрибут для широкой таблицы и добавляет для узкой.
Никогда не имел задач с выборкой по времени как сущности поэтому мне была не очевидна проблема.Даже если не только время измения, тут важно, что ключи дают незначительный оверхед к данным. Пуксть даже ещё 10 полей в ключах, что это по сравнению с 100 полями данных? А вот для записи с одним полем данных даже один ключ - это много.
Полюс ещё 8 невидимых байт (внутренних для SQL Server) на каждую строку, то есть на каждое значение - это тоже очень много.
...
Рейтинг: 0 / 0
08.03.2019, 23:44
    #39783991
.Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что лучше для аналитических запросов?
Отмечу, что не пока раскрыты влияние глубины индекса и степень сжатия.

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


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