【发布时间】:2015-09-06 23:09:57
【问题描述】:
我是 NoSQL 和 Cassandra 的新手,在为我的数据库选择用于处理水文数据的架构设计时,我希望得到一些建议。作为旁注,我正在用 Python 开发应用程序,并且一直在玩弄 Datastax Python 驱动程序。
简而言之,根据测量间隔/读数类型,传入的原始数据以逗号分隔的值存储在不同的文件中,基本上取决于我称为 sensor_id 的变量。例如,每小时数据如下所示:
sensor_id (int), year (int), julianday (int), hourminute (int) , data1 (float), data2 (float), data3 (float)..
..所以示例读数看起来像:
715, 2015, 15, 2230, 3.65, 6.12, 95.2 ,...
715, 2015, 15, 2330, 4.12, 5.12, 87.2 ,...
其中 715 表示它是每小时读数,因此每日读数将使用另一个 sensor_id。我们称它为 716,样本读数看起来会是这样的:
716, 2015, 15, 3.52, 5.23, 84.5,..
对于每日阅读,我们显然跳过了时间细节,因为每个儒略日只收集一次阅读。你大概明白了。
因此,每个位置都有自己的读取间隔,其中数据列的数量(即感兴趣的参数)取决于读取的间隔/类型。例如,每日数据由约 20 列和每小时约 15 列组成。
感兴趣的查询:
我希望能够对一些数据参数进行简单的质量控制,可能主要是气温、水温、风速和水位,也可能还有其他一些参数。首先,这可能是检查参数值是否超过或低于给定的最大-最小阈值。我还希望能够绘制原始数据、质量控制数据以及未通过 QC 测试的值。
- 特定值是否在给定阈值 () 内?
- 在给定的时间间隔(sensor_id)和时间(主要用于绘图)获取所有参数
我最初的想法也只是将日期/时间参数转换为时间戳,然后将每一行/读取插入到与原始文件结构相同的表中。例如, location_hourly 看起来(使用上面的值)
+-----------+---------------------+-------+-------+-------+--------+
| sensor_id | timestamp | data1 | data2 | data3 | data n |
+-----------+---------------------+-------+-------+-------+--------+
| 715 | 2015-01-01 22:30:00 | 3.65 | 6.12 | 95.2 | |
| 715 | 2015-01-01 23:30:00 | 4.12 | 5.12 | 87.2 | |
+-----------+---------------------+-------+-------+-------+--------+
并设置主键(sensor_id,timestamp),其中sensor_id 将成为分区键,时间戳将成为集群键。这显然适用于我们想要获取在特定时间获取的所有值的情况,但不适用于我们在执行 QC 时感兴趣的范围查询。
这就是我所在的位置,我很想听听您对此的看法。
【问题讨论】:
标签: database-design cassandra cql bigdata nosql