mysql - 管理频繁更新和查询的表

标签 mysql sql scalability microservices bigdata

到目前为止,我和我的 friend 已经制作了一个小型系统,用于从我们所在地区周围放置的传感器收集天气数据。 这是我们数据库中的一个表:

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 Framework 4.6。
  • 网络 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秒增加一次,可以多次查询) ?
  • 如果有什么方法可以优化我的表格,请告诉我?
  • 我应该将传感器测量收集功能部署为微服务以提高性能和可扩展性吗?

谢谢,

最佳答案

您的问题总体上过于宽泛。然而:

we have 3 153 000 records. That is too many records to store into one table (in my opinion)

你的观点完全错误。存储数百万(或数千万甚至数亿或数十亿行)的数据库表没有问题。您确实需要开始更多地关注数据的结构。

有两种关键技术可以提供帮助:

  • 分区(你可以了解它 here )
  • 索引

更新速率为每秒 10 次更新,插入数据应该没有任何问题。

关于mysql - 管理频繁更新和查询的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44060464/

相关文章:

mysql - 被杀死的进程仍在我的进程列表中

mysql - 创建过程以在 PostgreSQL 中执行查询

mysql - 涉及子查询的查询

java - 资源服务器的 CORS 问题

mysql - 在 Eloquent 中使用 GroupBy 和 Pagination 时出现错误

当我对 PHP 数组进行硬编码时,它与从 mysql 获取它时不一样

sql - 如何编写 SQL Server 存储过程以获得以下输出?

mysql - SQL用于汇总表的数据

scala - 异步 I/O 是否消耗线程?

c# - WCF Restful Web 服务客户端限制