Re: Ideas about presenting data coming from sensors

From: Achilleas Mantzios - cloud <a(dot)mantzios(at)cloud(dot)gatewaynet(dot)com>
To: Adrian Klaver <adrian(dot)klaver(at)aklaver(dot)com>, "pgsql-general(at)lists(dot)postgresql(dot)org" <pgsql-general(at)lists(dot)postgresql(dot)org>
Cc: Achilleas Mantzios <itdev(at)gatewaynet(dot)com>
Subject: Re: Ideas about presenting data coming from sensors
Date: 2025-02-13 09:53:43
Message-ID: d8892101-4cab-4f42-8c8b-9a84cb8ff767@cloud.gatewaynet.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general


On 1/30/25 18:45, Adrian Klaver wrote:
> On 1/30/25 06:18, Achilleas Mantzios - cloud wrote:
>> Dear PostgreSQL people
>>
>> We have a project having to do with capturing sensor data and alarms
>> from various machinery using various protocols/standards (e.g. NMEA ,
>> MODBUS). We have about 150 sites (vessels of various types) and each
>> site will generate about 500 rows per minute. We have solved most of
>> the design + issues regarding DB, data transfer to the central DB,
>> etc and now we have started to think about presenting them.
>>
>> Ideally and eventually each one of those will be connected to some
>> machinery item defined in our inventory / live system, so the final
>> goal is to have smth like "mimics" and interactive UI that will let
>> the user have an overall view of  the fleet (all vessels), spot the
>> red/orange ones, then click on a vessel, spot the red/orange areas,
>> then keep on zooming in until he/she finds the exact item that is in
>> trouble.
>>
>> This is the rough idea.
>>
>> But for now we are more interested in just viewing the incoming data
>> that will be basically tag/value pairs.
>>
>> The types of those data will be divided in normal tag with a normal
>> float value, or alarm data which have about 2 discrete boolean
>> variables (valid and acknowledged). So we want to cover those two
>> cases as far as viewing is concerned.
>>
>> The data will have minutely resolution. So if a vessel e.g. has 700
>> discrete tags then the system will generate and transfer to the
>> central DB 700 rows for every minute.
>>
>> Any ideas? Graphs time series? We have graphs (Java) that show time
>> series with daily resolution. What would you guys recommend for
>> showing such data, coming from data acquisition systems ?
>
> It seems there are two uses in play here:
>
> 1) Minute by minute data acquisition to track sensor and alarm output
> in general.
>
> 2) Troubleshooting emerging problems.
>
> For 2) you seem to already have the idea of drilling down on values
> that have moved into the orange --> red area. That does not require
> displaying all the data, just the data that enters the zone of interest.
>
>
> For 1) the question is do you think folks are going to look at 700
> values recorded on a minute by minute basis on 150 ships? Where that
> information could help is supplying context for the problems arising
> in 2), especially  intermittent issues. I could see picking a problem
> defined in 2) and allowing for the user to select both a time period
> and related values over that period to help determine how the problem
> developed.
>
Thank you Adrian!

Yes the ultimate goal would be to have a graphical overview where the
user will finally zoom in until he/she spots the exact single problem at
hand. Then view trends or other historical data that might have had
contributed or caused this specific event.

We took a look in timescaledb, and this seems to fit completely what we
need :

- postgresql

- time series data

- efficient storage, efficient querying

- out of the box partitioning

- etc

Now my problem is on the design . We have :

a) tags that have primitive values, float4 lets say - this is the
majority, e.g. 60% of all tags

b) tags that contain alarms data also with defined structure, which have
additional data such as time of the initial alarm set, acknowledgement
of this alarm , validity of this alarm. Those represent smth like 35% fo
all tags

c) tags that are basically polymorphic (about 11 of them all in all),
each one has different structure, and their fields/cols range a few (1)
up to many (25)

We have a table for a) and a table for b).

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.

>
>>
>> Thank you!
>>
>>
>>
>>
>

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Pavel Borisov 2025-02-13 13:02:18 Re: Using Expanded Objects other than Arrays from plpgsql
Previous Message Laurenz Albe 2025-02-13 06:37:50 Re: Best Approach for Swapping a Table with its Copy