Types de données

J’essaye de choisir le bon type de données pour l’indexer.

Pour le montant d’une transaction, j’ai pris le type numeric mais pas sûr que ce soit le plus léger.
Est-ce qu’il peut y avoir des montants à virgule ?
Liste des types numériques

Pour la pubkey d’un compte, est-ce qu’il fait toujours 48 chars ?
Pour le hash d’un bloc, toujours 66 chars ?

@ManUtopiK pour les soldes monétaires il faut impérativement utiliser un bigint, tout est exprimé exclusivement en nombre entiers, nombre entiers qui peuvent être très grands, integer ne suffit pas.

Je ne sais pas, mais je pense que tu ne devrais pas stocker les adresses dans leur représentation SS58, c’est bien trop lourd pour rien. Il te fait utiliser decode adresse pour récupérer les 32 octets sous-jacents: ss58 Formats | polkadot{.js}

Idem c’est trop lourd, pour rien, il faut encoder les 64 caractères hexa en 32 octets, et stocker du binaire, sinon tu prends 2 fois plus de place pour rien…

1 Like

Merci pour tes réponses.
Ok, je vais changer en bigint pour le montant.

Par contre pour les pubkeys, je stock en format text.
J’ai trouvé entre temps qu’il n’y a pas vraiment de différence en postgresql. Voir la tip de la doc ici.
De plus, c’est à mon avis le plus simple pour faire les requêtes.

Cette doc compare les “character types” entre eux. Moi je ne parle pas de character types, mais de binaire. Il me semble que tu devrait plutôt utiliser les binary data types: PostgreSQL: Documentation: 14: 8.4. Binary Data Types

2 Likes

Pour répondre plus précisément à Manu :

  • une pubkey au format binaire est codée sur 32 octets
  • si tu l’exprimes au format ss58, tu l’encodes dans un subset de ASCII sur 48 caractères en ajoutant le préfixe et la checksum, ce qui fait 48 octets, soit 1.5 fois plus de place
  • je ne vois pas bien l’intérêt de cette représentation autrement que pour les humains
    • préfixe : indique la monnaie ciblée, redondance inutile dans notre cas
    • checksum : pour palier au problème de copy/paste raté, pas utile pour une représentation en db
    • base58 : assez compacte, mais pas maximalement, et uniquement utile pour afficher dans une interface au format texte

Donc je conseillerais comme elois de stocker la représentation binaire qui est la plus compacte quitte à trouver les paramètres pour l’afficher en ss58 dans l’interface si ça te permet de mieux visualiser.

2 Likes