0

我最近在 Fitbit 上开发一个应用程序。我正在考虑使用 MongoDB 或 HBase,因为它支持聚合并支持以键值格式处理数据。示例数据集:

{
    "activities-heart": [
        {
            "customHeartRateZones": [],
            "dateTime": "today",
            "heartRateZones": [
                {
                    "caloriesOut": 2.3246,
                    "max": 94,
                    "min": 30,
                    "minutes": 2,
                    "name": "Out of Range"
                },
                {
                    "caloriesOut": 0,
                    "max": 132,
                    "min": 94,
                    "minutes": 0,
                    "name": "Fat Burn"
                },
                {
                    "caloriesOut": 0,
                    "max": 160,
                    "min": 132,
                    "minutes": 0,
                    "name": "Cardio"
                },
                {
                    "caloriesOut": 0,
                    "max": 220,
                    "min": 160,
                    "minutes": 0,
                    "name": "Peak"
                }
            ],
            "value": "64.2"
        }
    ],
    "activities-heart-intraday": {
        "dataset": [
            {
                "time": "00:00:00",
                "value": 64
            },
            {
                "time": "00:00:10",
                "value": 63
            },
            {
                "time": "00:00:20",
                "value": 64
            },
            {
                "time": "00:00:30",
                "value": 65
            },
            {
                "time": "00:00:45",
                "value": 65
            }
        ],
        "datasetInterval": 1,
        "datasetType": "second"
    }
}

当我希望在我的应用程序中对这些数据进行分析时,存储传感器数据的数据库的理想选择是什么?谢谢!

4

3 回答 3

2

Mongo 需要担心的一件事是:存储数据的开销很大。在典型的 RDBMS 或时间序列数据库中,它只存储您的数据,而不是每一行的元数据(字段名称和类型)。

您应该查看 Graphite 和 InfluxDB 等时间序列数据库。甚至 Cassandra 也为此提供了一些功能。

另一方面,正如另一位发帖人所指出的,从常规 SQL 数据库开始可能更简单,并且只在需要时迁移。通过推迟选择,您将更好地了解您想要的具体权衡。

Graphite 是一种易于上手的数据库。它做了一个非常具体的权衡:每个图的数据存储需求是恒定的(即不会随着时间的推移而变大,即使您记录多年的数据。)它还可以每秒处理数百万个指标。唯一的缺点是分辨率“过时”,因此您可以告诉它存储 1m 分辨率几天,然后降低到 10m 分辨率一个月,然后 1h 分辨率 1 年,1d 分辨率 10 年。您可以告诉它保留每个间隔的统计信息(最大值、最小值、平均值、第 90 个百分位数)。获取任意时间跨度的图表基本上是一次磁盘寻道。有优秀的仪表板可以查看您的数据(我推荐Grafana)。

于 2016-01-18T19:55:48.963 回答
0

当数据中没有结构时,NoSQL DB 是一个不错的选择。您也可以在 RDBMS 中模拟(键、值)功能。您显示的示例数据看起来可以很容易地标准化并存储在 MySQL 或 SQL Server 中。你为什么不先去呢?它也将非常容易管理。最重要的是,您的数据具有结构。

如果性能成为问题,您可以使用索引。甚至去规范化。您可以在此 SO answer about Normalization in databases中找到规范化数据的步骤。您可以像在任何 NoSQL 解决方案中一样在 RDBMS 中执行聚合和处理数据。你还有别的原因吗?

于 2015-09-20T22:47:55.570 回答
0

您可以试用 Amazon Redshift,因为,

  • 它具有使用复制命令的直接 json 加载功能。
  • 它支持完整的 ANSI SQL(因为它基于 PostgreSQL)。
  • 它具有内置的分析功能。
  • 如果您想要更多“分析”,它支持 Python 和 R。
  • 它与最流行的报告解决方案(Microstrategy、Tableau 等)直接连接
  • 它完全在 AWS 云上。
于 2015-09-21T09:28:57.607 回答