我的任务是在数据库中存储大量 gps 数据和一些额外信息,并访问它以进行报告和其他一些不常见的任务。
当我从 gps 设备收到消息时,它可以有可变数量的字段。例如
消息 1:DeviceId Lat Lon Speed Course DIO1 ADC1
消息 2:DeviceId Lat Course DIO2 IsAlarmOn
消息 3:DeviceId Lat Lon Height Course DIO2 IsAlarmOn 等 最多 20-30 个字段
没有办法统一字段的数量——不同的设备供应商、不同的协议等。另一个令人头疼的问题是数据库的大小和支持尽可能多的数据库供应商的必要性(使用 NHibernate)。
所以我想到了以这种方式存储消息:
Table1 - Tracks
PK - TrackId
TrackStartTime
TrackEndTime
FirstMessageIndex(stores MessageId)
LastMessageIndex(stores MessageId)
DeviceId(not an FK)
表2 - Messages
PK - MessageId
TimeStamp
FirstDataIndex(stores DataId)
LastDataIndex(stores DataId)
表 3 - MessageData
PK - DataId
double Data
short DataType
所有索引都用 hilo 赋值。调整了我的查询,以便 Nhibernate 可以快速处理 3000+k 条消息(也使用了 baching)。我对性能 atm 感到满意。但我不知道它在 50+gb 或 100+gb 大小下如何工作。
将非常感谢有关我的问题和整体存储设计的任何提示和提示=)
谢谢,Alexey
PS。对不起我的英语=)