If you want to talk about reengineering things under the hood, that might 
be better discussed in the weewx-development group, and I'm sure Tom and 
the usual others will chime in a lot there item-by-item.

But yes, the operative word there is 'summary' in the table names.   Weewx 
keeps the summary tables up to date for (I'm guessing) performance reasons. 
  There might be a little ancient history as well based on the original 
wview-compatibility goals regarding the naming conventions and the like.

My over-simplified understanding of the various summary tables is they are 
running totals of the measurements for the day and how many measurements 
they are, with the min/max and time of min/max recorded, as well as a 
weighted sum.   Things that are directional in nature are a bit more 
complicated I guess, but I never worried it basically so I don't know there.

One resource you might look at is http://weewx.com/docs/customizing.htm 
which has some architectural things in it.

On Sunday, February 28, 2021 at 2:47:42 PM UTC-8 david.a....@gmail.com 
wrote:

> Side note:
> re-reading Vince's post, i had the process backwards - detailed event 
> records in Archive table; summary/special info in separate tables... 
>
> On Sunday, February 28, 2021 at 2:44:18 PM UTC-8 David Prellwitz wrote:
>
>> Thanks for the quick reply!  I apologize for any negative connotations 
>> (not intended), i guess my perceptions and assumptions are off-base! it's 
>> just in all my professional DB roles (25yrs +) i've had to use visual 
>> layout tools to understand existing data creation, utilization, ranges, 
>> applications and operational impacts. These visual tools allowed us to use 
>> as much third-normal form reduction steps as possible to simplify data 
>> architecture to the lowest possible level. My misjudgement of WeeWx layout 
>> and structure is just that, my misjudgement. 
>>
>> Perhaps i am over-thinking things as i try to get basic things done. 
>> Habits of a long life in IT Management/DB Architecture/Programming. I just 
>> think i may be some ideas and observations that may improve WeeWx but, I 
>> can drop these distractions if it's an issue. 
>>
>> Now, the issue I had was the lack of understanding the role of the 
>> additional tables - they didn't seem to have any relationship to the 
>> archive table; other than Epoch. If i'm reading your statement correctly, 
>> all the other tables are the detail records for each of the elements in the 
>> archive table - just related by element type ("Name"?) and epoch timestamp? 
>> So if i went looking for "Wind Gust Direction" instances, I'd look in the 
>> Archive table for "WindGustDir" and find an entry (which represents what, a 
>> summary, an average, ?),  and one or more "Archive_day_windGustDir" 
>> entries, depending on the frequency of that element's recording? (Assuming 
>> archived wind-gust data is recorded for one-minute intervals, but 
>> "Archive_day_windGustDir" are recorded at 3second intervals for 
>> Wind-Gust-Dir table.)  Knowledge at that level of detail should be known 
>> somewhere, right? Perhaps somewhere in GitHub?
>>
>> How is this useful? It appears to me (IMHO) that a good understanding of 
>> the data flow and mapping could help reduce event process time; reduce data 
>> storage needs; increase functionality; improve simplicity and make it a 
>> better product. Looking at the architecture of WeeWx, the process diagram 
>> shows a single thread for each event (i.e., UDP packet arrival); followed 
>> by event processing; followed by data-recording; followed by report 
>> generation. All of these appear to be serial. If the front end was to be 
>> multi-threaded to allow multiple device/station packet reception and placed 
>> in a triggered repository that the rest of WeeWx processed, wouldn't WeeWx 
>> be able to process multiple stations data without having multiple instances 
>> of WeeWx (and multiple SQL db's). A quick, multi-threaded front-end could 
>> be prioritized to allow for sub-second processing. Leaving more "leisured" 
>> approach for the rest of Weewx to process and create reports. 
>>
>> I'm a bit rusty in data-mapping (did it from 1975 through 1998) so i'm 
>> sure any post-grad would be sharper at this then I am.  Perhaps having some 
>> Data Science Professor create a post-doc project that would help (assuming 
>> i'm not too far off base here)!  Being retired, i now have time on my hands 
>> to assist if anyone thinks that would be useful.
>>
>> On Saturday, February 27, 2021 at 5:43:09 PM UTC-8 vince wrote:
>>
>>> I'd suggest your commentary is more than a little bit unfair and 
>>> inaccurate, and I'll leave it at that.
>>>
>>> Weewx by default uses an underlying sqlite3 database and puts its 
>>> readings into an 'archive' table that has a large number of fields for the 
>>> actual weather measurements.
>>>
>>> CREATE TABLE archive (`dateTime` INTEGER NOT NULL UNIQUE PRIMARY KEY, 
>>> `usUnits` INTEGER NOT NULL, `interval` INTEGER NOT NULL, `altimeter` REAL, 
>>> `appTemp` REAL, `appTemp1` REAL, `barometer` REAL, `batteryStatus1` REAL, 
>>> `batteryStatus2` REAL, `batteryStatus3` REAL, `batteryStatus4` REAL, 
>>> `batteryStatus5` REAL, `batteryStatus6` REAL, `batteryStatus7` REAL, 
>>> `batteryStatus8` REAL, `cloudbase` REAL, `co` REAL, `co2` REAL, 
>>> `consBatteryVoltage` REAL, `dewpoint` REAL, `dewpoint1` REAL, `ET` REAL, 
>>> `extraHumid1` REAL, `extraHumid2` REAL, `extraHumid3` REAL, `extraHumid4` 
>>> REAL, `extraHumid5` REAL, `extraHumid6` REAL, `extraHumid7` REAL, 
>>> `extraHumid8` REAL, `extraTemp1` REAL, `extraTemp2` REAL, `extraTemp3` 
>>> REAL, `extraTemp4` REAL, `extraTemp5` REAL, `extraTemp6` REAL, `extraTemp7` 
>>> REAL, `extraTemp8` REAL, `forecast` REAL, `hail` REAL, `hailBatteryStatus` 
>>> REAL, `hailRate` REAL, `heatindex` REAL, `heatindex1` REAL, `heatingTemp` 
>>> REAL, `heatingVoltage` REAL, `humidex` REAL, `humidex1` REAL, `inDewpoint` 
>>> REAL, `inHumidity` REAL, `inTemp` REAL, `inTempBatteryStatus` REAL, 
>>> `leafTemp1` REAL, `leafTemp2` REAL, `leafWet1` REAL, `leafWet2` REAL, 
>>> `lightning_distance` REAL, `lightning_disturber_count` REAL, 
>>> `lightning_energy` REAL, `lightning_noise_count` REAL, 
>>> `lightning_strike_count` REAL, `luminosity` REAL, `maxSolarRad` REAL, `nh3` 
>>> REAL, `no2` REAL, `noise` REAL, `o3` REAL, `outHumidity` REAL, `outTemp` 
>>> REAL, `outTempBatteryStatus` REAL, `pb` REAL, `pm10_0` REAL, `pm1_0` REAL, 
>>> `pm2_5` REAL, `pressure` REAL, `radiation` REAL, `rain` REAL, 
>>> `rainBatteryStatus` REAL, `rainRate` REAL, `referenceVoltage` REAL, 
>>> `rxCheckPercent` REAL, `signal1` REAL, `signal2` REAL, `signal3` REAL, 
>>> `signal4` REAL, `signal5` REAL, `signal6` REAL, `signal7` REAL, `signal8` 
>>> REAL, `snow` REAL, `snowBatteryStatus` REAL, `snowDepth` REAL, 
>>> `snowMoisture` REAL, `snowRate` REAL, `so2` REAL, `soilMoist1` REAL, 
>>> `soilMoist2` REAL, `soilMoist3` REAL, `soilMoist4` REAL, `soilTemp1` REAL, 
>>> `soilTemp2` REAL, `soilTemp3` REAL, `soilTemp4` REAL, `supplyVoltage` REAL, 
>>> `txBatteryStatus` REAL, `UV` REAL, `uvBatteryStatus` REAL, 
>>> `windBatteryStatus` REAL, `windchill` REAL, `windDir` REAL, `windGust` 
>>> REAL, `windGustDir` REAL, `windrun` REAL, `windSpeed` REAL);
>>>
>>> If you look at the beginning of the line, you'll see the unique key is 
>>> the dateTime (seconds since the unix epoch).
>>>
>>> There are also a number of additional sqlite3 tables created, one per 
>>> item above, with the dateTime for the record, the max/min for that 
>>> measurement, when the max/min occurred, and also for things that are 
>>> accumulated a running total.
>>>
>>> CREATE TABLE archive_day_inTemp (dateTime INTEGER NOT NULL UNIQUE 
>>> PRIMARY KEY, min REAL, mintime INTEGER, max REAL, maxtime INTEGER, sum 
>>> REAL, count INTEGER, wsum REAL, sumtime INTEGER);
>>>
>>> These tables are not connected in any way at the database level, they're 
>>> individual tables.  They're also using the dateTime of the record as the 
>>> primary key for the records in the table.
>>>
>>> Weewx handles the heavy lifting for keeping the summary tables up to 
>>> date from the data in the archive table.   When you see people who ask how 
>>> to clear bad data from their (archive table in the) database, they are 
>>> generally told to 'drop daily' (which deletes the summary tables) and 
>>> 'rebuild daily' (which regenerates the summary tables from the 
>>> hand-modified archive table).
>>>
>>> That help any ? 
>>>
>>> I guess I'm kinda speechless re: using a drawing tool to visualize a 
>>> database nor really what you're trying to do.   Perhaps the tool you want 
>>> to use is google and going through the sqlite3 documentation online to 
>>> better understand how to reverse engineer and examine a sqlite3 database, 
>>> but I guess that's a bit harsh.  I'll assume that you're overthinking 
>>> things a bit and looking for complexity where it doesn't exist.
>>>
>>>
>>>    - archive table has all the 'meat'
>>>    - summary archive_whatever tables have the pre-computed summaries of 
>>>    max/min/sums of each element for later use
>>>    
>>>
>>>
>>>

-- 
You received this message because you are subscribed to the Google Groups 
"weewx-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to weewx-user+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/weewx-user/5b409fc8-0ad6-47d6-8f30-a7e16e62bc2dn%40googlegroups.com.

Reply via email to