Регистрация данных с Oracle (или любой СУБД) - PullRequest
0 голосов
/ 20 мая 2009

Каков «лучший» (правильный, стандартный и т. Д.) Способ ведения журнала данных, полученных с установленной скоростью (каждую минуту, каждые 5 секунд, каждые 10 мс и т. Д.) В базе данных Oracle?

Кажется неэффективным хранить 7-байтовое значение DATE для каждого элемента данных (особенно при увеличении частоты). Однако упаковка данных в некоторый необработанный формат усложняет статистику и другие вычисления данных.

Полагаю, этот вопрос достаточно общий, чтобы его можно было применить к любой СУБД, но в этом случае я использую Oracle.

Ответы [ 2 ]

2 голосов
/ 20 мая 2009

Сколько стоит терабайт диска и стоит ли сжатие этих 7 байтов действительно усилий? Если вы хотите рассчитывать статистику и отчеты по журналам на основе времени, будет очень больно некомпактировать дату для использования в запросах SQL.

С Oracle просто регистрируйте данные в таблице - старайтесь не регистрировать слишком много или слишком много индексов в таблице журнала. Убедитесь, что ваша таблица журналов разделена от дня 1 до управляемых размеров - это может быть разделение на день, неделю или месяц в зависимости от того, сколько данных вы генерируете. Разработайте свою политику ведения домашнего хозяйства с первого дня.

Когда вы добавляете новый раздел в конце своего «периода», когда данные начинают поступать в новый раздел, вы можете рассмотреть возможность использования «alter partition move compress» для сжатия данных, чтобы сохранить их в сети в меньшем пространстве.

Есть много вариантов, вам просто нужно продумать требования, которые вы должны попробовать, и найти лучшее решение. В зависимости от того, что вы делаете, регистрация в файл также может быть вариантом, но остерегайтесь тысяч и тысяч файлов в одном каталоге, что также может вызвать проблемы.

0 голосов
/ 20 мая 2009

Поскольку каждая строка собираемых данных должна стоять отдельно, вам необходимо использовать пространство для записи полного значения DATE - если только вы не решите использовать что-то вроде метки времени Unix (целые секунды с 1970-01-01 00: 00: 00Z, или какая-либо другая подходящие эпохи или точка отсчета). Это вписывается в 4 байта, чтобы дать 68-летний период по обе стороны эпохи (предполагая, что 32-разрядные целые числа со знаком). Это может быть не так удобно, но относительно компактно.

...