Variable die immer da bleibt

Django, Flask, Bottle, WSGI, CGI…
Antworten
HeAdLeSs
User
Beiträge: 18
Registriert: Dienstag 8. März 2016, 09:22

Mittwoch 8. November 2017, 11:19

Hallo zusammen.

Ich bastel gerade an einem Smart Home Projekt. Für die Weboberfläche arbeite ich mit Flask.
Soweit ich das 'sehe' läuft die Flask Applikation immer durch. Der Thread wird nicht beendet.
Da ich auch mit Ajax arbeite kommen da schnell recht viele Datenbankabfragen zusammen (besonders wenn mehrere Clients auf die Weboberfläche zugreifen).

Mein Gedanke ist: Um die Datenbank zu entlasten würde ich gern Werte in einer Variable hinterlegen. Da Flask nun ja durchgehend läuft ist meine Frage: Gibt es irgendwie eine Möglichkeit eine Variable dauerhaft verfügbar zu machen? Immer (solange der Server nicht beendet/neugestartet wird) und für jeden.

Sessions sind auf einen Client beschränkt. g wohl nur für einen Request.
Ich möchte gern eine Variable im Speicher halten, egal wer die App aufruft.

Ist das irgendwie möglich?
Sirius3
User
Beiträge: 7610
Registriert: Sonntag 21. Oktober 2012, 17:20

Mittwoch 8. November 2017, 12:03

@HeAdLeSs: wenn Du Glück hast, macht das die Datenbank schon für Dich. Hast Du Geschwindigkeitsprobleme?
Benutzeravatar
snafu
User
Beiträge: 5440
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Mittwoch 8. November 2017, 12:07

HeAdLeSs hat geschrieben:Gibt es irgendwie eine Möglichkeit eine Variable dauerhaft verfügbar zu machen?
Mit Variablen sollte man das nicht tun. Meintst du vielleicht Konstanten?
shcol (Repo | Doc | PyPi)
HeAdLeSs
User
Beiträge: 18
Registriert: Dienstag 8. März 2016, 09:22

Mittwoch 8. November 2017, 12:27

@Sirius3
Manchmal schon. Wobei es nicht nur an der Datenbank liegt. Aber sie wird schon recht stark beansprucht.
Wie finde ich raus ob sie das schon macht?

@snafu
Soweit ich mich erinnere ist eine Konstante nicht veränderbar (sagt ja eigentlich der Name schon). Ich muss die Daten später jedoch auch aktualisieren können. Sonst müsste ich sie ja wieder aus der Datenbank holen (zum Aktualisieren) und dann wäre es ja wieder sinnlos.
__deets__
User
Beiträge: 2696
Registriert: Mittwoch 14. Oktober 2015, 14:29

Mittwoch 8. November 2017, 12:46

Was du suchst nennt sich ein Cache. Das kann man machen, ist aber ein of unterschätzes Risiko. Denn zu entscheiden, was wann wie lange gecacht wird ist kompliziert & fehlerträchtig.

Ich würde eher versuchen die Engstellen zu optimieren. Vor allem weil ich mir bei deinem Projekt nicht vorstellen kann, was da wirklich zu viel sein sollte.
Benutzeravatar
noisefloor
User
Beiträge: 2364
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Mittwoch 8. November 2017, 20:35

Hallo,

gängig als Cache ist heute z.B. Redis, memcached ist eine Option (die früher populärer war).

Was du bedenken muss: wenn du einen wie auch immer gearteten Cache nutzt muss du noch Mechnismen einbauen, die den Cache leeren, wenn die DB aktualisiert wurde. Das kann relativ komplex werden, siehe Post von __deets__.

Wenn du eine DB nutzt, die Ergebnisse von Queries cacht, fährst du wahrscheinlich besser. AFAIK macht PostgreSQL das standardmäßig.

Auf welcher Hardware läuft das ganze? Auf einem Raspi?

Gruß, noisefloor
Antworten