Database design 水文时间序列数据的Cassandra模式选择

Database design 水文时间序列数据的Cassandra模式选择,database-design,cassandra,cql,bigdata,nosql,Database Design,Cassandra,Cql,Bigdata,Nosql,我是NoSQL和Cassandra的新手,希望在为处理水文数据的数据库选择模式设计的决策中得到一些帮助。作为补充说明,我正在用Python开发应用程序,并一直在玩弄Datastax Python驱动程序 简而言之,根据测量间隔/读取类型,输入的原始数据以逗号分隔的值存储在不同的文件中,基本上取决于变量I call sensor_id。例如,每小时数据如下所示: sensor_id (int), year (int), julianday (int), hourminute (int) , dat

我是NoSQL和Cassandra的新手,希望在为处理水文数据的数据库选择模式设计的决策中得到一些帮助。作为补充说明,我正在用Python开发应用程序,并一直在玩弄Datastax Python驱动程序

简而言之,根据测量间隔/读取类型,输入的原始数据以逗号分隔的值存储在不同的文件中,基本上取决于变量I call sensor_id。例如,每小时数据如下所示:

sensor_id (int), year (int), julianday (int), hourminute (int) , data1 (float), data2 (float), data3 (float)..
SELECT * FROM location_by_wind_speed WHERE sensor_id=123 
  AND wind_speed > 20 AND wind_speed < 100
…因此,样本读数将类似于:

715, 2015, 15, 2230, 3.65, 6.12, 95.2 ,...
715, 2015, 15, 2330, 4.12, 5.12, 87.2 ,...
其中715表示它是一个小时读数,因此每天的读数将使用另一个传感器id。我们称之为716,样本读数将沿着以下几行进行:

716, 2015, 15, 3.52, 5.23, 84.5,..
对于每日阅读,我们显然跳过了时间细节,因为阅读每朱利安一天只收集一次。你可能明白了

因此,每个位置都有自己的读取间隔,其中数据列的数量,即感兴趣的参数取决于读取间隔/类型。例如,每日数据由约20列组成,每小时数据由约15列组成

感兴趣的查询:

我希望能够对一些数据参数进行简单的质量控制,可能主要是气温、水温、风速和水位,也可能是其他一些。首先,这可能是检查参数值是否超过或低于给定的最大-最小阈值。我还希望能够绘制原始数据、质量控制数据和未通过QC测试的值

  • 特定值是否在给定阈值()内
  • 获取给定间隔(传感器id)和时间(主要用于绘图)的所有参数
我最初的想法也是将日期/时间参数转换为时间戳,然后将每一行/读数插入一个与原始文件结构相同的表中。例如,位置将按小时显示(使用上述值)

并设置主键(sensor_id,timestamp),其中sensor_id将成为分区键,timestamp将成为集群键。这显然适用于我们希望获取在特定时间获取的所有值的情况,但不适用于我们在执行QC时感兴趣的范围查询


这就是我所处的位置,我很想听听你们对此的看法。

我对卡桑德拉很陌生,但我想我可以在这里分享一些知识

要启用对天气参数的范围查询,您需要创建单独的表,其中这些天气参数充当集群列。例如,为了能够查询风速范围:

CREATE TABLE location_by_wind_speed (sensor_id bigint, weather_speed int,
    date timestamp, data1 ..., PRIMARY KEY (sensor_id, weather_speed) )
然后,您将能够进行如下查询:

sensor_id (int), year (int), julianday (int), hourminute (int) , data1 (float), data2 (float), data3 (float)..
SELECT * FROM location_by_wind_speed WHERE sensor_id=123 
  AND wind_speed > 20 AND wind_speed < 100
这将允许您选择特定年份内的录制。如果您需要按时间排序的结果,您可以在应用程序的代码中进行排序