Я создаю базу данных для хранения большого количества событий. Их будет много, и каждый из них будет связанным временем, точным со вторым. В качестве примера можно привести примерно следующее:Нормализация временных рядов данных
Event
-----
Timestamp
ActionType (FK)
Source (FK)
Target (FK)
Действия, источники и цели все в 6NF. Я бы хотел, чтобы таблица Event
была нормализована, но все подходы, о которых я мог думать, имеют проблемы. Чтобы быть в курсе моих ожиданий относительно данных, подавляющее большинство (99,9%) событий будет уникальным только с четырьмя четырьмя полями (поэтому я могу использовать всю строку как ПК), но некоторые исключения не могут быть проигнорированы ,
Используйте суррогатный ключ: Если я использую четыре-байтовое целое это возможно, но это, кажется, как только накачивание таблицу без причины. Кроме того, я обеспокоен использованием базы данных в течение длительного периода времени и исчерпанием ключевого пространства.
Добавить граф столбец События: Поскольку я ожидаю небольших отсчетов я мог бы использовать меньший тип данные, и это будет иметь меньшее влияние на размере базы данных, но это потребовало бы upserts или объединения данных вне базы данных перед вставкой , Любой из тех, кто хотел бы добавить сложность и влияние на мой выбор программного обеспечения баз данных (я думал идти с Postgres, что делает upserts, но не с удовольствием.)
Перерыв События на небольшие группы: Например, все события в одна и та же секунда может быть частью
Bundle
, которая может иметь суррогатный ключ для группы и другой для каждого события внутри него. Это добавляет еще один уровень абстракции и размера в базу данных. Было бы неплохо, если бы в противном случае повторяющиеся события стали обычным явлением, но в противном случае это кажется излишним.
Хотя все это выполнимо, они кажутся плохими для моих данных. Я думал о том, что просто делал типичную снежинку и не применял ограничение уникальности в главной таблице Event
, но после прочтения ответов PerformanceDBA, таких как this one, я подумал, что, возможно, был лучший способ.
Итак, Какой правильный способ сохранить данные временного ряда с небольшим количеством повторяющихся событий нормализован?
Редактировать: Разъяснение - источники данных - это журналы, в основном плоские файлы, но некоторые в различных базах данных. Одна из целей этой базы данных - объединить их. Ни один из источников не имеет более точное разрешение по времени, чем второе. Данные будут использоваться для таких вопросов, как «Сколько разных источников было выполнено действие по целевому значению по интервалу?» где Интервал не будет меньше часа.
Я устал от политики в SO и ушел. Через 4 года я вернулся. Ответ неверен. Если вам нужен лучший ответ на этот вопрос, прокомментируйте это с моей ручкой. – PerformanceDBA
@PerformanceDBA К сожалению, я пропустил ваш комментарий. Я больше не работаю над системой, описанной в этом вопросе, и похоже, что вы ушли несколько лет назад, но если вы когда-нибудь вернетесь и хотите объяснить правильный способ сделать это, я бы рад его прочесть. – polm23