Re: Ideas about presenting data coming from sensors

Achilleas Mantzios <a.mantzios@cloud.gatewaynet.com>

From: Achilleas Mantzios - cloud <a.mantzios@cloud.gatewaynet.com>
To: pgsql-general@lists.postgresql.org
Date: 2025-02-14T10:46:22Z
Lists: pgsql-general
On 2/14/25 11:34, Allan Kamau wrote:
>
>
> On Thu, Feb 13, 2025 at 9:44 PM Thiemo Kellner 
> <thiemo@gelassene-pferde.biz> wrote:
>
>     13.02.2025 10:54:05 Achilleas Mantzios - cloud
>     <a.mantzios@cloud.gatewaynet.com>:
>
>     > If we followed a strict normalized approach then we would create
>     additionally 11 tables each tag of type c) . And we are not
>     guaranteed that the same tags would have the same structure over
>     the whole fleet/manufacturers. So we are thinking of putting all
>     semi-structured data of tags of type c) into one table with a
>     single col of type jsonb . From what I read timescaledb plays nice
>     with jsonb (or at least not bad).
>     >
>     > Do you ppl see any gotcha with this approach ?
>     >
>     > For starters we will not convert yet to timescaledb, but store
>     them and handle them like normal tables. At least until we grasp
>     the ins and outs of this.
>
>     I have not come to see the real advantage of putting data into
>     something like Jason or XML columns. Sue, you make life easier
>     initially saving the time to put them into columns one by one, on
>     the other end you have the hassle of dissecting the JSON, XML you
>     name it when you retrieve/select the data, every query. While the
>     query might stay stable the  computational
>     effort dissection will have to be done with every query execution.
>
>     For c) you could go to 6th normal form, or what number that is, by
>     a table like TAG(id, tag_name, tag_value). You would have to
>     convert the values to string to enter them. It is a pain in the
>     butt, imho, retrieving them again. You can alleviate by having a
>     specific column/table per data type, e.g. TAG(id,
>     tag_name,tag_value_varray,tag_value_date,...).
>
>     What is the downside of having each a table for the special tags?
>     More effort in setting up.
>     The upside is less effort in retrieval, and a much more
>     understandable model.
>
>     If your tag structure is volatile, you might have generic column
>     names on a table mapping them in a view to speaking names. Taking
>     this further does anchor modelling https://www.anchormodeling.com/
>     .
>
>
>
> Though you haven't asked for comments on database design, I have a 
> suggestion, have you considered using table partitioning based on a 
> well defined date interval, maybe monthly?
> Here your DB data population application will determine the name of 
> the table based on the current date then check for the existence of 
> the table and then construct the inherited table if one does not exist 
> and proceed to populate the child table accordingly.

Absolutely, this will be a necessity sooner or later, as I can see the 
future coming it will be a new timescaledb functioning at the start as a 
logical replica of our maindb, and timescaledb will handle all the 
partitioning (i hope). At some point switch the app (both the data 
loading (from the vessels) and the queries ) to the timescaledb, and 
free the space in the maindb or smth along those line.

> This may prove useful in future.
>
> -Allan.
>