Miglior schema OOP da utilizzare per la creazione di un'API SQL da riga di comando per un datastore proprietario basato su JSON

1

Abbiamo bisogno di creare uno strumento da riga di comando SQL per interrogare un datastore proprietario basato su json. Userò java. Qualche suggerimento sul modello di progettazione OOP primario che dovrei usare per creare questa API?

Ho pensato di utilizzare il pattern builder nel backend che avrebbe composto i nodi json in base alle istruzioni create dal builder ma che non sembra molto innovativo per questo caso d'uso.

Potresti suggerire altri pattern che ritieni siano più utili per questo caso d'uso? Inoltre, si prega di fornire il motivo per cui si ritiene che il modello particolare si applica.

    
posta Tazo Man 15.10.2014 - 14:45
fonte

3 risposte

1

In pratica stai scrivendo un compilatore, che si traduce da SQL in qualunque cosa capisca il tuo datastore. Alla fine, probabilmente avrai le seguenti parti:

  • un parser che prende SQL e produce un Abstract Syntax Tree
  • un gruppo di visitatori che eseguono analisi semantiche e / o riscrivono su AST
  • un interprete che alla fine esegue la query (elaborata) contro il datastore
  • un REPL che legge input e formatta l'output

Ma prima ancora di iniziare l'implementazione, dovresti considerare che SQL è definito sulle relazioni (tabelle), che sono fondamentalmente diverse dalle raccolte di documenti. Primo, ogni riga in una tabella ha le stesse colonne di tutte le altre righe in quella tabella e nient'altro. Secondo, ogni riga è una tupla piatta, mentre un documento è un albero.

Se fossi in te, per prima cosa risolverei questo problema di mappatura prendendo qualcosa come PostgreSQL, definendo le tabelle che ti aspetti di avere, e poi risolvendo come mappare i tuoi dati in dette tabelle (eseguendolo effettivamente). Puoi usare il risultato come prototipo per chiunque desideri avere SQL, ti darà alcune idee su come implementare il compilatore, perché la semantica sarà nota e avrai un solido riferimento per scopi di test / verifica.

Si può anche finire per decidere che copiare i dati su un RDBMS reale è abbastanza buono; Le query SQL sono una cosa abbastanza complessa da implementare in modo efficiente, con join, sottoquery, aggregazioni, proiezioni e quant'altro. È ancora più difficile se devi farlo "dall'esterno" dell'archivio dati.

    
risposta data 12.02.2015 - 17:17
fonte
-1

Il pattern Command è solitamente usato in queste situazioni. È possibile creare facilmente un'implementazione per ciascun comando SQL.

Suggerirei di esaminare i framework CLI come Spring Shell o Commons CLI.

    
risposta data 15.10.2014 - 15:00
fonte
-1

In primo luogo Adattatore per adattare i comandi del datastore nativo al dialetto SQL.

IMHO ti consiglierei di esporre le API SQL in tal caso. È meglio fornire comandi di tipo datastore nativo (eventualmente integrati in qualche modo) supportati dagli sviluppatori del datastore. Semplicemente: crei costi generali onerosi che non generano molto valore?

    
risposta data 12.02.2015 - 15:41
fonte

Leggi altre domande sui tag