UTF8 vs ASCII ou Format binaire personnalisé: optimisation haute performance sur de très grandes tables

dba.stackexchange https://dba.stackexchange.com/questions/43162

  •  31-10-2019
  •  | 
  •  

Question

Le résumé de ma question est de savoir s'il existe des avantages, même s'ils sont minimes, d'utiliser ASCII, ou même un format plus petit conçu mais créé spécifiquement pour la situation, au lieu de l'UTF-8 pour les chaînes.

Est possible d'utiliser le serveur Web qui accédera aux données Traduire une chaîne ASCII dans un format plus compact.

Sur cette question, seulement 1 à 3 tables sur la base de données gèrent une quantité massive de données, de sorte que n'importe quel octet peut faire la différence si cela pouvait s'adapter à la mémoire au lieu du disque d'accès. Les informations seront accessibles via un service Restull

Lire vs écrit:

Le projet a besoin de beaucoup plus de lecture que des écritures. Mais l'écriture a une particularité: toutes les 10 secondes, un montant entre 40 à 300 nouvelles lignes est inséré dans le tableau principal. Ceux-ci pourraient être écrits en parallèle, car ne dépendent pas les uns des autres.

Mémoire vs utilisation du disque:

Les lignes insérées récentes, qui seront utilisées immédiatement, seront également insérées sur un cache pour l'utilisation du service Web, donc pas besoin de les relire. Mais pour la recherche sur les anciens enregistrements, la base de données aura besoin et elle devrait être rapide.

C'est pourquoi je suppose que l'utilisation de moins d'octets pour stocker certains champs fera de la différence: même pour une plus grande quantité de données, sera plus facile pour l'ajustement sur la mémoire.

Si je ne peux pas installer de données sur la mémoire, et que la base de données ne peut pas m'abstraire une certaine vitesse, ou je devrai forcer les analyses de table / partition lente toutes les 10 secondes pour un seul utilisateur, ou je serai obligé de faire une seule sélection et de le mettre sur le serveur Web , mais ce concept de rupture du concept "sans état" du repos.

Personnages qui doivent être pris en charge

0-9, az, "-", "_". Peut-être que vous aurez besoin de "az". Seulement 38 ou 64 caractéristiques, et jamais plus que cela.

Pour l'instant, la plupart des colonnes sont

CHAR(3), CHAR(6), VARCHAR(8), VARCHAR(10). 

Exemples:

  • ABC, XYZ
  • AB-EFG, XY-XPT
  • ABC123457
  • E47F6C, 34210A, E48D37 (chaînes hexadécimales, peut-être exister un format spécifique à cela?)

Technologies utilisées

La base de données sera Mariadb. Peut-être qu'une partie des données brutes sera sur certains Nosql base de données. Le langage de WebService ne fait pas vraiment de difficulté ici, mais sera PHP 5.4 avec Framework Phalcon PHP.

Différents types de cache pourraient être utilisés, de Varnish-Cache à APC / Mencached jusqu'à des caches à l'intérieur de la base de données.

Mon hypothèse initiale:

Un champ avec VARCHAR(10) a besoin de 80bits. Si j'utilise une table personnalisée pour utiliser seulement 64 ou moins à la place de 255 caractères, j'économise environ 4 fois, donc au lieu de 80bits n'utilisera que 20bits.

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top