2015-06-21 40 views
2

我是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时感兴趣的范围查询。

这就是我所在的地方,我很想听听你对此的看法。

回答

0

我对Cassandra很新,但我想我可以在这里分享一些知识。

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

CREATE TABLE location_by_wind_speed (sensor_id bigint, weather_speed int, 
    date timestamp, data1 ..., PRIMARY KEY (sensor_id, weather_speed)) 

然后你就可以查询这样的:

SELECT * FROM location_by_wind_speed WHERE sensor_id=123 
    AND wind_speed > 20 AND wind_speed < 100 

为了能够按时间筛选结果,您可以使用一个复合分区键(描述为here)。例如:

CREATE TABLE location_by_wind_speed_year (sensor_id bigint, weather_speed int, 
    date timestamp, data1 ..., PRIMARY KEY ((sensor_id, year), weather_speed)) 

这将允许您选择特定年份内的录音。如果您需要按时间排序的结果,则可以在应用程序代码中进行排序。

相关问题