Является ли использование уникальной даты и времени для записей базы данных плохой идеей? - PullRequest
1 голос
/ 05 апреля 2011

Я довольно новичок в мире SQL и создаю базу данных, которая будет записывать данные в режиме реального времени с частотой до 32 Гц.Кажется логичным использовать временную метку как часть первичного ключа или, по крайней мере, сделать ее уникальной (и, возможно, составной с другой информацией).Мой вопрос касается производительности по мере увеличения размера таблицы.Наивно, я думаю, что если база данных должна проверять, что метка времени уникальна каждый раз, когда я вставляю запись, через некоторое время все станет очень медленно.Но опять же, вероятно, это то, что оптимизаторы баз данных решили несколько лет назад, и совершенно эффективно определить метку времени как уникальную для крупномасштабных баз данных.

Примечание. Я использую MySQL и метку времени для своей базы данных.Кроме того, мне на самом деле не нужна метка времени, чтобы быть уникальной, я просто чувствую себя лучше, зная, что схема как можно более точно определена.

Ответы [ 4 ]

2 голосов
/ 05 апреля 2011

«Мне на самом деле не нужна метка времени, чтобы быть уникальной».Затем я предлагаю вам разобраться в реальных бизнес-требованиях и определить соответствующие ключи.Надежная структура базы данных - это модель, которая точно моделирует бизнес-домен, реализует правила этого домена и отвечает другим требованиям пользователей.Нет единого ответа на ваш вопрос для всех возможных требований.

0 голосов
/ 05 апреля 2011

Типы даты / времени MySql не могут хранить доли секунды.Вам нужно будет сохранить дробь в дополнительном столбце рядом со столбцом даты и времени.Фракция должна быть предоставлена ​​приложением.

Создание уникальной временной метки в очень большой таблице, несомненно, замедлит вставку.Если это захват в реальном времени, то он может сделать его нежизнеспособным на частоте 32 Гц.

0 голосов
/ 05 апреля 2011

Все зависит от того, сколько записей вы планируете хранить? Час, день ...? Хотя лучшим (более быстрым, но занимающим больше места) решением было бы использование автоинкрементации первичного ключа и сохранение метки времени для вашей справки, но если ваши данные последовательны (и я предполагаю, что это так), даже метка времени не является необходимой, автоинкрементная поле будет вашим знаменателем последовательности.

0 голосов
/ 05 апреля 2011

Я считаю хорошей идеей, чтобы первичный ключ представлял собой поле auto_increment и ничего больше.Таким образом, вы знаете, что у вас есть первичный ключ, который легко обрабатывается любым, что вы хотите использовать для чтения этих данных.

Тогда может быть очень хорошей идеей иметь временную метку, особенно еслине 100% регулярно в 32 Гц.Как вы узнаете, когда были добавлены данные?

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