Таблица с JSON полем или несколько таблиц под каждый тип данных, какой вариант проектрирования выбрать?
Коллеги, приветствую. Имеется анкета абитуриента поступающего на обучение, в которую вносятся приличное количество данных(порядка 100-120 полей в базе), и возник вопрос как это все дело лучше сделать, чтобы иметь возможность производить поиск по данным и не слишком сильно нагружать базу огромным их количеством.
Если делать в варианте один параметр одна строка в соответствующей таблице, то в ряде таблиц на время приема может быть до 20-30 млн записей. Если же все это делать в варианте json поля, то возникает вопрос скорости, и маскимального количества полей которые могут поместиться в это самое поле. Ибо может в любой момент возникнуть необходимость добавить еще какие то поля, по требованию законодательства или администрации.
Кто проектировал базы с динамическим количеством полей разных типов, как вы решали данную задачу? Ну и конечно если есть хорошие статьи на эту тему, буду рад почитать.
Константин Толмачев, ну откуда ж я знаю, как у вас получится, не зная, что вы там хотите сделать? Могу только сказать, что JSONB + индексы это вполне шустро. Пробуйте, тестируйте.
JhaoDa, Константин Толмачев
во первых https://dev.mysql.com/doc/refman/8.0/en/json.html , в мускуле все давно есть, не надо всем тыкать постгрес при рабочем мускуле
во вторых - связка группы таблиц будет сравнима/быстрее по скорости выборки + иметь более четкую и наглядную структуру.
И в целом - JSON хранение в базе подразумевает хранение рандомного количества рандомных нестрого связанных данных, тут же задача стоит немного иная - хранение хоть и большого, но четко стандартизированного количества значений со связями через отношения.
ThunderCat, я и не утверждаю, что всё надо переделать на JSON/PostgreSQL. Вопрос задан, я ответил — да, можно юзать; да, скорость вполне приличная, но это дело субъективное.
в мускуле все давно есть
что «всё»? Есть индексы без генерируемых значений?
Константин Толмачев, ну конечно же он будет быстрее, что за странный вопрос? Но вы, мне кажется, возводите скорость в какой-то абсолют. Скорость работы сервиса можно менять на скорость его разработки, равно как и наоборот.
Вот выборка за 0,05 секунды это быстро? А 0,08? А если 0,2 секунды, при том, что весь ответ сервера генерируется 2 секунды?
EXPLAIN в руки и сравниваем реальные результаты.
Вопрос в том, что полей сейчас 120, далее может быть больше, и нужно, чтобы поля добавились, динамически, т.е. без редактирования структуры базы данных, и без участия разработчика. Т.е. нужно поле, в админке добавили и забыли о проблеме. Так что вариант "Есть форма на 120 полей - сделайте 120 полей в таблице." не возможен в данном конкретном случае.