Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Дилетантский вопрос для повышения самообразованности / 11 сообщений из 11, страница 1 из 1
13.02.2020, 22:56
    #39926485
Nick-name
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дилетантский вопрос для повышения самообразованности
Например есть пять приложений, допустим парсеры, или, что-то подобное, то что должно делать много инсертов.
С точки зрения базы как лучше, если они инсертят в одну таблицу или каждый в свою, или для базы это монопенисуально?
...
Рейтинг: 0 / 0
14.02.2020, 00:40
    #39926511
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дилетантский вопрос для повышения самообразованности
С точки зрения базы лучше, если они будут писать в файлы. А в саму базу вставлять либо последовательно в одну таблицу, либо в разные таблицы пакетно из файла командой mysqlimport/LOAD DATA INFILE.
...
Рейтинг: 0 / 0
14.02.2020, 06:58
    #39926538
Nick-name
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дилетантский вопрос для повышения самообразованности
А как быть с unique индексами в случае с LOAD DATA INFILE, или они учитываются. Просто включать и выключать их помоему не вариант.? Я просто не пользовался никогда таким способом.
...
Рейтинг: 0 / 0
14.02.2020, 07:35
    #39926540
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дилетантский вопрос для повышения самообразованности
Nick-name
А как быть с unique индексами в случае с LOAD DATA INFILE, или они учитываются.
LOAD DATA INFILE работает с ограничениями особым способом - по причине отключения механизма транзакций. Ошибка прерывает процесс, но то, что записано ранее - сохраняется.

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

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

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

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

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

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

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

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

Хотя с другой стороны накладные расходы возрастут... в общем, тестить надо.
...
Рейтинг: 0 / 0
15.02.2020, 23:58
    #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
16.02.2020, 18:50
    #39927212
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дилетантский вопрос для повышения самообразованности
Alex_Ustinov
Но в настройках MySQL нет опций указать физическое размещение таблиц.
Не так чтобы совсем нет...
https://dev.mysql.com/doc/refman/8.0/en/innodb-create-table-external.html
...
Рейтинг: 0 / 0
16.02.2020, 20:25
    #39927223
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дилетантский вопрос для повышения самообразованности
miksoft,

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


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