[vz-users] Middleware + Postgres

basti mailinglist at unix-solution.de
Fr Nov 15 14:34:08 CET 2024


Hallo,

ich greife das Thema nochmal auf und versuche hier grad die aggregate 
function in postgres nach zu bauen, an sich werden schon mal Dinge 
eingetragen.

Zum Test habe ich ein mysql dump auf einer testmaschine eingespielt und 
diesen mit pgloader ins postgres migriert.
Das hat auch soweit geklappt.

Jetzt habe ich die aggregate function drüber laufen lassen. (full minute 
hour day month year)

Aktuell sind das einfach das mysql query in postgres nach gebaut.


MariaDB [volkszaehler]> select type,count(type) from aggregate group by 
type;
+------+-------------+
| type | count(type) |
+------+-------------+
|    1 |     1829718 |
|    2 |       56986 |
|    3 |        2847 |
|    5 |          97 |
|    6 |           7 |
+------+-------------+
5 rows in set (1.684 sec)


volkszaehler=# select type,count(type) from aggregate group by type;
  type | count
------+--------
     1 | 340247
     2 |   7319
     3 |   2747
     5 |     97
     6 |      5
(5 rows)

Wie man sieht gibt es da einige Unterschiede. Wenn man sich diese 
allerdings genauer anschaut stellt man folgendes fest:

MariaDB [volkszaehler]> select * from aggregate where type = 6;
+------+---------------+------------+--------------------+----------+
| type | timestamp     | channel_id | value              | count    |
+------+---------------+------------+--------------------+----------+
|    6 | 1672527599965 |          5 | 1.9211249284007268 |  5048914 |
|    6 | 1704063599571 |          5 |  305.4032314352446 | 22512301 |
|    6 | 1704034349763 |          6 | 0.8704013526636274 |    36020 |
|    6 | 1704034170062 |          8 | 0.8433778902336863 |    34520 |
|    6 | 1671710193665 |         11 |            31476.4 |        4 |
|    6 | 1704061251576 |         11 |           272896.8 |  1300856 |
|    6 | 1704063598569 |         12 |         13627194.4 |  6202396 |
+------+---------------+------------+--------------------+----------+

MariaDB [volkszaehler]>  select channel_id, timestamp, sum(value), 
sum(count) from aggregate where type = 6 group by channel_id;
+------------+---------------+--------------------+------------+
| channel_id | timestamp     | sum(value)         | sum(count) |
+------------+---------------+--------------------+------------+
|          5 | 1672527599965 | 307.32435636364534 |   27561215 |
|          6 | 1704034349763 | 0.8704013526636274 |      36020 |
|          8 | 1704034170062 | 0.8433778902336863 |      34520 |
|         11 | 1671710193665 |           304373.2 |    1300860 |
|         12 | 1704063598569 |         13627194.4 |    6202396 |
+------------+---------------+--------------------+------------+

volkszaehler=# select channel_id, timestamp, sum(value) sum_value, 
sum(count) sum_count from aggregate where type = 6 group by channel_id, 
timestamp;
  channel_id |   timestamp   |     sum_value      | sum_count
------------+---------------+--------------------+-----------
           5 | 1704063599571 | 330.93117440870924 |  27561215
           6 | 1704034349763 |   67.5377872277402 |     36020
           8 | 1704034170062 |  67.87288248915863 |     34520
          11 | 1704061251576 | 140323.66230492413 |   1300860
          12 | 1704063598569 | 12591140.772808703 |   6202396
(5 rows)

Was die Anzahl der Datensätze (sum_count) angeht sieht das erstmal gar 
nicht so schlecht aus. Der timestamp passt ja auch im großen und ganzen.
Doch wieso macht mysql mehrere Datensätze für die selbe channel_id ?

Weiter gehts mit ID 5:

MariaDB [volkszaehler]> select channel_id, sum(value), sum(count) from 
aggregate where type = 5 group by channel_id;
+------------+--------------------+------------+
| channel_id | sum(value)         | sum(count) |
+------------+--------------------+------------+
|          5 |  4173.303213072495 |   40324006 |
|          6 | 1556.0126402405049 |      93507 |
|          8 | 1293.6022994190928 |      87215 |
|         11 | 13309688.799999999 |    4270516 |
|         12 | 244722320.80000004 |    9608319 |
+------------+--------------------+------------+

volkszaehler=# select channel_id, sum(value) value_sum, sum(count) 
count_sum from aggregate where type = 5 group by channel_id;
  channel_id |     value_sum      | count_sum
------------+--------------------+-----------
           5 |  4484.341462242142 |  40324006
           6 | 1607.1087701789425 |     93507
           8 | 1468.4100718148445 |     87215
          11 | 12121570.955281708 |   4270516
          12 |  243258953.6833696 |   9608319
(5 rows)




Sieht ganz gut aus.
Könnten die Unterschiede in value_sum Rundungsfehler durch interne 
Verarbeitung sein?

Ab jetzt kommen hier die Unterschiede, auffällig ist auch das bei 
postgres immer die selben count_sum raus kommt.
Das muss ich mir nochmal ansehen, was da genau los ist.

ID 3

MariaDB [volkszaehler]> select channel_id, sum(value), sum(count) from 
aggregate where type = 3 group by channel_id;
+------------+--------------------+------------+
| channel_id | sum(value)         | sum(count) |
+------------+--------------------+------------+
|          5 | 146354.53277176886 |   45238741 |
|          6 |  41119.90896893941 |      94991 |
|          8 |  34703.36722523642 |      88678 |
|         11 | 398075213.40000004 |    4292043 |
|         12 |  7354897541.599994 |   11099913 |
+------------+--------------------+------------+

volkszaehler=# select channel_id, sum(value) value_sum, sum(count) 
count_sum from aggregate where type = 3 group by channel_id;
  channel_id |     value_sum      | count_sum
------------+--------------------+-----------
           5 | 133708.76949663696 |  40324006
           6 | 41323.305482639465 |     95100
           8 |  34881.81366887836 |     88789
          11 |  396964552.1150946 |   4276980
          12 |  6924639690.792535 |   9985521

ID 2

MariaDB [volkszaehler]> select channel_id, sum(value), sum(count) from 
aggregate where type = 2 group by channel_id;
+------------+--------------------+------------+
| channel_id | sum(value)         | sum(count) |
+------------+--------------------+------------+
|          5 | 3362013.4826673493 |   46731719 |
|          6 |  940734.9304156051 |      95100 |
|          8 |  788481.6429463148 |      88789 |
|         11 |  9546633178.800085 |    4781225 |
|         12 |  180602502476.4008 |   12022086 |
+------------+--------------------+------------+

volkszaehler=# select channel_id, sum(value) value_sum, sum(count) 
count_sum from aggregate where type = 2 group by channel_id;
  channel_id |     value_sum     | count_sum
------------+-------------------+-----------
           5 | 967.5152503534034 |  40324006
           6 | 784.8994637005601 |     95100
           8 | 575.2315164330718 |     88789
          11 | 1475084.814567755 |   4276980
          12 | 36114927.83161382 |   9985521

ID 1

MariaDB [volkszaehler]> select channel_id, sum(value), sum(count) from 
aggregate where type = 1 group by channel_id;
+------------+--------------------+------------+
| channel_id | sum(value)         | sum(count) |
+------------+--------------------+------------+
|          5 | 183059287.14181554 |   40919363 |
|          6 |  12173731.70361931 |      95100 |
|          8 |  9721726.856645035 |      88789 |
|         11 | 145065280264.20197 |    4335601 |
|         12 |  8591092639108.402 |   10197269 |
+------------+--------------------+------------+

volkszaehler=# select channel_id, sum(value) value_sum, sum(count) 
count_sum from aggregate where type = 1 group by channel_id;
  channel_id |     value_sum      | count_sum
------------+--------------------+-----------
           5 | 20640.828812586446 |  40324006
           6 | 1142322.3994688843 |     95100
           8 |  916102.5345901544 |     88789
          11 |  11550147359.55225 |   4276980
          12 |  2708662786.175085 |   9985521



Am 13.10.22 um 12:48 schrieb Daniel Lauckner:
> Hallo,
> 
> 
> am Donnerstag, 13. Oktober 2022 um 09:46 hat basti geschrieben:
>> hat jemand die Middleware mit Postgres am laufen?
> [...]
>> Hat das schon jemand Umgesetzt oder angefangen?
> 
> Nein.
> Wir hatten mal rudimentäre Unterstützung aus der frühen Entwicklung drin, es gab aber niemanden der die fortlaufende Kompatibilität sicherstellte.
> 
> 
> mfg Daniel
> 



Mehr Informationen über die Mailingliste volkszaehler-users