Sto guardando Amazon DynamoDB in quanto sembra che toglie tutto il fastidio di mantenere e ridimensionare il server del database. Attualmente sto usando MySQL e mantenere e scalare il database è un mal di testa completo.Come si esegue una query su DynamoDB?
Ho esaminato la documentazione e sto facendo fatica a cercare di capire come strutturare i dati in modo che possano essere recuperati facilmente.
Sono totalmente nuovo ai database NoSQL e non relazionali.
Dalla documentazione Dynamo suona come è possibile interrogare solo un tavolo sulla tasto cancelletto primaria, e la chiave primaria gamma con un numero limitato di operatori di confronto.
Oppure è possibile eseguire una scansione completa della tabella e applicare un filtro. Il problema è che analizzerà solo 1Mb alla volta, quindi probabilmente dovresti ripetere la scansione per trovare il numero X di risultati.
Mi rendo conto che queste limitazioni consentono loro di fornire prestazioni prevedibili, ma sembra che rendano davvero difficile ottenere i dati. Inoltre, eseguire le scansioni complete della tabella sembra come se fosse davvero inefficiente e diventerebbe meno efficiente nel tempo man mano che la tabella cresce.
Per istanza, dire che ho un clone di Flickr. Il mio tavolo Immagini potrebbe essere simile:
- ID immagine (Numero, primaria Hash Key)
- Aggiunto (Numero, Chiave primaria Range)
- ID utente (String)
- Tag (String Set)
- ecc
Quindi, utilizzando interrogazione vorrei essere in grado di elencare tutte le immagini degli ultimi 7 giorni e limitarla a un numero X di risultati abbastanza facilmente.
Ma se volessi elencare tutte le immagini da un utente particolare avrei bisogno di fare una scansione completa della tabella e filtrare per nome utente. Lo stesso vale per i tag.
E poiché è possibile eseguire la scansione solo 1Mb in un momento potrebbe essere necessario fare più scansioni per trovare un numero X di immagini. Inoltre, non vedo un modo per fermarsi facilmente al numero X di immagini. Se stai cercando di afferrare 30 immagini, la prima scansione potrebbe trovare 5, e il secondo potrebbe trovare 40.
Devo questo diritto? È fondamentalmente un trade-off? Ottieni prestazioni del database predicibili davvero rapide, praticamente senza manutenzione. Ma il compromesso è che hai bisogno di costruire molta più logica per gestire i risultati?
O sono completamente fuori base qui?
Ok questo ha senso. Come faresti qualcosa come i tag? La chiave primaria sarebbe il nome del tag e quindi la chiave intervallo sarebbe l'ID immagine? Suppongo che la chiave primaria non possa essere un set di stringhe. – chriserwin
Suona bene, ma non ho familiarità con i dettagli di DynamoDB - ho invece lavorato con Cassandra. – DNA
Quando interrogo DynamoDB da zend per la prima volta, ci vogliono 3 secondi. e quindi ci vuole meno di un secondo per eseguire altre query. Quale può essere la ragione di questo? – keen