存储传感器数据以便快速读取的最佳方法

时间:2017-06-29 19:27:34

标签: database database-design relational-database amazon-dynamodb

我正在研究一个项目,我需要每天从传感器存储数百个读数(1 / min)。我想要推入数据库的读数将包含一些整数,传感器序列号,时间戳和uid。问题是我需要能够快速阅读这些内容。

我需要能够绘制过去的n个读数(最新的500或1000个读数)并按传感器序列号对其进行排序。如果我每分钟有1000个传感器发送数据,那么每天就有144万条记录,而且几年之后,它将开始成为数十亿条记录。

存储此数据的最佳方法是什么,以便我可以快速访问数据,但仍会存储大量数据?

如果我的工程师希望从传感器或几个传感器中查看过去一年的数据,那就是525,600行数据。我能以多快的速度处理它?毫秒?小时?天?

我需要保留数据的原因是因为我需要能够在其上运行方程来预测未来的传感器数据。也可能在机器上学习。将这些数据在一两年后离线存储以节省空间或对k / v数据库无关紧要是否有益?

起初我在考虑RDB,但由于我们想要增长因素,k / v / noSQL数据库似乎就是这样做的。我计划使用amazon DynamoDB来托管这个,并使用webapp来查看数据。

什么被认为是一个大数据库?成千上万,数百万,数十亿?哪个地方太大而无法处理呢?

我知道有很多模糊的问题。任何答案和建议将不胜感激。

4 个答案:

答案 0 :(得分:1)

您似乎可能想要同时考虑使用多种解决方案。如果我理解正确,您希望能够定期检索最新的n个条目,但有时您希望大规模地运行分析。例如,为什么不在DynamoDB中存储您的数据的最新N天(可以使用TTL功能实现)以进行快速查询,并将所有数据移动到比Redshift甚至S3等更便宜的商店更旧的数据?然后,您可以使用Redshift Spectrum,Athena,Quicksight,EMR等解决方案按需对这些数据进行分析。如果您需要有关此方法的更多详细信息,请告诉我。

答案 1 :(得分:0)

我们有类似的情况,但数据收集每秒10次,数千台设备。我们选择了MongoDB,它的工作,但我们也想考虑RavenDB,但尚未进行任何测试。

答案 2 :(得分:0)

首先回答你的上一个问题。我定义大数据的方式是任何不适合单个服务器的东西。

在架构方面,您应该在分布式队列中使用瞬态存储,例如Kafka,你可以持续数月或数年的数据。这将允许您处理下游处理的大数据量,弹性和背压。它还允许您重放假设场景和建模等数据。从Kafka,您可以使用Spark / Flink / Kafka Streaming等流媒体转换数据并将其加载到服务层,例如:用于BI的Redshift或用于密钥查找的NoSQL数据库。从临时存储中,您可以暂时将数据加载到持久存储中,例如, S3或HDFS甚至是传统的RDBMS。我的博文中有architecture diagram

答案 3 :(得分:-1)

这实际上取决于您需要哪种类型的数据延迟和查询延迟。

使用Kafka或Kinesis传输传感器数据。由于传感器数据通常是JSON,因此您需要首先使用Spark将此数据进行ETL,以便您可以运行关系SQL查询。此数据转换会引入某些数据延迟。接下来,将其加载到Redshift中以进行复杂的查询和BI。使用Redshift时,查询等待时间不足以支持实时应用程序。如果您需要对实时应用程序进行更快的查询,则可以将其加载到Postgres数据库中。

另一种选择是跳过ETL,并将其直接加载到搜索和分析引擎(如ElasticSearch或Rockset)中。这里提供有关搜索和分析引擎方法的分步指南:https://rockset.com/blog/real-time-analytics-using-sql-on-streaming-data-kafka-rockset/

披露:我在Rockset工作