存储传感器测量的数据库方案

时间:2017-06-02 13:10:35

标签: database-design relational-database

我想阅读不同的生物传感器以及平板电脑传感器数据,并将它们存储在SQL数据库中。生物传感器数据例如是皮肤电导,心率,心率变异性等。这些只是数字(带单位)。关于平板电脑传感器数据,我有触摸输入,加速度,前凸轮,手写笔输入等。基本上这些也只是数字,除了手写笔和前凸轮。

关于SQL数据库方案,我想创建一个包含列 timestamp 用户ID 平板电脑ID 传感器的表ID 单位。密钥是(时间戳用户ID 平板电脑ID 传感器ID )因为可以测量不同的传感器同时。我正在使用平板电脑记录所有传感器值(也包括生物传感器数据),因此总是有平板电脑ID。这也意味着数据库保留在平板电脑上。我正在使用Android。

我不知道这些是否合理。也许每个传感器都有一个单独的表是好的。你会如何制定这样一个计划,还是有另一个好的计划提案呢?

其次,我应该如何存储手写笔输入和前凸轮(视频)录像?我想过将视频录制存储在数据库中而不是外部,然后以某种方式从数据库链接到这个外部文件(例如通过文件名)。

将存储大量数据。我将在60分钟内收集传感器数据并且每秒写入几个值(例如,对于生物传感器数据,每1/10秒有一个新值)。因此,数据库变得太大或太慢可能是一个问题。顺便说一下,我只想写入数据库。读取数据库我将在第二步(离线)中完成。

2 个答案:

答案 0 :(得分:1)

我会倾向于每个传感器的单独表格。原因:

  • 您似乎通常不想分析不同传感器的数据,因为它们代表不同的东西。
  • 您无需存储设备或传感器ID。如果您要处理大量传感器读数,则可能会节省大量存储空间 - 尤其是在数据有限的平板电脑环境中存储
  • 如果您尝试以高比率插入来自多个不同传感器的记录,则共享表可能存在锁定问题

我还会创建一个表来捕获与设备交互的一段时间。我们称之为“会话”。

这将为其他表提供密钥,还允许您定义视频和手写笔数据文件与该会话相关联的内容。

所以你会有这样的事情:

session (
    session_id,
    user_id,
    tablet_id,
    video_file,
    stylus_data_file,
    session_start_time,
    session_end_time,
    ... any other session-level data ...
)

然后为每个传感器都有一个表格如下:

heart_rate_readings (
    session_id,
    timestamp,
    value
)

注意:我对手写笔数据知之甚少,无法提供明智的意见。以上假设它将存储在单独的文件中。但如果它只是您正在接收的坐标流,您可以考虑将其存储在数据库中的单独表中。

答案 1 :(得分:1)

一些想法:

我假设每个传感器的数据总是使用相同的单位。也就是说,如果传感器#7今天给出的是欧姆值,那么它明天就不会给出以毫米为单位的值。更合理的是,我想可能会有一些设置让你在英寸和厘米之间切换等。但是如果单位总是相同的,那么不要将单位与值一起存储在同一个表中。有一个单独的"传感器"为该传感器提供单位的表,可能是关于传感器的其他信息,如名称。

每个传感器是否有一个表或每个传感器都有一个单独的表:一个表的最大优点是,如果添加新传感器,则不必更改架构,它只是数据:将记录添加到传感器表中,您就完成了。如果有大量数据,这张表可能会变大。但每个记录都很小:我认为传感器ID和平板电脑ID可以是int。用户ID可能是int或guid。

我从未尝试将视频存储在数据库中。我存储了图像,与其他数据相比,这些图像非常庞大。视频通常至少为兆字节。我的直觉是将它们存储为单个文件并只存储文件名。我很乐意屈服于那些真正尝试将视频放入数据库的人,并且可以说出结果如何。