Quel est le moyen le plus efficace de rechercher l'existence d'un élément en utilisant SimpleDB? Par exemple, "existe-t-il un utilisateur avec ce code postal"?SimpleDB: Requête efficace pour vérifier l'existence
Répondre
Il n'y a pas vraiment beaucoup d'alternatives. Si l'attribut que vous recherchez n'est pas le nom de l'élément, votre seule alternative est l'utilisation d'un select. Il y a deux approches possibles. Tout d'abord en utilisant le nombre (*)
select count(*) from DomainX where AttributeY='ZValue'
Ou, en utilisant itemName() qui peut avoir des avantages supplémentaires si vous souhaitez récupérer l'élément après avoir vérifié l'existence (bien que vous auriez probablement juste select *
dans ce cas).
select itemName() from DomainX where AttributeY='ZValue'
De plus, il y a la possibilité d'utiliser la limite
select ..... limit 1
Heureusement Amazon fournit une indication quant à ce qui est par la valeur BoxUsage le plus cher retourné par chaque opération SimpleDB. J'ai écrit un petit script pour exécuter chacune des 4 alternatives 25 fois (en tenant compte de l'échauffement de la bibliothèque) et comparer le timing et le BoxUsage pour chacun. Le domaine utilisé contenait environ 4500 éléments avec 4 attributs chacun.
Mon premier passage utilisait un seul prédicat where-clause qui correspondait à plusieurs éléments (11 éléments).
Type of Query | Avg time(s) | Avg BoxUsage
------------------------------------------------------------
count(*) without limit | 0,092 | 0,0000229400
count(*) with limit 1 | 0,092 | 0,0000228616
itemName() without limit | 0,092 | 0,0000140880
itemName() with limit 1 | 0,090 | 0,0000140080
Ma deuxième passe utilisé un seul prédicat clause where qui correspondait à un seul élément
Type of Query | Avg time(s) | Avg BoxUsage
------------------------------------------------------------
count(*) without limit | 0,090 | 0,0000140080
count(*) with limit 1 | 0,091 | 0,0000140080
itemName() without limit | 0,090 | 0,0000140080
itemName() with limit 1 | 0,093 | 0,0000140080
Le temps moyen est pas statistiquement significative depuis et probablement pas tout ce que je fiable réalisé les tests de mon DSL à la maison. Il aurait été plus approprié de tester à partir d'une instance EC2.
Le BoxUsage est cependant intéressant. Suggérer que itemName() est meilleur que count (*) bien que vous deviez prendre en considération si votre requête correspondrait à beaucoup d'éléments (des centaines), auquel cas vous auriez la surcharge du transfert de données dans itemName() cas, mais ce serait moins cher BoxUsage sage. Que l'utilisation de la limite n'affecte pas grandement le BoxUsage n'est pas tout à fait surprenant car il est destiné à la pagination, ce qui signifie que vous pouvez continuer à récupérer plus de résultats en répétant la requête en utilisant le NextMarker.
Si j'où mettre en œuvre une opération Exists()
générique au-dessus de SimpleDB, je serais probablement aller avec
select itemName() from X where Y='Z' limit 1
Si la performance/coût est sensible, vous devez effectuer theese Vous-même dans votre environnement.
- 1. dialecte SimpleDB pour NHibernate
- 2. Requête SimpleDB sur le nom d'attribut
- 3. pagination dans SimpleDB
- 4. amazon simpleDB
- 5. moyen efficace pour vérifier les domaines parqués?
- 6. Requête pour définir une valeur pour tous les éléments dans Amazon SimpleDB
- 7. Méthode efficace pour vérifier si DataTable a une ligne
- 8. Méthode efficace pour implémenter cette requête ActiveRecord
- 9. requête efficace pour plusieurs à plusieurs table
- 10. AWS SimpleDB - SignatureDoesNotMatch - PCL pour l'application Xamarin
- 11. Rédiger une requête efficace
- 12. requête la plus efficace?
- 13. Amazon SimpleDB se compter
- 14. Qu'est-ce qu'une requête Entity Framework efficace pour vérifier si les utilisateurs sont amis?
- 15. sql efficace jointure requête
- 16. Signature SimpleDB HMAC
- 17. Amazon Resource Name (ARN) pour AWS SimpleDB
- 18. Amazon SimpleDB pour Windows Phone 7
- 19. Est-ce que amazon simpleDB service approprié pour vérifier l'état d'essai d'une application Android?
- 20. SimpleDB Sélectionnez VS DynamoDB Scan
- 21. Accès direct au client SimpleDB
- 22. Méthode efficace pour vérifier quel polygone est situé à l'intérieur
- 23. SimpleDB avec Rails
- 24. SimpleDB comme commentant databasae
- 25. SimpleDB vs Tokyo Cabinet
- 26. Grails et Amazon SimpleDB
- 27. Amazon SimpleDB à l'échelle
- 28. efficace vérifier si datagridview a été modifié
- 29. AWS SimpleDB contient la valeur
- 30. mysql - Alternative/efficace/optimisé requête