Gestione db (server + client)

di il
2 risposte

Gestione db (server + client)

Ciao a tutti!

 sto approfondendo con soddisfazione le potenzialità di Python e adesso mi chiedevo se come logica si potesse realizzare una struttura di questo genere:

Un server dove gira l'applicazione, poi ci sono N client che si interagiscono tramite pagina HTML al server (sia rete locale, ma anche da web). I client non fanno altro che interrogare un db presente sul server e alla fine diciamo che il client deve restituire alcune informazioni al db server. E fin qui ci siamo… la mia curiosità è:  sarebbe possibile che il client memorizzi le informazioni in un db locale temporaneo e successivamente invii le al server? Sarebbe una sorta di backup così nell'eventualità non connettività non si perderebbe il lavoro che ha fatto il client? Potrei creare un db sul client ed accedervi, senza la necessità di installarvi nulla?

Mi piacerebbe così avere un'app che gira in qualsiasi dispositivo e s.o. (mi basterebbe solo il browser) e al tempo stesso memorizza qualche piccola informazione in locale per poi inviarla al server.

Non so se sono riuscito ad esprimere bene il mio quesito… eventualmente scusatemi…!!

Vi ringrazio anticipatamente!!

2 Risposte

  • Re: Gestione db (server + client)

    07/03/2023 - SunnyBear ha scritto:


    Un server dove gira l'applicazione, poi ci sono N client che si interagiscono tramite pagina HTML al server (sia rete locale, ma anche da web).

    Così come è descritta, sembrerebbe trattarsi di una applicazione Web.

    07/03/2023 - SunnyBear ha scritto:


    I client non fanno altro che interrogare un db presente sul server

    I client non possono fare nulla: se visualizzano la pagina HTML generata dal server, è il server che recupera i dati per restituirli già formattati sottoforma di pagina o come pacchetto da elaborare per costruire dinamicamente la pagina lato client con JavaScript.

    In ogni caso, al database principale accede il server.

    07/03/2023 - SunnyBear ha scritto:


    diciamo che il client deve restituire alcune informazioni al db server

    E' il server che - come suggerisce il nome stesso - restituisce informazioni al client.
    Il client tutt'al più le invia come richiesta al server.

    07/03/2023 - SunnyBear ha scritto:


    sarebbe possibile che il client memorizzi le informazioni in un db locale temporaneo e successivamente invii le al server

    Se per client intendiamo la pagina Web che gira nel browser, la cosa è possibile ma con molte limitazioni (non puoi usare il database che preferisci), oltre al fatto che l'utente potenzialmente può cancellare i dati temporanei quando vuole.

    07/03/2023 - SunnyBear ha scritto:


    Sarebbe una sorta di backup così nell'eventualità non connettività non si perderebbe il lavoro che ha fatto il client

    Sarebbe più semplice fare in modo che il client salvasse progressivamente le modifiche sul server, inviando i dati relativi, così come si è sempre fatto.

    07/03/2023 - SunnyBear ha scritto:


    Mi piacerebbe così avere un'app che gira in qualsiasi dispositivo e s.o. (mi basterebbe solo il browser) e al tempo stesso memorizza qualche piccola informazione in locale per poi inviarla al server.

    Se parliamo di informazioni limitate, la cosa è possibile, usando IndexedDB, Local/Session Storage e altri strumenti affini, ma come predetto hanno molte limitazioni.

    Ciao! :)

  • Re: Gestione db (server + client)

    Sebbene sia vero che i client non possono accedere direttamente al database principale, possono comunque inviare richieste al server per creare, leggere, aggiornare o eliminare dati dal database. Quindi, in un certo senso, i client possono anche "modificare" il database.

    È corretto che l'uso di un database locale temporaneo nel browser del client ha molte limitazioni e che i dati potrebbero essere persi se l'utente cancella la cache del browser o se ci sono problemi di connessione. Tuttavia, ci sono alcune tecniche, come la sincronizzazione offline, che possono aiutare a mitigare questi problemi.

    Inoltre, ci sono alcune situazioni in cui potrebbe essere utile memorizzare temporaneamente i dati sul client, ad esempio per ridurre il carico sul server o per fornire un'esperienza utente più reattiva. Tuttavia, è importante bilanciare questi vantaggi con i rischi e le limitazioni associati.

    Comunque giusto una idea potrebbe essere questo

    from flask import Flask, request, render_template
    import sqlite3
    
    app = Flask(__name__)
    
    # Connessione al database locale
    conn = sqlite3.connect('client_db.sqlite')
    c = conn.cursor()
    
    # Creazione tabella per memorizzare le informazioni dei client
    c.execute('CREATE TABLE IF NOT EXISTS client_data (id INTEGER PRIMARY KEY AUTOINCREMENT, info TEXT)')
    
    @app.route('/')
    def index():
        return render_template('index.html')
    
    @app.route('/submit', methods=['POST'])
    def submit():
        # Memorizzazione delle informazioni del client nel database locale
        client_info = request.form['info']
        c.execute('INSERT INTO client_data (info) VALUES (?)', (client_info,))
        conn.commit()
    
        # Invio delle informazioni al server
        # ...
    
        return 'Informazioni inviate con successo!'
    
    if __name__ == '__main__':
        app.run()
    
    
Devi accedere o registrarti per scrivere nel forum
2 risposte