Как ускорить вставку в большое вертикальное хранилище с индексами01.08.2024, 09:26. Показов 1122. Ответов 23
Приветствую!
Есть огромная таблица: (2 млрд и растёт пакетами по 1-100 млн в день) записей, 6 (Int/BigInt/DateTime) полей, 3 индекса + Primary Key по 1му полю BigInt. Вставка происходит очень долго (наверное, из-за перестройки индексов). Можно ли как-то ускорить этот процесс? Например, "перенеся" перестройку индексов на другое время (не на момент после вставки). Или только разделять таблицу на несколько?…
0
|
|
| 01.08.2024, 09:26 | |
|
Ответы с готовыми решениями:
23
Вертикальное хранилище. Опыт и ссылки Ускорить вставку данных в excel пишу программу на С++, и делаю в ней ассемблеровскую вставку. Возможно ли в этой _asm вставке сделать С++ вставку? |
|
1304 / 358 / 97
Регистрация: 14.10.2022
Сообщений: 1,087
|
|
| 01.08.2024, 09:51 | |
|
1. Разделите таблицу на секции.
2. Заливайте данные в отдельную таблицу, по структуре соответствующей секции. 3. Для ускорения вставки - эта отдельная таблица может не содержать индексов вообще (куча). Индексы можно построить потом. 4. Делайте switch partition - эту заполненную таблицу в пустую секцию основной таблицы.
1
|
|
|
139 / 105 / 36
Регистрация: 27.07.2022
Сообщений: 357
|
|
| 01.08.2024, 09:51 | |
|
Планы бы реальные посмотреть. И зачем на ней индексы перестраивать?
0
|
|
| 01.08.2024, 09:56 [ТС] | ||||
|
Блоки данных различаются только Int-числом в одном из полей — параметр/уровень/критерий строки.
0
|
||||
|
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
|
|
| 01.08.2024, 10:02 | |
|
0
|
|
| 01.08.2024, 10:05 [ТС] | |
|
invm, приходит документ в XML. Документ разбирается в плоскую таблицу. Таблица насыщается параметрами из других таблиц. Плоская таблица конвертируется в вертикальную структуру. Происходит вставка новых данных в вертикальное хранилище.
0
|
|
|
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
|
|
| 01.08.2024, 10:05 | |
|
Секционирование сломает PK и запросы на основе PK
1
|
|
| 01.08.2024, 10:06 [ТС] | |
|
0
|
|
|
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
|
|
| 01.08.2024, 10:06 | |
|
1
|
|
|
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
|
|||
| 01.08.2024, 10:15 | |||
|
Добавлено через 2 минуты
1
|
|||
| 01.08.2024, 10:16 [ТС] | |||
|
0
|
|||
|
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
|
|||
| 01.08.2024, 10:31 | |||
Сообщение было отмечено Jack Famous как решение
Решение
1
|
|||
| 01.08.2024, 10:38 [ТС] | |||
![]() Вообще, насколько работа с N таблицами — для каждого из N уровней/параметров/типов данных строк предпочтительнее работы с одной огромной (по количеству строк) таблицей, в которой на одно поле больше (N номер уровня), чем в этих N новых отдельных таблицах? Каждая из таблиц в несколько раз меньше единой структуры. Для 1го уровня данных вообще всего около 10 тыс строк. Таблицы однообразны, с 2-3мя индексами помимо PK. Соединения между ними осуществляются преимущественно по связке "MasterPK—SlaveParentID". Вроде, скорость очень неплохая получается и табличные функции очень хорошо работают. Вставка происходит намного быстрее, чем в одно большое хранилище. Что думаете?
0
|
|||
|
1304 / 358 / 97
Регистрация: 14.10.2022
Сообщений: 1,087
|
||
| 01.08.2024, 13:23 | ||
|
Если вы строите DWH - то лучше построить ее в виде звездочки/снежинки. https://www.guru99.com/ru/star... using.html https://habr.com/ru/articles/441538/
1
|
||
| 01.08.2024, 14:56 [ТС] | |
|
uaggster, спасибо! Сейчас поизучаю …
UPD. Описание текущей структуры
Схема у нас вырисовается похожая на снежинку, но ещё более атомарная — как видно из примера, на каждый признак создаётся отдельная таблица, связанная напрямую только только с одной другой таблицей из структуры (кроме 1го корневого узла, который ни с кем не связан). На самом деле, может быть связана с 2мя, т.к. в поле Val часто хранится ID текста из таблицы текстов (общей для всех других таблиц этой структуры). Также, там (в поле Val) может хранится ссылка на ещё какую-либо таблицу вместо таблицы текстов или реального значения (если оно может быть представлено в виде BigInt).
Нельзя сказать, что мы строим DWH — я почитал про это и у нас совсем не то. В 1ю очередь, нет никакого "хранилища, отличающегося от БД" — все данные хранятся в БД. Есть несколько серверов из которых поступает информация. Эта информация ETL'ится в общую/основную БД на одном из серверов и потом частично распределяется обратно по серверам — в соответствии с потребностями. Типа актуализируется. Мой вопрос связан как раз с организацией этого основного хранилища. Данных много и прирастают быстро. Основная операция — Insert. Реже — Update и ещё реже — Delete. По совету от invm обращу внимание, чтобы эти операции проводились внутри транзакции. Плюсом одной (не считая вспомогательной таблицы текстов и ей подобных — они остались) огромной таблицы было то, что она одна (легко контролировать и распределять данные по серверам, где также будет только одна такая таблица) и то, что её структура позволяла создавать практически неограниченное количество уровне вложенности без изменения структуры таблицы. Самосоединения (как основной метод получения данных из неё) выполнялись достаточно быстро. Основным минусом было время Insert/Update/Delete. На новой структуре всё стало заметно быстрее. В том числе, соединения. Индексы на каждой таблицы стали сильно меньше и даже меньше в сумме по всем таблицам. Стало возможным изменить тип поля Val с BigInt на Bit/TinyInt/SmallInt/Int/DateTime/Float/Decimal — в зависимости от данных каждой таблицы. PK во многих таблицах также заменили с BigInt на Int. Но, конечно, контролировать (и актуализировать на других серверах) этот пакет таблиц стало сильно сложнее. Ну ничего
Если будут идеи/замечания/предложения — буду рад обсудить.
0
|
|
|
1304 / 358 / 97
Регистрация: 14.10.2022
Сообщений: 1,087
|
|
| 01.08.2024, 15:00 | |
|
0
|
|
| 01.08.2024, 15:07 [ТС] | ||
|
0
|
||
|
1304 / 358 / 97
Регистрация: 14.10.2022
Сообщений: 1,087
|
|
| 01.08.2024, 15:25 | |
|
Гм... А у меня вопрос тогда.
А каково основное назначение БД? Если, например, это какая-то аналитическая БД, основное назначение которой - быстро (ну, + -, иногда неделя - это тоже быстро) считать некие отчеты - то вы, на мой взгляд, совершенно зря отошли от денормализованной структуры. На больших диапазонах - соединения вообще, в принципе, плохо работают. Если у вас слева миллиард записей, справа - десяток миллионов, то, как ты не старайся - быстро их не соединишь. Тут простая то фильтрация по каким-то индексированным полям и то со скрипом работает. Вы так для чего сделали? (без подвоха вопрос).
0
|
|
| 01.08.2024, 16:54 [ТС] | |||||
|
0
|
|||||
| 01.08.2024, 16:54 | |
|
Помогаю со студенческими работами здесь
20
Выведите на экран все числа с четными индексами и отдельно с нечетными индексами
Посчитать отношение суммы модулей элементов с нечетными индексами к произведению с четными индексами
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|