2016-06-16 7 views
10

Ho appena scoperto di gunDB e il concetto sembra molto interessante e mi piacerebbe saperne di più su di esso prima di iniziare a valutarlo ulteriormente.Domande specifiche su gunDB come DB standalone per un progetto Cordova

  • Se ho voluto costruire un'applicazione chat come il tutorial, ma implementare chattare camere. Ci sarebbe un modo per i clienti di "iscriversi" solo ad alcune chat room ed evitare di trasferire il contenuto di ogni altra chat room? In che modo ciò influisce sulla persistenza, se non tutti i dati sono sincronizzati con tutti i client? Abbiamo bisogno di eseguire un client speciale (cioè un server?) Che garantisca che tutti i dati siano mantenuti in vita in ogni momento?
  • Per la stessa esercitazione di chat room, se desidero sottoscrivere più chat room, è necessario creare istanze multiple di Gun, ognuna con storage "peer"?
  • Come devono essere gestite le password/gestione utenti/etc in gunDB? Inviando ogni client una copia del DB utente è interessante da un punto di replica , ma da un aspetto di sicurezza, sembra contatore intuitivo.
  • C'è un modo per chiedere alla pistola di sincronizzarsi solo in determinate circostanze, come quando è disponibile una connessione WiFi (si pensi Cordova)?
  • E i dati temporali? C'è un modo nell'app di chat, per l'istanza per dire a gunDB che sono interessato solo ai messaggi futuri e ignorare tutto ciò che è stato creato prima di un certo stato/timestamp (di nuovo per evitare il trasferimento di enormi quantità di dati su un piano dati costoso)?
  • Come mantenere i dati su disco (potenzialmente circolare) in un gunDB e caricare i dati nel DB nel caso in cui si verifichi la necessità?
  • Potete chiedere alla pistola di monitorare due tasti contemporaneamente? Ad esempio, se un cliente ha bisogno di visualizzare i dati della chat e la lista delle cose da fare (entrambe le "chiavi" del tutorial) assumendo che entrambi siano "scrutati".
  • Esiste un tutorial su come utilizzare il mio server per l'archiviazione?
+1

Queste sono tante domande alla volta, sarebbe meglio suddividerle in domande più piccole. – nawfal

risposta

9
  1. chat room. Così come lo chat tutorial ha caricato la "tabella" della chat, puoi semplicemente avere una tabella "stanze". Quindi puoi afferrare solo la stanza che desideri. Dato che la pistola usa lo partials per essere veloce, finirà per caricare solo i dati a cui sei iscritto. Sì, i clienti possono archiviare solo un sottoinsieme dei dati nel loro complesso, tuttavia ciò naturalmente potrebbe influire sui livelli di replica/persistenza. Se sei preoccupato di questo, eseguire un peer "forte" (come un server) è una soluzione facile e perfetta, poiché eseguirà il backup di tutto. (E sfortunatamente, dato che WebRTC presenta problemi *, è comunque necessario eseguire un peer server relay, quindi potrebbe anche essere usato per lo storage).

  2. Istanze multiple. Non è necessario istanziare più istanze pistola per chiave. In realtà, questo è male. È meglio se non lo fai. È possibile, tuttavia, non abbiamo provato questo quanto dovremmo dal momento che non è l'ideale.

  3. Sicurezza/autorizzazione è un argomento molto molto permaloso, quindi questo dipende in modo selvaggio da come si desidera creare l'app. Se si sta per un vero progetto P2P/decentralizzato, è necessario utilizzare la chiave pubblica/privata cryptography and signatures. In modo tale che altri utenti non possano effettivamente leggere i dati anche se potrebbero contribuire al backup dei dati.Tuttavia, se vuoi mantenere le cose semplici e costruire la tua app come la maggior parte delle app sono costruite ... come servizio centralizzato, allora dovresti scrivere sul tuo server proxy. Questa è la stessa tecnica utilizzata dalla maggior parte delle persone durante la creazione di app e GUN può fare la stessa cosa.

  4. WiFi/Dati limitativi di velocità. Purtroppo non è disponibile direttamente in JavaScript, tuttavia sembra che app ibride come quella citata con PhoneGap possano avere accesso a tali informazioni. GUN è progettato per funzionare in scenari come questo poiché è offline prima. Ma come ti interfaccia con le API esterne che ti danno queste condizioni ... è al di fuori della mia esperienza, ma fattibile.

  5. Dati temporali/limitazione del trasferimento dati. Vedi prima la mia risposta sopra, fattibile ma dipendente da API esterne. In termini di domande limitative, sì, sì. A: Stiamo introducendo presto 'cursori lessicali' che consentiranno ai clienti di limitare le risposte, tuttavia probabilmente implementeremo ciascuna delle sue caratteristiche di vincoli in modo incrementale (non essendo stata una priorità enorme per la community, ma la tua partecipazione lo aumenterà!), prima con le corrispondenze di proprietà esatte (pensa come una dichiarazione di selezione SQL - infatti, è ciò che useremo per creare un'estensione di query SQL per gun!), quindi secondo un intervallo lessicale (seleziona proprietà che iniziano con 'a' attraverso 'c') che può essere fatto con intervalli di timestamp, quindi terzo un vincolo di byte (di come inviare solo al massimo 200 byte alla volta). Tuttavia, una cosa ovvia che puoi fare manualmente (non che tu voglia), puoi semplicemente avere un tavolo di stanze, e poi la stanza è una tabella di blocchi, e i blocchi sono una tabella di messaggi. Potenzialmente con la stanza avendo anche un "ultimo" chunk, quindi si potrebbe facilmente accedere alla tua app di chat facendo gun.get('rooms').path('mychatroom').path('last').map().val(function(message){ console.log(message); }); o qualcosa del genere. Ciò ti consentirebbe di controllare esattamente le condizioni che desideri, ma significa anche che devi fare un po 'più di lavoro.

  6. Riferimenti circolari. Fatto già per te, hai tutti i riferimenti circolari che vuoi: è qui che la pistola eccelle grazie alla sua struttura grafica (riferimenti circolari, tabelle, documenti, chiave/valore, qualsiasi cosa).

  7. Sì, la pistola può monitorare più tasti contemporaneamente.

  8. Utilizzare il proprio server per l'archiviazione ... potrebbe significare un paio di cose diverse. Come far funzionare il tuo server pistola? C'è un semplice wrapper per questo: https://www.npmjs.com/package/gun-server. Se vuoi esempi con Express e roba anche quelli sono semplici. Come utilizzare il file system del server distribuito corrente come spazio di archiviazione perché non si desidera utilizzare S3? È possibile utilizzare il driver di livello https://github.com/PsychoLlama/gun-level. Questa risposta?

* WebRTC richiede server STUN/ICE/di segnalazione per avviare la connessione WebRTC. Il che è super fastidioso. Ciò significa che anche se WebRTC è P2P, per connetterti devi passare attraverso alcuni server e questo deve essere soddisfatto per ogni caricamento della pagina. Per questo motivo, per impostazione predefinita, bundle gun con websockets/JSONP deve connettersi a un peer di server relay della pistola (ci sono anche peer di relay della community che le persone possono usare per esperimenti personali, ma è facile gestirli come in punto 4). Di conseguenza, non abbiamo ancora rilasciato un adattatore WebRTC, nonostante il fatto che la pistola WebRTC + sia perfetta - stupidi server STUN/ICE/di segnalazione.

+0

Grazie Marco! Seguirò una volta che avrò avuto la possibilità di sperimentare ancora con lo strumento – Eric

+0

@marknadal Punto 8/Il collegamento su gun-server è buono ma [indica una risorsa di esempio] (https: // www. npmjs.com/package/gun-server)!È ancora _bizarre_ come impostare un peer proprio affinchè gli altri si uniscano al parametro di opzione {peers} ... Un vero esempio di installazione completa (di gun-server) sarebbe un buon punto di riferimento – 1111161171159459134

+0

@ 1111161171159459134. In realtà non mantengo il progetto server-pistola da solo, ma mostri un buon punto. Vuoi sollevarlo come un problema su quel repository? – marknadal

Problemi correlati