powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Дилетантский вопрос для повышения самообразованности
11 сообщений из 11, страница 1 из 1
Дилетантский вопрос для повышения самообразованности
    #39926485
Nick-name
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например есть пять приложений, допустим парсеры, или, что-то подобное, то что должно делать много инсертов.
С точки зрения базы как лучше, если они инсертят в одну таблицу или каждый в свою, или для базы это монопенисуально?
...
Рейтинг: 0 / 0
Дилетантский вопрос для повышения самообразованности
    #39926511
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С точки зрения базы лучше, если они будут писать в файлы. А в саму базу вставлять либо последовательно в одну таблицу, либо в разные таблицы пакетно из файла командой mysqlimport/LOAD DATA INFILE.
...
Рейтинг: 0 / 0
Дилетантский вопрос для повышения самообразованности
    #39926538
Nick-name
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как быть с unique индексами в случае с LOAD DATA INFILE, или они учитываются. Просто включать и выключать их помоему не вариант.? Я просто не пользовался никогда таким способом.
...
Рейтинг: 0 / 0
Дилетантский вопрос для повышения самообразованности
    #39926540
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nick-name
А как быть с unique индексами в случае с LOAD DATA INFILE, или они учитываются.
LOAD DATA INFILE работает с ограничениями особым способом - по причине отключения механизма транзакций. Ошибка прерывает процесс, но то, что записано ранее - сохраняется.

Nick-name
С точки зрения базы как лучше, если они инсертят в одну таблицу или каждый в свою, или для базы это монопенисуально?
Серверу конечно, лучше, когда каждый пишет в свою таблицу - но это явный косяк с точки зрения нормализации. Решением проблемы нормализации (ценой производительности, конечно) может быть объявление этих таблиц как RAW DATA - т.е. парсер пишет туда, а затем серверная хранимая процедура перемещает данные в рабочую таблицу, одну на всех.

Nick-name
то что должно делать много инсертов.

Много - это сколько? Опять же - запись не по одной, а чанками по, скажем, десять, сразу уменьшает количество запросов на порядок.
...
Рейтинг: 0 / 0
Дилетантский вопрос для повышения самообразованности
    #39926542
Nick-name
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если честно, у меня такая задумка и была

парсер пишет туда, а затем серверная хранимая процедура перемещает данные в рабочую таблицу, одну на всех.

просто не знал будет ли это быстрее.
...
Рейтинг: 0 / 0
Дилетантский вопрос для повышения самообразованности
    #39926545
Nick-name
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

А как выдумаете, по поводу вот такого алгоритма

1. парсер пишет в фаил.
2. процедура из файла пишет в свою таблицу
3. Другая процедура из специальной таблицы перетаскивает в общую

Как мне видится, таким образом решается вопрос, и уникальности записей в конечной таблице и с сервера нагрузка снимается, так как первая и вторая процедуры имеют зазор во времени.
...
Рейтинг: 0 / 0
Дилетантский вопрос для повышения самообразованности
    #39926708
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-моему, я именно это и предлагал... что же касается начала, уж лучше пусть парсеры пишут прямо в таблицы. Так хотя бы немного снизится максимальная загрузка сервера - работа по пополнению RAW таблиц будет "растянута" по времени. А ещё не получится такой бяки, что парсер пытается писать в файл, который в этот момент пытается читать сервер.

Хотя с другой стороны накладные расходы возрастут... в общем, тестить надо.
...
Рейтинг: 0 / 0
Дилетантский вопрос для повышения самообразованности
    #39927093
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nick-nameНапример есть пять приложений, допустим парсеры, или, что-то подобное, то что должно делать много инсертов.
С точки зрения базы как лучше

сложно представить масштабы....)))
При нынешних процессорах и памяти при инсертах весь тормоз будет в транспортировке данных по железу и записи на диск самих данных и индексов. Так что "БАЗЕ" это конгруэнтно, что 5 приложений что 15. Обычно упирается в диски.
Писать таким приложениям надо на Отдельные физические диски как минимум, плюс SSD . плюс рейд.
Далее если используем InnoDB
стартовать c опцией innodb_file_per_table обязательно, этим избавимся от "общего" индексного файла
Но в настройках MySQL нет опций указать физическое размещение таблиц. Они всегда создаются в каталоге ДатаДир
1. Вариант сим-линками таблицы разносить по дискам. Но это муторно, там еще индексные файлы симлинкать.
2. Проще в Экземпляре MySQL c опцией innodb_file_per_table под каждое приложение создать свою "базу" (это всего лишь каталог в DataDir) и и симлинкать каталог
3. логичный путь если памяти навалом - под каждое приложение - свой инстанс, с указанием разных DataDir на разных дисках.
Обычно люди не занимаются ерундой которую я написал выше, собирают быстрый RAID массив.
Но вариант 2. документирован
...
Рейтинг: 0 / 0
Дилетантский вопрос для повышения самообразованности
    #39927212
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov
Но в настройках MySQL нет опций указать физическое размещение таблиц.
Не так чтобы совсем нет...
https://dev.mysql.com/doc/refman/8.0/en/innodb-create-table-external.html
...
Рейтинг: 0 / 0
Дилетантский вопрос для повышения самообразованности
    #39927223
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

ну тогда вообще проблем никаких.
я много пропустил)
...
Рейтинг: 0 / 0
Дилетантский вопрос для повышения самообразованности
    #39927226
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ооо...
там уже тейбл спейсы можно делать типа
Код: sql
1.
2.
3.
СREATE TABLESPACE `ts1` ADD DATAFILE '/my/tablespace/directory/ts1.ibd';
CREATE TABLE t1 (c1 INT PRIMARY KEY) TABLESPACE ts1;
ALTER TABLE t2 TABLESPACE ts1;


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


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