Советы по проектированию для большой таблицы базы данных - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть огромная таблица базы данных (миллионы записей).В настоящее время наше приложение базируется только в Канаде, но теперь мы входим в другие страны, поэтому будут добавлены миллионы данных по каждой стране.Должен ли я создать отдельные таблицы для каждой страны или сохранить одну огромную таблицу?Я использую Cakephp 2.x, MySQL 5.6 В этой таблице будет много операций чтения и записи.Проблема с отдельной таблицей заключается в том, что, поскольку я использую модели (MVC) для операций с базами данных, мне придется создавать отдельные модели для каждой страны, и объединение их для целей отчетов будет беспорядочным.С другой стороны, хранение всего в одной таблице будет очень тяжелым для системы.Поможет ли индексация в этом случае?

1 Ответ

0 голосов
/ 06 февраля 2019

Общий вопрос;общий ответ: не создайте множество «идентичных» таблиц.

Не используйте PARTITION, за исключением очень небольшого количества запросов.Наиболее распространенной является скользящая шкала времени, где «старые» строки необходимо периодически удалять (через DROP PARTITION).PARTITIONing редко помогает SELECT производительности.

(миллиард строк "огромен"; миллионы вполне жизнеспособны.)

Индексирование обязательно для любого нетривиальная таблица базы данных!

Использование country_code CHAR(2) CHARACTER SET ascii.Это 2 байта (почти столько же, сколько 1 байт TINYINT, и гораздо более дружественный к человеку. Конечно, это 1 МБ на миллион строк; но посмотрите на это иначе - это примерно 1% от размератаблица, которая, возможно, занимает ~ 100 байт / строку.

Что касается "проиндексированного права" - вы должны начать с SELECTs, чтобы выяснить, какие индексы необходимы.

Вы упомянули «отчеты». Это может привести к необходимости создания и ведения сводных таблиц. (Опять же, давайте посмотрим SELECTs.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...