【发布时间】:2017-10-19 00:26:14
【问题描述】:
到目前为止,我和我的朋友已经制作了一个小型系统,用于从我们区域周围的传感器收集天气数据。 这是我们数据库中的一张表:
CREATE TABLE `Measurement` (
`Id` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
`SensorId` varchar(16) COLLATE utf8_unicode_ci NOT NULL,
`Time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`Battery` double DEFAULT NULL,
`Rain` double DEFAULT NULL,
`Humidity` double DEFAULT NULL,
PRIMARY KEY (`Id`,`Time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
环境:
- ASP.Net 框架 4.6。
- Web API 2.
- MySQL 社区版。
部署:
- 有一个用于存储用户信息、天气测量和传感器信息的数据库部署在单个服务器上。
- 有一个 WEB API 可以帮助客户端应用连接和获取数据。
我们的情况是:
此表用于存储每 10 秒来自 60 个传感器的气候要素测量值。 目前,我们面临一个数据急剧增加的问题,只需简单计算一下:
1(每 10 秒记录一次)* 6(一小时内记录)* 24(一天几小时)* 365(一年的天数)=52 560(一年的记录)
52 560(每年记录)* 60(传感器)= 3 153 000(记录)
因此,在从 60 个传感器收集数据一年后,我们拥有 3 153 000 条记录。太多的记录无法存储到一张表中(在我看来)。 这就是为什么我正在考虑一个解决方案: - 将传感器的测量数据分成多个数据库并部署到多个服务器上。每个传感器将有一台小型 PC 来存储其信息(通过使用 API) - 当用户想要查询数据库以搜索他们需要的信息时,Web服务器会根据他们提供的传感器信息,调用不同的API端点来获取数据并汇总信息,然后将它们显示到UI。
我的问题是:
- 不包括我们用于部署我们的数据库和微服务的PC成本是否衡量。这种部署是一种有效的做法吗?
- 有没有办法管理这种测量表? (数据每10秒增加一次,可以多次查询)?
- 如果有办法优化我的表,请告诉我?
- 是否应该将传感器测量收集功能部署为微服务以提高性能和可扩展性?
谢谢,
【问题讨论】:
标签: mysql sql scalability microservices bigdata