[MySQL] Хранение большого числа записей

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
pioneer
Сообщения: 136
Зарегистрирован: 2013.03.10, 23:27

[MySQL] Хранение большого числа записей

Сообщение pioneer »

Всем привет!
Есть следующая задача: организовать хранение SMS сообщений пользователей в таблице БД MySQL. В обозримом будущем предполагаемый объем равен пару тыс. сообщений в день, но эта цифра может увеличиваться (десятки, сотни, млн).
Как посоветуете организовать таблицу? Как индексировать? Не страшно ли переполнение по int(11) ID?
Буду благодарен за советы.
pioneer
Сообщения: 136
Зарегистрирован: 2013.03.10, 23:27

Re: [MySQL] Хранение большого числа записей

Сообщение pioneer »

Ответ: хранить ID в UNSIGNED BIGINT. Всем спасибо за помощь и ответы :-D
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: [MySQL] Хранение большого числа записей

Сообщение yiiliveext »

pioneer писал(а): 2020.02.12, 13:57 Ответ: хранить ID в UNSIGNED BIGINT. Всем спасибо за помощь и ответы :-D
UUID тоже подойдет.
skynin
Сообщения: 400
Зарегистрирован: 2017.12.12, 10:09

Re: [MySQL] Хранение большого числа записей

Сообщение skynin »

пару тыс. сообщений в день
Unsigned INT 4294967295
(4294967295 / 1000) / 365 = 11767 лет
1 млн каждый день - 11 лет
Не страшно ли переполнение по int(11) ID?

UNSIGNED BIGINT - будет обрабатываться как строка (в php нет безнакового типа для 64 битного int )
поэтому лучше Signed BIGINT если 11 лет - это мало.

(2^63-1) / 1 млн каждый день / 365 = 25269512430 лет

https://dev.mysql.com/doc/refman/8.0/en ... types.html
Не желайте странного, и не будет у вас головной боли чтобы достичь этого странного.
Тем более что окажется что оно вам и не нужно было, странное это.
pioneer
Сообщения: 136
Зарегистрирован: 2013.03.10, 23:27

Re: [MySQL] Хранение большого числа записей

Сообщение pioneer »

yiiliveext писал(а): 2020.02.12, 21:11
pioneer писал(а): 2020.02.12, 13:57 Ответ: хранить ID в UNSIGNED BIGINT. Всем спасибо за помощь и ответы :-D
UUID тоже подойдет.
Можно подробнее? Организовать хранение ID как varchar(36) и выставить на него INDEX?
pioneer
Сообщения: 136
Зарегистрирован: 2013.03.10, 23:27

Re: [MySQL] Хранение большого числа записей

Сообщение pioneer »

skynin писал(а): 2020.02.13, 09:42 пару тыс. сообщений в день
Unsigned INT 4294967295
(4294967295 / 1000) / 365 = 11767 лет
1 млн каждый день - 11 лет
Не страшно ли переполнение по int(11) ID?

UNSIGNED BIGINT - будет обрабатываться как строка (в php нет безнакового типа для 64 битного int )
поэтому лучше Signed BIGINT если 11 лет - это мало.

(2^63-1) / 1 млн каждый день / 365 = 25269512430 лет

https://dev.mysql.com/doc/refman/8.0/en ... types.html
спасибо за арифметику) пожалуй вы правы, для начала и UNSIGNED INT будет достаточно, скорее я перегнул с BIGINT :D
skynin
Сообщения: 400
Зарегистрирован: 2017.12.12, 10:09

Re: [MySQL] Хранение большого числа записей

Сообщение skynin »

pioneer писал(а): 2020.02.13, 16:25 Можно подробнее? Организовать хранение ID как varchar(36) и выставить на него INDEX?

Код: Выделить всё

yii\db\Schema::getColumnPhpType($column)

if ($column->type === 'bigint') {
                return PHP_INT_SIZE === 8 && !$column->unsigned ? 'integer' : 'string';
Не желайте странного, и не будет у вас головной боли чтобы достичь этого странного.
Тем более что окажется что оно вам и не нужно было, странное это.
Ответить