Il nostro team ha un'idea di implementare un semplice DSL dichiarativo che consenta agli utenti di interrogare il modello di dominio dell'azienda tramite un'unica interfaccia senza preoccuparsi di quali microservizi specifici chiamare per ottenere parti specifiche dei dati e come collegarli e combinarli.
La sintassi suggerita è basata su SQL, ma:
- È molto più limitato: nessun raggruppamento o aggregazione, nessuna subquery esplicita, nessuna funzione ecc.
- I join non possono essere specificati e sono solo impliciti in base allo schema predefinito (entità e relazioni).
Esempio:
SELECT entityTypeOne.name, entityTypeTwo.value, entityTypeTwo.date
WHERE entityTypeOne.name LIKE 'Sample%'
AND entityTypeTwo.date BETWEEN (2015-05-01, 2015-05-31)
Risultato previsto:
╔════════╦═══════╦════════════╗
║ name ║ value ║ date ║
╠════════╬═══════╬════════════╣
║ London ║ 1000 ║ 01/05/2015 ║
║ London ║ 2000 ║ 02/05/2015 ║
║ London ║ 3000 ║ 03/05/2015 ║
║ Moscow ║ 2000 ║ 02/05/2015 ║
║ Moscow ║ 9000 ║ 05/05/2015 ║
║ Tokyo ║ 1000 ║ 30/05/2015 ║
╚════════╩═══════╩════════════╝
Lo schema di relazione entità soggiacente sa che le entità sono correlate in questo modo: entityTypeOne.id = entityTypeTwo.parentId
che crea un'unione implicita.
Il "motore di query" dovrebbe sapere che per prima cosa interrogherà il microservizio entityTypeTwo che applica il filtro dell'intervallo di date sul server, quindi il
I problemi che vediamo attualmente:
- Rappresenta lo schema delle relazioni oggettuali.
- Capire l'ordine ottimale di interrogazione.
- Denormalizzare i dati risultanti.
Mi chiedevo se questo è un problema noto e se ci sono degli algoritmi da controllare (forse qualcosa dalla teoria dei grafi)?
Questa è la cosa più vicina che ho trovato finora:
Che cos'è una query eterogenea?
Se semplifica le cose, possiamo supporre che i microservizi stiano rivelando dati via OData.