17 votes

Requête DynamoDB avec des opérateurs de comparaison

Question sur Amazon AWS DynamoDB.

Existe-t-il des exemples d'utilisation des RangeKeyCondition et des ComparisonOperators tels que CONTAINS, IN, BETWEEN. J'essaie de récupérer des données basées sur une RangeKey composite (concaténée et délimitée). Par exemple, date + auteur + mots-clés pour la table des livres. Supposons que la valeur de hachage soit "livre" dans ce cas (il peut s'agir d'un livre, d'un DVD, d'une vidéo, d'un lien, etc.) Je voudrais sélectionner tous les livres qui contiennent le mot clé "magic" ou tous les livres de l'auteur "John Doe". Un exemple d'enregistrement/article ressemblerait à ceci :

Hash------Range----------------------------------------------------------------- attribute1 ... attributex

livre------2012-1-20~john doe~adventure~magie~voyage----------------description ... quelques trucs

En essayant d'utiliser l'opérateur conditionnel IN ou CONTAINS , j'obtiens l'erreur suivante : objet(CFSimpleXML)20 public '__type' => string 'com.amazon.coral.validate#ValidationException' (length=45) public 'message' => string 'La tentative de contrainte conditionnelle n'est pas une opération indexable'.

Je n'ai pas trouvé d'exemples utilisant ces ComparisonOperators. Toute aide serait grandement appréciée.

Merci.

42voto

Steffen Opel Points 31067

Il est important de comprendre la différence entre les deux API de recherche. Interrogation et analyse dans Amazon DynamoDB :

  • Requête

    Une opération de requête ne recherche que les valeurs des attributs de la clé primaire et soutient un sous-ensemble d'opérateurs de comparaison sur les valeurs des attributs clés à affiner le processus de recherche. Une requête renvoie toutes les données de l'élément pour pour les clés primaires correspondantes (tous les attributs de chaque élément), jusqu'à 1 Mo de données par opération de requête. [...]

    [Pour plus d'informations sur les opérateurs de comparaison disponibles pour les opérations de consultez la section Entrée API pour Query .

    [souligné par moi]

  • Scanner

    Une opération de balayage permet de balayer l'ensemble de la table. Vous pouvez spécifier des filtres pour appliquer aux résultats afin d'affiner les valeurs qui vous sont retournées, après l'analyse complète. Amazon DynamoDB impose une limite de 1 Mo à l'analyse (la limite s'applique avant que les résultats ne soient filtrés). limite s'applique avant que les résultats ne soient filtrés). [...]

    [...] Pour des informations sur chaque opérateur de comparaison disponible pour le scan voir la section Entrée API pour Scan .

Désormais, le sous-ensemble pris en charge pour le RangeKeyCondition:ComparisonOperator de l'API de requête est le suivant exclut CONTAINS et IN qui sont tous deux disponibles dans le cadre de l Scan API cependant, seul l'opérateur de comparaison BETWEEN est disponible dans les deux API.

Cette limitation est très probablement due à des considérations de performance, c'est-à-dire à la prise en charge de l'activité de l'entreprise. CONTAINS irait probablement à l'encontre de l'objectif de DynamoDB, à savoir la prévisibilité des performances et du débit.

Comme toujours avec les solutions NoSQL, vous devrez tenir compte de ces limitations en adaptant la conception de votre application en conséquence, c'est-à-dire en tenant compte à la fois de votre cas d'utilisation et de l'architecture NoSQL spécifique que vous visez.

Bonne chance !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X