我目前的任务是设计一个应用程序来跟踪办公室周围的几种不同测量值,例如。温度、光线、人的存在等。以前从未真正从事过数据分析,我想要一些关于如何存储这些数据(使用哪种数据库设计)的指导。
我们目前正在研究的是大约 50 个传感器,它们仅在感兴趣的事件发生时才发送数据:如果温度变化 0.5 度,或者灯打开/关闭,或者房间被占用/空置。因此,数据只会每隔几秒更新一次。另外,将来我想分析一些数据。因此,数据必须在数据库中持久存在。你会建议什么样的技术来完成这项任务?
我目前的任务是设计一个应用程序来跟踪办公室周围的几种不同测量值,例如。温度、光线、人的存在等。以前从未真正从事过数据分析,我想要一些关于如何存储这些数据(使用哪种数据库设计)的指导。
我们目前正在研究的是大约 50 个传感器,它们仅在感兴趣的事件发生时才发送数据:如果温度变化 0.5 度,或者灯打开/关闭,或者房间被占用/空置。因此,数据只会每隔几秒更新一次。另外,将来我想分析一些数据。因此,数据必须在数据库中持久存在。你会建议什么样的技术来完成这项任务?
我在大学里一直在做类似的项目。我有教室,我应该收集温度、湿度、光线、占用率等数据。假设你已经使用过传感器和微尘,我将解释其余的结构。
您需要传感器网络设置,就像您说的那样,您已经完成了。这些传感器网络通常不会直接通过 Internet 发送数据,因此您需要一个可以从传感器收集数据并通过 Internet 将其发送到本地服务器的网关。
在服务器端,你需要 REST API,你可以使用任何语言来开发它,我使用 PHP。我发现使用 PHP 非常容易使用和开发。此 REST API 应从网关接收数据并将其存储到数据库中。我使用 mysql 数据库,因为数据量对我们来说不是那么大。但是如果你的数据足够大,你可以使用像mongoDB这样的大数据Nosql工具。无论您使用哪种类型的数据库,结构都保持不变。
要将数据从网关发送到服务器,您可以使用 HTTP 或 MQTT 等协议,无论您感觉如何。我所做的是我有 WSN 控制器,它通过 USB 将数据发送到网关,然后网关通过以太网将数据发送到服务器。所以我不得不开发USB转以太网网关。如果您可以从控制器中取出两个 UART 终端,您可以使用任何微控制器构建 UART 到以太网网关,甚至 Arduino 以太网屏蔽也可以在这种情况下工作。
在我的情况下,数据是定期感应的,但正如您所说,当感兴趣的事件发生时您正在感应数据,那么您可以对定期收集的数据使用泊松分布方法来预测每天的平均事件数,然后您可以决定您的数据是否是大与否。
存储技术的最佳选择很大程度上取决于您希望在项目的整个生命周期内积累多少数据(以字节计),所以我要做的第一件事就是尝试获取一些样本数据,或者做出一些有根据的猜测(例如,1 次温度记录占用多少字节 X 我预计每天有多少变化事件 X 多少温度传感器 X 您想要随时间存储和分析多少天的数据)。
一旦您大致了解需要存储和分析多少数据,您就可以使用它来开始缩小选择范围。没有正确的答案,其他人可能不同意,但我建议如果您处理的数据少于 TB,则不需要 hadoop(我注意到这是您问题中的一个标签) - hadoop 并不是真正的数据存储解决方案(尽管它有自己的文件系统,称为 HDFS 或只是 DFS),它更多的是用于处理和转换大量数据的框架。此外,如果您没有每秒记录数千个事件,您可能也不需要 NoSQL 解决方案。
对于结构化数据的存储,鉴于您以前从未真正进行过数据分析,如果您的容量为 GB 或更少,SQL 数据库可能是您的最佳选择,而且 SQL 将更容易学习,更有用 - 它已经成熟,已经存在年龄并且仍然是大多数行业的首选标准,因此有大量的学习资源。也许可以尝试 MySQL Community Edition 服务器(免费,开源)作为开始,我还推荐 MySQL Workbench 来帮助您入门(一堆 GUI 工具,您可以在学习时用来弄乱 SQL)
PS我对从传感器捕获信号一无所知,所以也许有更合适的技术我不知道!
与@James Allen 的建议相呼应,了解任何时间点的数据总量很重要。它会告诉你需要多少磁盘。同样重要的是接收新数据和删除旧数据的速率,因为这将受到硬件 IOPS 的限制
从您的用例来看,任何流行的商用硬件 DBMS 都应该足够了。像 PostgreSQL 这样的东西可以在普通的四核服务器上以每秒数百个事务处理 TB 的数据。
查看R 编程语言进行分析。SQL 非常适合读取和写入,但相比之下直方图或线性回归非常棘手。