Mis à jours 26 novembre 2017 Depuis 2006, Amazon propose à ses clients des infrastructures informatiques via Amazon Web Services (AWS). AWS a pour objectif d’utiliser sa propre infrastructure pour fournir les blocs de construction aux autres organisations. Elastic Compute Cloud (EC2) est une offre AWS qui vous permet pour faire tourner des serveurs virtuels comme vous avez besoin de la puissance de calcul et les éteindre lorsque vous avez terminé. Amazon Simple Storage Service (S3) fournit un stockage de fichiers rapide et illimité pour le web. Amazon SimpleDB est un service conçu pour compléter EC2 et S3, mais le concept n’est pas aussi facile à comprendre que « serveurs supplémentaires » et « stockage supplémentaire ». Cet article couvrira les concepts de SimpleDB et discutera de la façon dont il se compare à d’autres services.
Qu’est-ce que SimpleDB ?
SimpleDB est un service Web fournissant un stockage de données structuré dans le cloud et soutenu par des clusters de serveurs de bases de données gérés par Amazon. Les données ne requièrent aucun schéma et sont stockées de manière sécurisée dans le cloud. Il existe une fonction de requête et toutes les valeurs de données que vous stockez sont entièrement indexées. En accord avec les autres services Web d’Amazon, il n’y a pas de frais minimum, et vous êtes uniquement facturé pour votre utilisation réelle.
Ce que SimpleDB ne l’est pas
Le nom “SimpleDB” pourrait vous faire croire que c’est juste comme les systèmes de gestion de base de données relationnelle (SGBDR), mais plus simple à utiliser. À certains égards, c’est vrai, mais il ne s’agit pas simplement de simplifier l’utilisation simplifiée des bases de données. SimpleDB vise à simplifier la tâche beaucoup plus difficile sur la création et la gestion d’un cluster de base de données qui est tolérante aux pannes face à de multiples défaillances, répliqué dans les centres de données et offre des niveaux élevés de disponibilité.
Une idée fausse qui semble être très répandue auprès des gens qui viennent d’apprendre à propos de SimpleDB est l’idée que la migration d’un SGBDR vers SimpleDB résoudra automatiquement les problèmes de performance de votre base de données. La performance est certainement une partie importante de l’équation lorsque vous essayez d’évaluer des bases de données. Malheureusement, pour certaines personnes, la vitesse est le début et la fin du processus de pensée. Il peut être tentant de voir l’un des nouveaux services de base de données hébergés comme une solution miracle lorsqu’il est offert par une méga-entreprise comme Microsoft, Amazon ou Google. Mais la vérité est que SimpleDB ne va pas résoudre vos problèmes de vitesse existants. Le service existe pour résoudre un ensemble de problèmes entièrement différent. Les lectures et les écritures ne sont pas très rapides. Elles sont censées être “assez rapides”. Il est tout à fait possible qu’AWS augmente les performances du service au fil du temps, en fonction des commentaires des utilisateurs. Mais SimpleDB ne sera jamais aussi rapide qu’une base de données autonome fonctionnant sur du matériel rapide. SimpleDB a un but différent.
Les clusters de bases de données robustes qui répliquent des données sur plusieurs centres de données ne constituent pas une solution de stockage de données généralement facile à mettre en place. C’est une entreprise longue et coûteuse. Même dans les organisations qui ont l’expertise de l’administrateur de bases de données (DBA) et qui utilisent plusieurs centres de données, cela prend toujours beaucoup de temps. Il est assez coûteux que vous ne le voudriez pas à moins qu’il y ait un besoin commercial quantifiable. SimpleDB offre un stockage de données avec ces fonctionnalités sur une base de répartition.
Bien sûr, profiter de ces fonctionnalités n’est pas sans inconvénient. SimpleDB est un environnement modérément restrictif et ne convient pas à de nombreux types d’applications. Il existe diverses restrictions et limitations concernant la quantité de données pouvant être stockées et transférées, et la bande passante réseau que vous pouvez consommer.
Données sans schéma
SimpleDB diffère des bases de données relationnelles où vous devez définir un schéma pour chaque table de base de données avant de pouvoir l’utiliser et où vous devez modifier explicitement ce schéma avant de pouvoir stocker vos données différemment. Dans SimpleDB, il n’y a pas d’exigence de schéma. Bien que vous deviez toujours tenir compte du format de vos données, cette approche a l’avantage de vous libérer du temps nécessaire pour gérer les modifications de schéma. L’absence de schéma signifie qu’il n’y a pas de type de données requis ; toutes les valeurs de données sont traitées comme des données de caractères de longueur variable. Par conséquent, il n’y a littéralement pas beaucoup de choses à faire si vous voulez ajouter un nouveau champ à une base de données existante. Vous ajoutez simplement le nouveau champ à n’importe quel élément de données. Il n’y a aucune règle qui oblige chaque élément de données à avoir le même des champs. Les inconvénients d’une base de données sans schéma incluent l’absence de vérification automatique de l’intégrité dans la base de données et un fardeau accru sur l’application pour gérer la mise en forme et les conversions de type.
Stocké en toute sécurité dans le cloud
Les données que vous stockez dans SimpleDB sont disponibles à la fois sur Internet et (avec moins de latence) depuis EC2. La sécurité de ces données est très importante pour de nombreuses applications, tandis que la sécurité du compte de services Web sous-jacent doit être importante pour tous les utilisateurs.
Pour protéger ces données, tous les accès à SimpleDB, qu’ils soient en lecture ou en écriture, sont protégés par les informations d’identification de votre compte. Chaque demande doit porter la signature numérique correcte et autorisée, sinon elle est rejetée avec un code d’erreur. La sécurité du compte, la transmission des données et le stockage des données sont importants.
Facturé uniquement pour une utilisation réelle
Conformément à la philosophie AWS de paiement par répartition, SimpleDB dispose d’une structure de tarification qui comprend les frais de stockage de données, de transfert de données et d’utilisation du processeur. Il n’y a pas de frais de base et il n’y a pas de minimum. La facturation mensuelle d’Amazon pour SimpleDB a un niveau d’utilisation gratuit qui couvre le premier gigaoctet (Go) de stockage de données, le premier Go de transfert de données, et les 25 premières heures d’utilisation du processeur chaque mois. Les coûts de transfert de données au-delà de ce libre niveau ont historiquement été à égalité avec les prix S3, alors que les coûts de stockage ont toujours été un peu plus élevés. Consultez le site Web d’AWS pour obtenir des informations sur les prix actuels.
Domaines, Eléments et Paires d’Attributs
Le niveau supérieur de stockage de données dans SimpleDB est le domaine. Un domaine est à peu près analogue à une table de base de données. Vous pouvez créer et supprimer des domaines si nécessaire. Il n’existe aucune option de configuration à définir sur un domaine ; le seul paramètre que vous pouvez définir est le nom du domaine.
Toutes les données stockées dans un domaine SimpleDB prennent la forme de paires d’attributs nom-valeur. Chaque paire d’attributs est associée à un élément, qui joue le rôle d’une ligne de table. Le nom de l’attribut est similaire au nom d’une colonne de base de données, mais contrairement aux lignes de base de données qui doivent toutes avoir des colonnes identiques, les éléments SimpleDB peuvent contenir des noms d’attribut différents. Il permet également l’ajout sans problème de nouveaux champs de données dans le futur.
Attributs à plusieurs valeurs
Il est possible que chaque attribut n’ait pas seulement une valeur, mais un tableau de valeurs. Par exemple, une application qui permet le balisage d’un utilisateur peut utiliser un seul attribut nommé “balises” pour contenir autant ou aussi peu de balises que nécessaire pour chaque élément. Vous n’avez pas besoin de modifier une définition de schéma pour activer les attributs à valeurs multiples. Tout ce que vous devez faire est d’ajouter un autre attribut à un élément et d’utiliser le même nom d’attribut avec une valeur différente. Cela vous donne une flexibilité dans la façon dont vous stockez vos données.
Requêtes
SimpleDB est principalement un magasin de valeurs-clés, mais il dispose également de fonctionnalités de requête utiles. Un langage de requête SQLstyle est utilisé pour émettre des requêtes sur la portée d’un seul domaine. Un sous-ensemble de la syntaxe de sélection SQL est reconnu. Voici un exemple d’instruction de sélection SimpleDB :
SELECT * FROM products WHERE rating > '03' ORDER BY rating LIMIT 10
Vous mettez un nom de domaine – dans ce cas, products – dans la clause FROM où un nom de table devrait normalement être. La clause WHERE reconnaît une douzaine d’opérateurs de comparaison, mais un nom d’attribut doit toujours être sur le côté gauche de l’opérateur et une valeur littérale doit toujours être sur la droite. Il n’y a pas de comparaison relationnelle entre les attributs autorisés ici. Donc, ce qui suit n’est pas valide :
SELECT * FROM users WHERE creation-date = last-activity-date
Toutes les données stockées dans SimpleDB sont traitées comme des données de chaîne simples. Il n’y a pas d’index explicites à gérer ; chaque valeur est automatiquement indexée lorsque vous l’ajoutez.
La haute disponibilité
La haute disponibilité est un avantage important sur l’utilisation de SimpleDB. Il existe de nombreux types de défaillances pouvant survenir avec une solution de base de données qui affecteront la disponibilité de votre application. Lorsque vous exécutez vos propres serveurs de base de données, vous pouvez utiliser différentes configurations.
Pour quantifier les avantages de disponibilité que vous obtenez automatiquement avec SimpleDB, considérons la manière dont vous pouvez obtenir les mêmes résultats en utilisant la réplication pour vos propres serveurs de base de données. A l’extrémité la plus facile du spectre se trouve un schéma de réplication de base de données maître-esclave, où la base de données maître accepte les mises à jour du client et une deuxième base de données agit en tant qu’esclave et extrait toutes les mises à jour du maître. Cela élimine le point de défaillance unique. Si le maître tombe en panne, l’esclave peut prendre le relais. La gestion de ces échecs (lorsque vous n’utilisez pas SimpleDB) nécessite un travail supplémentaire pour échanger des adresses IP ou des entrées de nom de domaine, mais ce n’est pas très difficile.
Le passage à l’extrémité la plus difficile du spectre de réplication autogéré vous permet de maintenir la disponibilité en cas de panne impliquant plus d’un serveur. Il y a plus de travail à faire si vous devez gérer deux serveurs en panne dans un court laps de temps, ou un problème de serveur et une panne de réseau, ou un problème qui affecte l’ensemble du centre de données. La création d’une solution de base de données qui maintient la disponibilité pendant ces défaillances plus sévères nécessite un certain niveau d’expertise. Il peut être simplifié grâce à des services de cloud computing comme EC2 qui facilitent le démarrage et la gestion de serveurs dans différents lieux géographiques. Cependant, quand il y a beaucoup de pièces mobiles, la tâche reste longue. Cela peut aussi être coûteux.
Lorsque vous utilisez SimpleDB, vous bénéficiez d’une haute disponibilité avec vos données répliquées automatiquement vers différents emplacements géographiques. Vous n’avez pas besoin d’effectuer de travail supplémentaire ni de devenir un expert de la haute disponibilité ou des spécificités des techniques de réplication du produit de base de données d’un fournisseur. Ceci est l’énorme avantage non pas parce que ce niveau d’expertise ne vaut pas la peine d’être atteint, mais parce qu’il existe toute une catégorie d’applications qui, auparavant, ne pouvait justifier cet effort.
Cohérence de base de données
L’une des conséquences de la réplication des mises à jour de bases de données sur plusieurs serveurs et centres de données est la nécessité de décider quelles garanties de cohérence seront conservées. Une base de données s’exécutant sur un seul serveur peut facilement maintenir une cohérence forte. Avec une cohérence forte, après une mise à jour, chaque accès ultérieur à la base de données par chaque client reflète le changement et l’état précédent de la base de données qui n’est jamais vu.
Cela peut être un problème pour un cluster de base de données si l’objectif du cluster est d’améliorer la disponibilité. S’il existe une base de données principale (maître) qui réplique les mises à jour des bases de données esclaves, une forte cohérence exige que les esclaves acceptent la mise à jour en même temps que le maître. Tout accès à la base de données serait alors fortement cohérent. Cependant, dans le cas d’un problème empêchant la communication entre le maître et un esclave, le maître ne serait pas en mesure d’accepter les mises à jour car le fait de ne pas le synchroniser avec un esclave romprait la garantie de cohérence. Si la base de données rejette les mises à jour au cours de scénarios de problèmes simples, elle annule la disponibilité. En pratique, la réplication n’est souvent pas effectuée de cette manière. Une solution courante à ce problème consiste à autoriser uniquement la base de données maître à accepter les mises à jour et à le faire sans contact direct avec les bases de données esclaves. Après que le maître a effectué chaque transaction, les esclaves reçoivent la mise à jour en temps quasi réel. Cela revient à assouplir la garantie de cohérence. Si les clients se connectent uniquement à l’esclave lorsque le maître tombe en panne, la cohérence affaiblie s’applique uniquement à ce scénario.
SimpleDB affiche l’option de consistance éventuelle ou de cohérence forte pour chaque requête de lecture. Avec une cohérence éventuelle, lorsque vous soumettez une mise à jour à SimpleDB, le serveur de base de données traitant votre demande transmet la mise à jour aux autres serveurs de base de données. La réplication continue en arrière-plan tandis que les autres requêtes sont traitées. La période nécessaire à la mise à jour de toutes les répliques est appelée la fenêtre de cohérence éventuelle. Cette fenêtre de cohérence éventuelle est généralement petite. AWS n’offre aucune garantie sur cette fenêtre, mais elle est souvent inférieure à une seconde.
Plusieurs choses peuvent rendre la fenêtre de cohérence plus grande. L’une est une charge de requête élevée. Si les serveurs hébergeant un domaine SimpleDB donné sont soumis à une charge importante, le temps nécessaire à la réplication complète est augmenté. En outre, une défaillance réseau ou serveur peut bloquer la réplication jusqu’à ce qu’elle soit résolue. Pour plus de précision, considérez une panne de réseau entre les centres de données hébergeant vos données. Si l’équilibreur de charge SimpleDB parvient à acheminer vos requêtes vers les deux centres de données, vos mises à jour seront acceptées aux deux emplacements. Toutefois, la réplication échouera entre les deux emplacements. Les données que vous récupérez dans l’un ne seront pas cohérentes avec les mises à jour que vous avez appliquées à l’autre. Une fois le problème résolu, SimpleDB terminera la réplication automatiquement.
L’utilisation d’une lecture cohérente élimine la fenêtre de cohérence pour cette requête. Les résultats d’une lecture cohérente refléteront toutes les écritures précédentes. Dans le cas normal, une lecture cohérente n’est pas plus lente qu’une lecture finalement cohérente. Cependant, il est possible que les demandes de lecture cohérentes affichent parfois une latence plus élevée et une bande passante plus faible.
Dimensionner l’ensemble de fonctions SimpleDB
L’API SimpleDB expose un ensemble limité de fonctionnalités. Voici une liste de ce que vous obtenez :
- Vous pouvez créer des domaines nommés dans votre compte. L’allocation initiale vous permet de créer jusqu’à 100 domaines. Vous pouvez demander plus d’allocations sur le site Web AWS.
- Vous pouvez supprimer un domaine existant à tout moment sans d’abord supprimer les données qu’il contient.
- Vous pouvez stocker un élément de données pour la première fois ou pour des mises à jour ultérieures en utilisant un appel à PutAttributes. Lorsque vous émettez une mise à jour, vous n’avez pas besoin de passer l’élément complet ; vous pouvez transmettre uniquement les attributs qui ont changé.
- Il y a un appel par lots qui vous permet de mettre jusqu’à 25 articles à la fois.
- Vous pouvez récupérer les données avec un appel à GetAttributes.
- Vous pouvez rechercher des éléments en fonction de critères sur plusieurs attributs d’un élément.
- Vous pouvez stocker n’importe quel type de données. SimpleDB traite tout cela comme des données de chaîne, et vous êtes libre de le formater comme vous le souhaitez.
- Vous pouvez stocker différents types d’éléments dans le même domaine et les éléments du même type peuvent varier selon les attributs ayant des valeurs.
Avantages de l’utilisation de SimpleDB
Lorsque vous utilisez SimpleDB, vous abandonnez certaines fonctionnalités que vous pourriez avoir, mais en contrepartie, vous obtenez des avantages importants, comme suit :
- Disponibilité – Lorsque vous stockez vos données dans SimpleDB, elles sont automatiquement répliquées sur plusieurs nœuds de stockage et sur plusieurs centres de données dans la même région.
- Simplicité – Il n’y a pas beaucoup de boutons ou de cadrans, et il n’y a pas de paramètres de configuration. Il est donc beaucoup plus difficile de se tirer une balle dans le pied.
- Évolutivité – Le service est conçu pour l’évolutivité et l’accès simultané.
- Flexibilité – Stockez les données dont vous avez besoin de stocker maintenant, et si les exigences changent, stockez-les différemment sans changer la base de données.
- Faible latence dans la même région – L’accès à SimpleDB à partir d’une instance EC2 dans la même région a le temps de latence typique d’un LAN.
- Faible maintenance – La majeure partie de la charge administrative est transférée à Amazon. Elles maintiennent le matériel et le logiciel de la base de données.
Ce que les fonctionnalités de base de données SimpleDB n’ont pas
Un certain nombre de fonctionnalités de base de données communes sont remarquablement absentes sur Amazon SimpleDB. Les programmes basés sur des produits de base de données relationnels reposent généralement sur ces fonctionnalités. Vous devez savoir ce que vous ne trouverez pas dans SimpleDB, comme suit :
- Prise en charge SQL complète – un langage de requête similaire à SQL est pris en charge pour les requêtes uniquement. Toutefois, il ne s’applique qu’aux instructions “select” et présente des différences de syntaxe et d’autres limitations.
- Jointures – Vous pouvez émettre des requêtes, mais il n’y a pas de clés étrangères et pas de jointures.
- Clés primaires auto-incrémentées – Vous devez créer vos propres clés primaires sous la forme d’un nom d’élément.
- Transactions – Il n’y a pas de limites de transactions explicites que vous pouvez marquer ou des niveaux d’isolement que vous pouvez définir. Il n’y a pas de notion de validation ou de restauration. Il existe un certain soutien implicite pour les écritures atomiques, mais cela ne s’applique que dans le cadre de chaque élément écrit.
Fonctionnalité du framework de plus haut niveau
Cette simplicité de ce que SimpleDB offre côté serveur est associée à la simplicité de ce que AWS fournit aux clients SimpleDB officiellement pris en charge. Il existe un mappage un-à-un des fonctions de service aux appels client. Il existe de nombreuses fonctionnalités construit au sommet des primitives SimpleDB de base. En outre, l’inclusion de ces fonctionnalités avancées a déjà commencé avec un certain nombre de clients SimpleDB tiers. Les frameworks de persistance populaires utilisés en tant que couche d’abstraction au-dessus des bases de données relationnelles sont les meilleurs candidats pour cela.
Certaines fonctionnalités normalement incluses dans le serveur de base de données peuvent être écrites dans les clients SimpleDB pour un traitement automatique. Les logiciels clients tiers s’améliorent constamment, et certaines des fonctionnalités suivantes peuvent déjà être présentes ou vous devez les écrire par vous-même :
- Formater les données – Les entiers, les flottants et les dates nécessitent une mise en forme spéciale dans certains cas.
- Mapper les objets – Il peut être pratique de mapper des objets de langage de programmation aux attributs SimpleDB.
- Partitionner (Sharder) – Le domaine est l’unité de base de l’extensibilité horizontale dans SimpleDB. Cependant, il n’existe aucun support explicite pour la distribution automatique des données entre les domaines.
- Intégration du cache : le cache est un aspect important de nombreuses applications et la mise en cache d’objets de données populaires est une optimisation bien comprise. La mise en cache configurable qui est bien intégrée avec un client SimpleDB est une fonctionnalité importante.
Limites de service
Il y a quelques limitations sur ce que vous êtes autorisé à faire avec SimpleDB. La plupart d’entre elles sont des restrictions de taille et de quantité. Il existe une philosophie sous-jacente selon laquelle des unités de travail petites et rapidement entretenues offrent la meilleure opportunité pour l’équilibrage de charge et le maintien de niveaux de service uniformes. AWS conserve une liste actualisée des limitations de service dans le dernier Guide du développeur SimpleDB en ligne sur le site Web AWS. Ces limites sont les suivantes :
- Stockage maximum par domaine : 10 Go
- Valeurs d’attribut maximum par domaine : 1 milliard
- Domaines maximum initiaux par compte : 100
- Valeurs d’attribut maximum par élément : 256
- Longueur maximale du nom de l’élément, du nom de l’attribut ou de la valeur : 1024 octets
- Temps d’exécution maximum de la requête : 5 secondes
- Résultats maximum de la requête : 2500
- Taille maximale de la réponse à une requête : 1 Mo
- Comparaisons maximales par requête : 20
Ces limites peuvent sembler restrictives par rapport à la nature illimitée des tailles de données que vous pouvez stocker dans d’autres offres de base de données. Cependant, il y a deux choses à garder à l’esprit au sujet de ces limites. Premièrement, SimpleDB n’est pas un magasin de données polyvalent adapté à tout. Il est spécialement conçu pour stocker de petits morceaux de données. Pour les objets de données plus volumineux que vous souhaitez stocker dans le cloud, il est conseillé d’utiliser Amazon S3. En second lieu, considérons les étapes à suivre avec une base de données relationnelle à des charges plus élevées lorsque les performances commencent à se dégrader. Les recommandations typiques incluent souvent le déchargement du traitement de la base de données, la réduction des requêtes longues et l’application de la normalisation sélective des données. Ces limites permettent d’activer la réplication en arrière-plan efficace et automatique, ainsi que la disponibilité et la simultanéité élevées. Certaines de ces limites peuvent être traitées dans une certaine mesure, mais il n’existe aucune solution pour que SimpleDB soit universellement adapté à tous les besoins de stockage de données.