Questa domanda è nel contesto di un'applicazione server - un'API che alimenta i dati ai suoi clienti.
Ecco l'ovvio: se ho alcuni dati, posso cercare e filtrare su quei dati, tuttavia, per favore. Diciamo che ho alcuni dati con la seguente struttura di base:
[
{
name: 'Paul';
location: [51.6689134, -0.15818313],
age: 29,
gender: m,
},
{
name: 'Emma';
location: [52.53499242, 0.75317249],
age: 34,
gender: f,
},
{
name: 'James';
location: [50.8162756, -3.08500886],
age: 27,
gender: m,
},
{
name: 'Alison';
location: [48.80648622, -0.60906778],
age: 41,
gender: f,
},
...
]
Dato che sono il proprietario del codice lato server, posso implementare le opzioni di filtro nella mia API in base a uno qualsiasi di questi campi, ad esempio per recuperare solo le donne, o sopra gli anni '40, o qualsiasi altra cosa, nessun problema.
Tuttavia, ecco la sfida: come posso esporre un'API per consentire agli sviluppatori di creare filtri personalizzati usando i miei dati? Ad esempio, qualcuno potrebbe voler creare un filtro per recuperare solo record di persone il cui nome è lungo esattamente 4 caratteri, o la cui posizione si trova entro un raggio di 1 miglio del punto X - in pratica, tutto va bene. Non saprò che tipo di filtri creativi verranno creati dalla gente. Dato che mi aspetto che questi filtri vengano creati dagli sviluppatori, la loro implementazione potrebbe richiedere un po 'di programmazione. Tuttavia, loro (o I) devono essere in grado di rendere pubblici questi filtri in modo che anche gli utenti medi possano utilizzarli - proprio come un sistema di plugin.
Ecco uno scenario di esempio per aiutare con la descrizione precedente:
- Ho una directory di persone, con la struttura dei dati sopra.
- Ho un sito web in cui le persone possono cercare i miei dati in base ad alcuni filtri di base che offro immediatamente.
- Espongo un'API, che consente agli sviluppatori di creare i propri filtri personalizzati.
- Uno sviluppatore utilizza la mia API per implementare un filtro per abbinare record di persone in cui il nome della persona è N caratteri (N essendo un parametro)
- Un utente normale viene sul mio sito Web e utilizza il filtro personalizzato creato dallo sviluppatore per cercare persone il cui nome è lungo esattamente 4 caratteri.
EDIT 1: i filtri personalizzati possono avere dipendenze esterne, ad es. potrebbe essere necessario utilizzare un'API esterna per determinare l'origine di un nome, al fine di trovare persone con nomi italiani.
Due cose importanti:
- Prestazioni ed efficienza del sistema
- Facilità d'uso per gli utenti regolari
Da un punto di vista architettonico, come implementeresti un simile sistema?
MODIFICA 2
Capisco che questa non è una sfida banale, e che potrebbe non esserci nemmeno una soluzione, a causa di limitazioni tecniche. Tuttavia, credo anche che potrebbe esserci una soluzione intelligente in agguato nell'ombra.
Giusto per chiarire, il set di dati può avere un massimo di 2-3 milioni di record (e sarebbe bello consentire i filtri personalizzati a quel livello), ma se necessario, penso che sarò in grado di ridurre il set di dati ricercabili significativamente fino ad un massimo di circa 1000 voci, prima di colpire qualsiasi filtro personalizzato.