J'essaie de calculer la taille d'un élément dans dynamoDB et je ne parviens pas à comprendre la définition.
La définition que j'ai trouvée: Une taille d'élément est la somme des longueurs de ses noms et valeurs d'attributs (longueurs binaires et UTF-8). Il est donc utile de garder les noms d'attribut courts.
Cela signifie-t-il que si je mets un nombre dans la base de données, par exemple: 1 cela prend la taille d'un int? un long? un double ? Prendra-t-il le même espace que 100 ou 1000000 ou ne prendra-t-il que la taille du binaire correspondant?
Et quelle est l'informatique pour String?
Est-ce que quelqu'un sait comment le calculer?
Je vous remercie
C'est un sujet non trivial en effet - vous avez déjà cité la définition quelque peu bâclée du modèle de données modèle de données Amazon DynamoDB :
Une taille d'élément est la somme des longueurs de ses noms d'attribut et de ses valeurs (longueurs binaires et UTF-8).
Ceci est détaillé plus loin dans la page à l'intérieur de Types de données Amazon DynamoDB un peu:
Une question similaire à la vôtre a également été posée dans le forum Amazon DynamoDB (voir Nature curieuse du type "Nombre" ) et le réponse de Stefano @ AWS . _ apporte plus de lumière sur le sujet:
- Le type "Nombre" a 38 chiffres de précision Ce sont des décimales réelles chiffres. Donc, cela peut représenter un assez grand nombre, et il n'y a pas de perte de précision.
- Combien d'espace prend une valeur numérique? Pas trop beaucoup. Notre représentation interne étant une longueur variable, la taille est donc en corrélation avec le nombre réel (par rapport au maximum) de chiffres dans la valeur . Les zéros au début et à la fin sont ajustés. [mon accentuation]
_ { Le post suivi de Christopher Smith } _ présente de manière plus détaillée les conséquences qui en résultent pour la consommation de stockage et son calcul, conclut-il:
L'API existante fournit très peu d'informations sur le stockage consommation, même si cela fait partie (certes, pas que significatif) de la facturation. La seule information est l'agrégat taille de la table, et même ces données sont potentiellement désynchronisées pendant des heures.
Bien qu'Amazon n'expose pas encore ses données de facturation via une API , ils ajouteront éventuellement une option permettant de récupérer des informations concernant la taille de l'élément dans l'API DynamoDB à un moment donné, comme suggéré par Christopher.
J'ai trouvé cette réponse dans le forum des développeurs Amazon avec Clarence @ AWS:
par exemple:-
"Item":{
"time":{"N":"300"},
"feeling":{"S":"not surprised"},
"user":{"S":"Riley"}
}
afin de calculer la taille de l'objet ci-dessus:
La taille d'élément est la somme des longueurs des noms d'attributs et des valeurs, interprétées comme des caractères UTF-8. Dans l'exemple, le nombre d'octets de L'élément est donc la somme de
Time : 4 + 3
Feeling : 7 + 13
User : 4 + 5
Qui est 36
Pour la définition formelle, voir: http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/WorkingWithDDItems.html
Vous pouvez utiliser l'algorithme pour calculer la taille d'un élément DynamoDB dans le backend de stockage DynamoDB pour Titan DynamoDBDelegate class.
La taille d’un élément est la somme de la taille de tous ses attributs, y compris les attributs de hachage et de clé de plage . Les attributs eux-mêmes ont un nom et une valeur. Le nom et la valeur contribuent tous deux à la taille d’un attribut . Les noms sont dimensionnés de la même manière que les valeurs de chaîne. Toutes les valeurs sont dimensionnées différemment en fonction de leur type de données.
Si les détails vous intéressent, lisez cet article de blog .
Sinon, j'ai également créé un Calculateur de taille d'élément et de capacité consommée DynamoDB qui détermine avec précision la taille des éléments.
Les nombres sont facilement le type le plus compliqué de DynamoDB. AWS ne documente pas publiquement comment déterminer le nombre d'octets contenus dans un nombre. Ils disent que c'est pour qu'ils puissent modifier la mise en œuvre interne sans que personne ne soit lié à celle-ci. Ce qu'ils disent, cependant, semble simple mais est plus compliqué en pratique.
En gros, cependant, la formule est quelque chose comme 1 octet pour 2 chiffres significatifs, plus un octet supplémentaire pour les nombres positifs ou 2 pour les nombres négatifs. Par conséquent, 27
est 2 octets et -27
est 3 octets. DynamoDB arrondira si le nombre de chiffres est inégal. 461
utilisera 3 octets (y compris l’octet supplémentaire). Les zéros de tête et de fin sont coupés avant le calcul de la taille.
Une approximation de la quantité occupée par un élément dans votre table DynamoDB consiste à faire une requête get avec la bibliothèque boto3.
Ce n’est pas une solution exacte de la taille d’un élément, mais elle vous aidera à vous faire une idée. Lorsque vous effectuez une batch_get_item(**kwargs)
, vous obtenez une réponse incluant la ConsumedCapacity
sous la forme suivante:
....
'ConsumedCapacity': [
{
'TableName': 'string',
'CapacityUnits': 123.0,
'ReadCapacityUnits': 123.0,
'WriteCapacityUnits': 123.0,
'Table': {
'ReadCapacityUnits': 123.0,
'WriteCapacityUnits': 123.0,
'CapacityUnits': 123.0
},
'LocalSecondaryIndexes': {
'string': {
'ReadCapacityUnits': 123.0,
'WriteCapacityUnits': 123.0,
'CapacityUnits': 123.0
}
},
'GlobalSecondaryIndexes': {
'string': {
'ReadCapacityUnits': 123.0,
'WriteCapacityUnits': 123.0,
'CapacityUnits': 123.0
}
}
},
]
...
À partir de là, vous pouvez voir la quantité d’unités de capacité utilisée et extraire une taille approximative de l’article. Évidemment, cela est basé sur votre configuration du système en raison du fait que:
Une unité de demande de lecture représente une demande de lecture fortement cohérente, ou deux demandes de lecture éventuellement cohérentes, pour un élément d'une taille maximale de 4 Ko. Les demandes de lecture transactionnelle nécessitent 2 unités de demande de lecture pour effectuer une lecture pour des éléments allant jusqu'à 4 Ko. Si vous devez lire un élément supérieur à 4 Ko, DynamoDB a besoin d'unités de demande de lecture supplémentaires. Le nombre total d'unités de demande de lecture requises dépend de la taille de l'élément et de la nécessité d'une lecture cohérente ou cohérente.