[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