Мы используем SQL Server 2008 R2 Enterprise Edition.
Мы измеряем метеорологические данные из того, что мы называем MetMasts.В основном это мачта с большим количеством оборудования;анемометры (для определения скорости ветра) в разных положениях на мачте, термометры и давление воздуха.Мы измеряем каждую секунду.
И это занимает слишком много места на диске.Следующее поколение этого оборудования будет генерировать более 10 ГБ в год каждый.И у нас их будет более 1000.
Текущий дизайн таблицы выглядит примерно так:
CREATE TABLE #MetMast (
MetMastID INT NOT NULL IDENTITY(1,1),
MetMastName NVARCHAR(100),
CountryID INT,
InstallDate DATE
)
CREATE TABLE #MetMastData (
MetMastDataID BIGINT NOT NULL IDENTITY(1,1),
MetMastID INT NOT NULL,
MeasuredAt DATETIME2(0) NOT NULL,
Temperature REAL NULL,
WindSpeedAt10m REAL NULL,
WindSpeedAt30m REAL NULL,
AirPressure REAL NULL,
OneHundredMoreColumns VARCHAR(200),
CONSTRAINT PK_MetMastData PRIMARY KEY CLUSTERED
(
MetMastID ASC,
MeasuredAt ASC
))
WITH (DATA_COMPRESSION = ROW)
-- ON a file group, with table partitioning
ALTER TABLE #MetMastData WITH NOCHECK ADD CONSTRAINT FK_MetMast_MetMastID FOREIGN KEY (#MetMast) REFERENCES #MetMast(MetMastID)
Данные записываются один раз, читаются много, много раз.
Мы используем его в нашем хранилище данных, где будет типичный вопрос;Посчитайте, сколько раз разница между WindSpeedAt10m и WindSpeedAt30m составляет 2 м / с, если температура превышает 20 градусов, для MetMast.
SELECT MetMastId, COUNT_BIG(*) FROM #metMastData
WHERE temperature>20 AND ABS(WindSpeedAt10m-WindSpeedAt30m) >2
GROUP BY MetMastID
В будущем возможна небольшая потеря данных.
Мы говорим о сжатии данных с потерями.Я знаю, что нам нужно будет определить приемлемую ошибку для каждого из полей, например, в 1%, если мы измеряем с точностью до 10%.
Он работал для звуковых файлов (MP3 довольно большой), поэтому он может работать для нас какхорошо.
Но как это сделать?
Какой дизайн таблицы мне выбрать?
Как начать работу со сжатием данных с потерями в таблицах базы данных?
С уважением,
Хенрик Стаун Поульсен