Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как правильно создать секционированное представление?
|
|||
|---|---|---|---|
|
#18+
Коллеги, приветствую! Есть несколько [десятков] региональных баз. Структура таблиц - аналогичная. Хочется "виртуально" склеить их в одну БД, собрав в данные как секционированное представление, добавив колонку с кодом региона, типа: Код: sql 1. 2. 3. 4. 5. Проблема в том, что в таблицах БД никакого кода региона нету. И, соответственно, констрейнт region between 1 and 1 в таблицу не вставишь. И условие Where region = 1 во вью тоже не поместишь. И в результате этого запросы вида: Код: sql 1. 2. Генерируют планы с обращением во все таблицы. Спасает, если добавить Where a.region = 1 and b.region = 1 Option (recompile), но в случае уже трех таблиц, например - это почему то не работает. Да и не всегда вариант. Как быть то? view нужны только на чтение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2019, 11:02 |
|
||
|
Как правильно создать секционированное представление?
|
|||
|---|---|---|---|
|
#18+
uaggsterКак быть то?region должна быть колонкой во всех таблицах, входить в ПК, и на неё в каждой таблице должен быть наложен соотв чек-констрейн (то есть в db1 - "region=1" и т.д.) BOL2.Partitioning column •The partitioning column is a part of the PRIMARY KEY of the table. •It cannot be a computed, identity, default, or timestamp column. •If there is more than one constraint on the same column in a member table, the Database Engine ignores all the constraints and does not consider them when determining whether the view is a partitioned view. To meet the conditions of the partitioned view, there should be only one partitioning constraint on the partitioning column. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2019, 11:27 |
|
||
|
Как правильно создать секционированное представление?
|
|||
|---|---|---|---|
|
#18+
uaggsterКак быть то?Напишите инлайновую функцию Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2019, 11:43 |
|
||
|
Как правильно создать секционированное представление?
|
|||
|---|---|---|---|
|
#18+
Во-первых, странно видеть имя типа db1.table1. Где имя схемы, спрашивается? Во-вторых, если написать инлайн-функцию, то можно будет в неё просто вставлять запись и быть уверенным, что она автоматически вставится в нужную таблицу подобно секционированному view? Очевидно, это невозможно. Плюс к этому и синтаксис обращения к функции будет отличаться от синтаксиса обращения к таблице. Наверно, это никого не обрадует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2019, 12:28 |
|
||
|
Как правильно создать секционированное представление?
|
|||
|---|---|---|---|
|
#18+
iapВо-вторых, если написать инлайн-функцию, то можно будет в неё просто вставлять запись и быть уверенным, что она автоматически вставится в нужную таблицу подобно секционированному view?uaggsterview нужны только на чтение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2019, 12:35 |
|
||
|
Как правильно создать секционированное представление?
|
|||
|---|---|---|---|
|
#18+
iapВо-первых, странно видеть имя типа db1.table1. Где имя схемы, спрашивается? вторую точку пропустил, прошу прощения. Читать как: "db1..table1" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2019, 12:41 |
|
||
|
Как правильно создать секционированное представление?
|
|||
|---|---|---|---|
|
#18+
alexeyvguaggsterКак быть то?region должна быть колонкой во всех таблицах, входить в ПК, и на неё в каждой таблице должен быть наложен соотв чек-констрейн (то есть в db1 - "region=1" и т.д.) BOL2.Partitioning column •The partitioning column is a part of the PRIMARY KEY of the table. •It cannot be a computed, identity, default, or timestamp column. •If there is more than one constraint on the same column in a member table, the Database Engine ignores all the constraints and does not consider them when determining whether the view is a partitioned view. To meet the conditions of the partitioned view, there should be only one partitioning constraint on the partitioning column. Да понимаю я это. Никакого обходного трюка нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2019, 12:46 |
|
||
|
Как правильно создать секционированное представление?
|
|||
|---|---|---|---|
|
#18+
uaggsterНикакого обходного трюка нет?Не знаю такого :-( очень уж это сложно, видимо, разложить данные по таблицам по таким критериям в общем виде. Конечно, мы видим глазами, как секционируются данные, но серверу понять, что, оказывается, какая то константа "1 as region", в качестве поля, является колонкой секционирования... Видимо, это нереально сложно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2019, 14:04 |
|
||
|
Как правильно создать секционированное представление?
|
|||
|---|---|---|---|
|
#18+
uaggsterНикакого обходного трюка нет?Вам трюк был показан. Таблица может быть в плане, но в реальности обращений к ней нет. Именно так работает этот "трюк". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2019, 14:24 |
|
||
|
Как правильно создать секционированное представление?
|
|||
|---|---|---|---|
|
#18+
uaggster, Поставьте Вертику и не изобретайте велосипед ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2019, 14:53 |
|
||
|
Как правильно создать секционированное представление?
|
|||
|---|---|---|---|
|
#18+
invmuaggsterНикакого обходного трюка нет?Вам трюк был показан. Таблица может быть в плане, но в реальности обращений к ней нет. Именно так работает этот "трюк". Да, я его обдумываю. Отпугивает изменение синтаксиса запросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2019, 17:03 |
|
||
|
Как правильно создать секционированное представление?
|
|||
|---|---|---|---|
|
#18+
a_voroninuaggster, Поставьте Вертику и не изобретайте велосипед Да с тем же успехом можно создать отдельную базу с таблицами с кластерным колумнстором, и перегружать данные в нее. Ну или вообще как то перегружать данные в специализированное хранилище. Это то как раз не проблема (в смысле не проблема понять, что так можно сделать). Хочется быстро, наивно и прозрачно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2019, 17:08 |
|
||
|
Как правильно создать секционированное представление?
|
|||
|---|---|---|---|
|
#18+
alexeyvguaggsterНикакого обходного трюка нет?Не знаю такого :-( очень уж это сложно, видимо, разложить данные по таблицам по таким критериям в общем виде. Конечно, мы видим глазами, как секционируются данные, но серверу понять, что, оказывается, какая то константа "1 as region", в качестве поля, является колонкой секционирования... Видимо, это нереально сложно. Т.е., играть только по-честному. Добавить колонку регион not null в каждую таблицу, добавить ее же в кластерный индекс (в конец индекса, чтобы не сломала запросы в региональных базах), добавить констрейнты в каждую таблицу Constraint c_region check region = 1 with check, и, потом, по-честному, в view писать where region = 1. ... и при этом, возможно, на не-энтерпрайзе должным образом всё равно не заработает (было там какое-то говно по секционированным представлениям, не помню какое). ЧУдно. :-( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2019, 17:20 |
|
||
|
Как правильно создать секционированное представление?
|
|||
|---|---|---|---|
|
#18+
uaggster, это действительно наивно, т.к. при выведения одной из баз ил итаблиц из доступности всё приложение перестанет работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2019, 18:05 |
|
||
|
Как правильно создать секционированное представление?
|
|||
|---|---|---|---|
|
#18+
uaggstera_voroninuaggster, Поставьте Вертику и не изобретайте велосипед Да с тем же успехом можно создать отдельную базу с таблицами с кластерным колумнстором, и перегружать данные в нее. Ну или вообще как то перегружать данные в специализированное хранилище. Это то как раз не проблема (в смысле не проблема понять, что так можно сделать). Хочется быстро, наивно и прозрачно. Быстро, наивно и прозрачно делается с помощью Вертики или Кликхауса, где все уложено в колумсторы и расшардено по нодам. Из коробки. Вертика до 1Мб бесплатна. Кликхаус бесплатен, но более убог. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2019, 19:51 |
|
||
|
Как правильно создать секционированное представление?
|
|||
|---|---|---|---|
|
#18+
Владислав Колосовuaggster, это действительно наивно, т.к. при выведения одной из баз ил итаблиц из доступности всё приложение перестанет работать. Это снепшоты, и вся эта конструкция - используется для эпизодических отчетов. Так что это не очень существенно. Но да. Это проблема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2019, 09:09 |
|
||
|
Как правильно создать секционированное представление?
|
|||
|---|---|---|---|
|
#18+
uaggster, Достаточно кому-то запросом залочить одну из таблиц в одной из баз. Я бы подумал о сборщике данных, тем более что при добавлении-убавлении новых баз не придется переписывать код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2019, 11:53 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39765897&tid=1688381]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 224ms |
| total: | 347ms |

| 0 / 0 |
