我是NoSQL和Cassandra的新手,希望在选择我的数据库模式设计来处理水文数据时作出决定。作为一个便笺,我正在用Python开发应用程序,并且一直在用Datastax Python Driver驱动。为水文时间序列数据选择Cassandra模式
简而言之,根据读取的测量间隔/类型,传入原始数据在不同文件中以逗号分隔值存储,基本取决于我称为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,时间戳),其中sensor_id将成为分区键和时间戳聚集键。这显然适用于我们想要获取特定时间所有值的情况,但不适用于我们在执行QC时感兴趣的范围查询。
这就是我所在的地方,我很想听听你对此的看法。