Come scegliere un modello di dati?

0

Sebbene questa domanda richieda una forma molto stretta e concreta, sono più interessato alle basi concettuali di giustificare un approccio, e di come posso applicarlo al prossimo problema.

Configurazione

Sto scrivendo uno strumento che accetta un elenco di account AWS e facoltativamente, per ciascun account, una lista nera di bucket S3. Gli strumenti passano e fanno cose per ogni account, ma ignorano i bucket nella lista nera.

Lo strumento accetta una configurazione come input:

{
    "accounts": [
        "aws.account.1",
        "my.other.account",
        "aws.account.6"
        ],

    "accountSpecificBlacklists": {
        "aws.account.6": ["my.sqs.enqueue.bucket.high.volume", "my.sqs.audits"],
        "my.other.account": ["sqs.log.testing"]
    },

    "globalBlacklistRegex": "^(critical|restricted|confidential)\..{0,}$",

    "deliveryBucket": "sqs.food.barred",

    "otherParam": "scrubbedValue"
}

La domanda

L'elenco di accounts sopra potrebbe essere una lista come mostrato, o una coppia key:val , con i valori che sono la lista nera associata. Lo strumento verrà quindi informato degli account su cui operare ruotando i tasti della coppia key:val .

per es.

"accountsToBlacklist": {
    "aws.account.1": [],
    "my.other.account": ["sqs.log.testing"],
    "aws.account.6": ["my.sqs.enqueue.bucket.high.volume", "my.sqs.audits"]
}

Inizialmente avevo configurato il modello di dati in quel modo, ma nel caso in cui non ci siano blacklist, finisce per essere un po 'di keys con liste vuote come valori. Sembrava che l'approccio key:val avesse inquinato il modello dei dati, ma non riuscivo a capire perché.

Quale approccio useresti? Perché? Quali sono alcune domande / principi guida che utilizzi per decidere sulle decisioni relative ai modelli di dati?

    
posta Jordan McQueen 13.02.2017 - 21:05
fonte

1 risposta

1

Entrambi sono validi, ma ogni opzione ha i suoi pro e contro; dipende davvero dalla situazione:

Il primo formato è più flessibile , consentendoti di aggiungere ulteriori dettagli in futuro, come un altro elenco "accountSpecificPriority" o qualcosa di simile. È anche compatto QUANDO ti aspetti di avere solo un numero limitato di account con Blacklist non vuote (quando "accountSpecificBlacklist" è molto piccolo). In altre parole, lo useresti quando la presenza di liste nere è un'eccezione, non la regola. Si noti che per recuperare la lista nera per un dato account sarà necessario eseguire una ricerca "accountSpecificPriority", che è un successo in termini di prestazioni proporzionale alla dimensione prevista di tale elenco.

Il secondo formato - quello che utilizza coppie chiave / valore - è più restrittivo : sarebbe difficile associare altri tipi di dati alle blacklist. D'altra parte, è più veloce perché non è necessario eseguire una ricerca solo per sapere se un account ha una blacklist associata o meno: avrai a disposizione queste informazioni a portata di mano, quindi il successo nelle prestazioni non ci sarà più. Pertanto, sia FASTER sia più COMPACT per LARGE quantità di dati con una ALTA percentuale di account con blacklist non vuote .

    
risposta data 14.02.2017 - 00:04
fonte

Leggi altre domande sui tag