J'essaie de me familiariser avec MySQL Cluster Community Server (version: 5.6.27-ndb-7.4.8-cluster-gpl) et j'ai la première question qui me laisse perplexe. J'ai cherché dans la documentation et le forum mais je n'ai pas trouvé quelque chose de pertinent.mysql partition par varchar - comportement aléatoire?
J'ai une table très simple sur un cluster avec 4 noeuds/partitions données:
CREATE TABLE customer (
id int(10) NOT NULL ,
surname varchar(35) NOT NULL,
gender varchar(6) NOT null,
primary key(id, surname, gender)
)ENGINE=NDBCLUSTER DEFAULT CHARSET=latin1 PARTITION by key (gender);
-je choisir donc d'avoir une partition par clé sur le genre (il prend les valeurs mâle/femelle). Insérer 1000 lignes et je veux voir comment ils sont distribués:
SELECT partition_name, table_rows
FROM information_schema.PARTITIONS
WHERE table_name='customer';
Résultats:
nom_partition, table_rows
'p0', '0'
'p1', '1000'
'p2', '0'
'p3', '0'
donc toutes les lignes vont dans une seule partition.
Toutefois, si je définis le genre comme nvarchar (6) ou varchar (40) les lignes sont distribuées comme j'attendre dans deux partitions
nom_partition, table_rows
'p0', '493'
'p1', '0'
'p2', '507'
'p3', '0'
Si je relance le genre à varchar (60), tous les enregistrements vont dans une seule partition. Si je l'augmente encore plus à varchar (100), les enregistrements sont répartis équitablement entre deux partitions.
Y a-t-il une logique derrière cela ou est-ce que je fais quelque chose de complètement faux?
Il semble que oui.D'autre part, il est un peu étrange que la fonction de hachage retourne la même sortie, je m'attendrais à ce qu'une collision de hachage soit extrêmement rare et ne dépende pas de la longueur de varchar. J'ai essayé avec le partitionnement de gamme, mais ne fonctionne pas avec varchar. J'ai également essayé d'obtenir le code ASCII du premier caractère à utiliser dans la gamme comme ceci: Range (ASCII (LEFT (sexe, 1)) mais j'obtiens une erreur – user5740173
La probabilité que deux nombres aléatoires choisis parmi [1,4] sera égal à l'autre est 0.25 Quand tout ce que vous avez sont quatre seaux de hash, la probabilité de collision n'est pas petite du tout. –