【发布时间】:2018-10-21 22:10:39
【问题描述】:
我正在构建一个每秒将产生 200Kb 数据的 IoT 设备,我需要将这些数据保存到存储中。我目前有大约 500 台设备,我想弄清楚存储数据的最佳方式是什么?以及为此目的的最佳数据库?过去我将数据存储到 GCP 的 BigQuery 并使用计算引擎实例组进行处理,但数据的大小要小得多。
【问题讨论】:
标签: database google-cloud-platform bigdata iot
我正在构建一个每秒将产生 200Kb 数据的 IoT 设备,我需要将这些数据保存到存储中。我目前有大约 500 台设备,我想弄清楚存储数据的最佳方式是什么?以及为此目的的最佳数据库?过去我将数据存储到 GCP 的 BigQuery 并使用计算引擎实例组进行处理,但数据的大小要小得多。
【问题讨论】:
标签: database google-cloud-platform bigdata iot
根据您问题中的有限信息,这是我的最佳答案。
第一步是记录/描述您正在处理的数据类型。它是结构化数据 (SQL) 还是非结构化数据 (NoSQL)?您需要进行什么类型的查询?您需要存储数据多长时间以及预期的总数据大小是多少。这将决定执行查询处理和分析的后端的选择。
接下来,您需要查看正在传输的数据速率。在 200 Kbits(或者是 200 KBytes)乘以 500 个设备时,这是每秒 100 Mbits(或 800 Mbits)。数据的价值有多大,您的设计对数据丢失的容忍度如何?每个设备(蜂窝、无线等)的数据传输速率和连接可靠性是多少?
要将数据推送到云端,我会使用 Pub/Sub。然后处理数据以合并、合并、压缩、清除等,并推送到 Google Cloud Storage 或 BigQuery(但其他选项可能更好,例如 Cloud SQL 或 Cloud Datastore / BigTable)。中间处理器的答案取决于前面的问题,但您需要一些马力来处理该速率的数据流。选项可能是运行 Spark 的 Google Cloud Dataproc 或 Google Cloud Dataflow。
这种类型的设计有很多需要考虑的地方。我的回答引发了一堆问题,希望这能帮助您构建一个合适的解决方案。
【讨论】:
您还可以将 IoT Core 视为处理负载平衡部分的一种可能方式(它会自动扩展)。注册所有设备会产生一些前期开销,但它也会处理安全连接(TLS 堆栈 + JWT 加密,以确保使用 IoT Core 的设备的安全性)。
对于 500 台设备和 200KB/s,这听起来在系统的处理能力范围内。 Pub/Sub 是限制器,它每秒处理 1-2M 条消息,所以应该没问题。
【讨论】: