Всем привет!
Есть следующая задача: организовать хранение SMS сообщений пользователей в таблице БД MySQL. В обозримом будущем предполагаемый объем равен пару тыс. сообщений в день, но эта цифра может увеличиваться (десятки, сотни, млн).
Как посоветуете организовать таблицу? Как индексировать? Не страшно ли переполнение по int(11) ID?
Буду благодарен за советы.
[MySQL] Хранение большого числа записей
Re: [MySQL] Хранение большого числа записей
Ответ: хранить ID в UNSIGNED BIGINT. Всем спасибо за помощь и ответы
-
- Сообщения: 910
- Зарегистрирован: 2019.08.13, 01:49
Re: [MySQL] Хранение большого числа записей
пару тыс. сообщений в день
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 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
Не желайте странного, и не будет у вас головной боли чтобы достичь этого странного.
Тем более что окажется что оно вам и не нужно было, странное это.
Тем более что окажется что оно вам и не нужно было, странное это.
Re: [MySQL] Хранение большого числа записей
Можно подробнее? Организовать хранение ID как varchar(36) и выставить на него INDEX?
Re: [MySQL] Хранение большого числа записей
спасибо за арифметику) пожалуй вы правы, для начала и UNSIGNED INT будет достаточно, скорее я перегнул с BIGINTskynin писал(а): ↑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
Re: [MySQL] Хранение большого числа записей
Код: Выделить всё
yii\db\Schema::getColumnPhpType($column)
if ($column->type === 'bigint') {
return PHP_INT_SIZE === 8 && !$column->unsigned ? 'integer' : 'string';
Не желайте странного, и не будет у вас головной боли чтобы достичь этого странного.
Тем более что окажется что оно вам и не нужно было, странное это.
Тем более что окажется что оно вам и не нужно было, странное это.