2016-06-06 14 views
6

Stiamo lavorando a un'applicazione che verrà offerta sia come soluzione desktop basata su Web sia come piattaforma multipiattaforma tramite Electron.Database locale basato su file per un'applicazione Electron

A causa dei requisiti del cliente, il client desktop non può utilizzare "il cloud" per archiviare i dati; tutti i dati devono essere memorizzati nella macchina locale o, ancora meglio, l'utente deve avere la possibilità di mantenere il database/file di dati su un HDD esterno in modo che un altro utente sulla stessa rete locale possa utilizzare lo stesso file di dati.

Abbiamo guardato a NeDB, PouchDB, ecc., Ma tutti questi utilizzano Web SQL o IndexedDB sul browser stesso per archiviare i dati. NeDB può teoricamente utilizzare il file system ma sembra possibile solo per le app Node Webkit.

Un'altra opzione è ovviamente MongoDB, ma richiede la configurazione di un sito su un server web. Visto come i nostri utenti lo installeranno sulle loro macchine, funzionerà solo per un utente ma renderà molto difficile per loro condividere i dati (nota: assumete utenti con poco know-how tecnico).

  • C'è un modo per forzare NeDB a conservare i dati in un file anziché nel database del browser?
  • In alternativa, qualcuno sa di un database compatto basato su file che funziona bene con electron/node?

Preferirei utilizzare un database NoSQL, ma verranno considerate anche le opzioni dei database SQL basati su file.

+0

Puoi approfondire maggiormente le esigenze relative alla parte "basata sul web" di questo? ccnokes ha ragione con la sua risposta quando ha a che fare con Electron, ma, dalla tua domanda, sembra che tu abbia bisogno di qualcosa che funzioni anche in un browser standard. È giusto? –

risposta

5

Ho una certa esperienza con NeDB in un'app Electron e posso dire che funzionerà sicuramente sul filesystem.

Come inizializzare NeDB (o qualunque sia la scelta del database)? Inoltre, stai inizializzando nel processo principale o di rendering? Se puoi condividerlo, penso che potremmo rintracciare il problema in un problema di configurazione.

Ecco come si avvia NeDB con un archivio dati persistente che salva su disco.

var Datastore = require('nedb') 
    , db = new Datastore({ filename: 'path/to/datafile', autoload: true }); 

Penso MongoDB sta per essere eccessivo per un app Electron (è destinata ad essere davvero un rendimento elevato, database distribuito in esecuzione nel cloud).

Un'altra opzione che è possibile considerare è LevelDB (un archivio di chiavi/valori che può persistere nel file system), molto popolare nella comunità dei nodi. (EDIT 17/04/17 IndexedDB usa LevelDB sotto il cofano, quindi se si va su quella rotta, potrebbe anche semplicemente usarlo)

Un aspetto che valuterò sicuramente attentamente è: quanto sarà difficile questo database sarà pacchetto e distribuire? Come posso integrarlo nel mio sistema di build? Level e NeDB possono essere inclusi semplicemente tramite npm install e qualsiasi compilazione di codice nativo viene gestita senza problemi con node-gyp, che è semplice come si ottiene. Tuttavia, il raggruppamento di Mongo, ad esempio, richiederà del lavoro per ottenere una build funzionante per ogni piattaforma diversa.

+0

Penso che potresti essere su qualcosa qui.Inizializzo il database con un nome di file e 'autoload' ... Il fatto è che usiamo il processo principale di elettrone per inizializzare un'app [Aurelia] (http://aurelia.io), e inizializzo il db dall'Aurelia app. Sono nuovo di Electron, come posso inizializzare NeDB dal processo principale o rederer? E come può quel db essere reso disponibile al resto dell'app? –

+1

@SergiPapaseit inizializzarlo dal file principale o dal renderer con un supporto per il filesystem sarà lo stesso che penso. Per quanto riguarda renderlo disponibile per il resto dell'app ... basta esportarlo da un modulo. Se è stato avviato dal server principale ed è necessario accedervi da un renderer, è possibile utilizzare l'IPC o l'API remota di Electrons. – ccnokes