2014-01-29 2 views
1

Я новичок в разработке баз данных, исследуя способы реализации данных временных рядов. В принципе, я хочу создать базу данных, в которой хранятся показатели батареи, то есть ток, напряжение и время для пользователей. Чем больше я об этом думаю, тем больше я запутаюсь. Пожалуйста, помогите мне указать направление. До сих пор я придумал следующий псевдо-код:дизайн базы данных временных рядов

Table: User 
    Column 1: UserID(Primary Key) 
    Column 2: UserName 

    Table: Battery 
    Column 1: BatteryID (Primary Key) 
    Column 2: ManufactureSerial 
    Column 3: ManufactureDate 
    Column 4: UserID (Foreign Key) 

    Table: BatteryLog 
    Column 1: Voltage 
    Column 2: Current 
    Column 3: SOC 
    Column 4: DateTime 
    Column 5: BatteryID (Foreign Key) 

Теперь мой вопрос: что должно быть первичным ключом для BatteryLog таблицы? Баттерилог может содержать миллионы строк серии времени в указанное время внутри. Теперь я использую реляционную базу данных SqlServer. Есть ли для этого оптимизационный проект?

Благодарим вас за помощь в моих исследованиях!

ответ

1

Вы можете создать autoincremental первичный ключ для таблицы BatteryLog:

[BatteryLogID] [int] IDENTITY(1,1) NOT NULL 

Это будет служить цели уникального идентификатора для каждой записи.

В качестве альтернативы, вы можете создать составной первичный ключ на BatteryID и [DateTime], если они также являются уникальными для каждой записи (что обычно для временных рядов)

+1

Мне нравится подход композитного первичного ключа, поскольку он включает такие запросы, как: выбирать строки между определенным диапазоном времени с определенным идентификатором батареи. Спасибо. – user2952473

0

Почему бы не использовать вне-полку TIME- которые разработаны и оптимизированы для эффективного хранения и анализа временных наблюдений.

Список баз данных для стартеров: https://en.wikipedia.org/wiki/Time_series_database

0

Единственная оптимизация, которую я могу предложить для реляционных баз данных заключается в следующем:

Table: BatteryLog 
Column 1: SOC 
Column 2: DateTime 
Column 3: BatteryID (Foreign Key) 
Column 4: Voltage00 
Column 5: Current00 
Column 6: Voltage01 
Column 7: Current01 
... 
Column 124: Voltage59 
Column 125: Current59 

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

Базы данных реального времени легче справляются, а также имеют лучшие характеристики производительности.

Смежные вопросы