我应该将复合数据存储在单独的数据库表中还是一个带有类型标志的表中?

时间:2019-03-26 07:50:27

标签: mysql database laravel model-view-controller iot

我有一个数据库(MySQL),用于存储来自IoT设备的传感器数据。数据以JSON格式发送到我的API。 数据包含两种类型的数据: 字符串整数

现在我想存储数据,但是我不知道最好的方法是什么。考虑到性能。该系统将来会变得相当大。数百个设备每10秒发送一次数据。 数据的大部分是整数。字符串数据仅占10%。 我期望数据库中有数百万行。我有一个原型正在运行,它在过去6个月中使用10台设备累积了7000万行数据(现在只有整数)。

我正在扩展系统以存储字符串,因此是我的问题。

现在我可以创建两个表:一个用于整数数据,另一个用于字符串数据,如下所示:

| id | device_id | name | int_value |
| id | device_id | name | string_value |

或者我应该创建一个带有指示数据类型的标志的表:

| id | device_id | name | int_value | string_value | type |

就我的模型而言,最后一个选项更友好。然后我可以做:

$model->data->foobar 

foobar是字符串还是int都没关系。

但是,当想到性能时,这可能是一个糟糕的设计?还是不?

否则,我必须检查要检索的数据类型,然后在右表中查找它:

$model->intdata->foobar
or
$model->stringdata->foobar

您认为最好的方法是什么?在性能和数据存储方面。表格上的额外字符串列是否不浪费空间?

可扩展性如何?我现在有两种类型,但是假设将来我还会得到浮动数据吗?在第一种方法中,我必须创建一个新表。 在第二种方法中,我可以创建一个额外的列和一个新的类型定义。

0 个答案:

没有答案