Kezdőoldal » Számítástechnika » Programozás » Üdv, Python programozással...

Üdv, Python programozással kapcsolatban lenne kérdésem!?

Figyelt kérdés
A feladat az lenne, hogy egy soros portot folyamatosan figyelni kéne, és a bejött adatot felölteni egy MySQL adatbázisba, viszont, ha nincs kapcsolat az adatbázis szerverrel, akkor egy helyi, szintén MySQL adatbázisba kellene menteni az adatokat. Eddig ez nem is probléma, viszont, amint visszajön a kapcsolat, akkor fel kellene tölteni a helyi adatbázisból az adatokat a szerverre, de ha érkezik soros adat, akkor természetesen az élvezzen prioritást és töltődjön fel az adatbázisba, majd folytatódjon a helyi adatok szinkronizálása az adatbázissal. Elég kezdő vagyok Python programozásban, és az érdekelne ki, hogy oldaná meg? Szálkezeléssel? Vagy esetleg írni egy State Machine-t? Vagy esetleg két külön script, egyik figyeli a soros portot a másik pedig a helyi adatbázist? Válaszokat előre is köszönöm!

2022. máj. 21. 10:43
 1/7 anonim ***** válasza:

Látatlanban nem tudom az adatbázisok felépítését. Ezért kezdem azokkal, meg mivel írtad hogy kezdő vagy. Gondolom az adatintegritás fontos a helyi és a távoli adatbázisnak olyannak kell lennie, hogy adatbázis szinten támogassa azt ha bárhol megszakad bármi miatt is a szkript vagy a kapcsolat akkor se legyen adatvesztés. A python szkirpt olvassa ki az aktuális felszinkonizálandó adatot a localhost-ból majd írja bele a távoli adatbázisba ez után könyvelje a localhost adatbázisban hogy sikeres felszinkorizálás azon adatokra. Ha akkor szakad meg amikor lekönyvelné a localhoston hogy sikeres akkor újraindításkor újra próbálná felszinkronizálni, ezt az adatbázisszerver utasítsa vissza vagy elsődleges kulccsal vagy unique index mezővel, majd kivételkezeléssel ezt is le kell kezelni python-nal, hogy az mégis sikeres és lekönyvelni a localhoston.


Amit kérdezel szálkezeléssel meg lehet oldani.

[link]

A PriorityQueue felhasználható erre. Ha van egy ilyen típusú priolitási sorod pl. q változóba akkor q.put(value) érték esetén az értéktől függ, hogy a q.get() sorrendje szerint mikor következik. A kisebb értékeket előrébb sorolja. Felszeleteled feltöltendő műveletekre a küldendő adatokat és tuple-val tudod szabályozni hogy az egyik magasabb prolitást élvezzen q.put((1,adat1)) q.put((1,adat2)) q.put((1,adat3)) q.put((0,adat3)) . A rendezési reláció miatt a (0,adat3) miatt előre veszi a q.get, mert a 0<1 és lexikografikus rendezés szerint rendeződik. Az adatokra pedig legyen értelmezve rendezési reláció, pl stringet int-el nem lehet összehasonlítani. Ha az azonos priolitással rendelkező adatokat is meg akarod határozni milyen sorrendbe töltse fel, nem a rendezési reláció szerint pl érkezéis sorrendben akkor ezt is lehet szabályozni tuple-el ugyanígy értelemszerűen.

2022. máj. 21. 12:11
Hasznos számodra ez a válasz?
 2/7 anonim ***** válasza:
24%
Ez elég tipikusan két külön alkalmazás.
2022. máj. 21. 13:33
Hasznos számodra ez a válasz?
 3/7 anonim ***** válasza:

Ez az elgondolás eleve hibás, hogy egyszer ide írunk, egyszer oda írunk, aztán még jól meg is kavarjuk köztük az adatokat. Egyetlen egy dolog menjen félre és mindkét adatbázis korrupt lesz. Azt utána már a jóisten sem hozza helyre vagy mondjuk úgy, hogy legalább 7 számjegyű összeg fog lemenni a bankszámláról érte.


Minden adatbázishoz vannak szinkronizáló toolok, ha a klasszikus master-slave felállás nem jó a feladatra. Tessék használni őket és programból csak egy adatbázissal dolgozni.

2022. máj. 22. 01:16
Hasznos számodra ez a válasz?
 4/7 A kérdező kommentje:
És ha a program éppen nem tudja írni az adatbázist? Ezért kellene olyankor a localba írni, hogy ne legyen adatvesztés (szerver csak egy áll rendelkezésre)
2022. máj. 22. 07:46
 5/7 anonim ***** válasza:

Teljesen jó az alapelgondolás.

Bohócokra ne hallgass.

Van két szervized.

Az egyik ír a távoli adatbázisba, ha nem sikerül, akkor a helyibe.

A másik pedig szinkronizál.

Nincs minek félremennie vagy csilliós korrupcióról beszélni, eke egyszerű az egész.

2022. máj. 22. 09:32
Hasznos számodra ez a válasz?
 6/7 anonim ***** válasza:
#4 Miért ne tudná éppen kiírni? Mi az az eset, amire gondolsz?
2022. máj. 22. 14:17
Hasznos számodra ez a válasz?
 7/7 anonim ***** válasza:

Szerintem a tervezés nem jó. Azok oldalát erősítem, akik újra terveznék ezt.



Alapvetően van rá mód, hogy ne kelljen foglalkozni ilyesmivel, hogy szinkronizálunk. Erre vannak a clasteres, több node-s adatbázisok amik önmagukat tudják szinkronizálni.


CAP-t is erről szól. Lehetőség közül válasz 2, a három közül.

Ha nagyon write-heavy és a network se megbízható, akkor kukáznám a MySQL-t és egy Cassandra-t vetnék be. Ha fontos a konzisztens adat, akkor MongoDB, igaz míg egy új master felál az pár másodperc. Addig pufferelsz és az új masterbe meküldesz mindent. Majd a DB lerendezi házon belül az adatszórást.


[link]

2022. máj. 23. 07:38
Hasznos számodra ez a válasz?

További kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!