1. Pourquoi partitionner les données?
Le partitionnement de la base de données peut réduire considérablement le délai de réponse du système tout en augmentant le débit de données. Plus précisément, le partitionnement présente les avantages suivants:
- Le partitionnement facilite la gestion des grandes tables. Les opérations de maintenance sur les sous-ensembles de données sont également plus efficaces, car ces opérations ne ciblent que les données requises plutôt que la table entière. Une bonne stratégie de partitionnement réduira la quantité de données à analyser en ne lisant que les données pertinentes nécessaires pour satisfaire la requête. Lorsque toutes les données se trouvent sur la même partition, les requêtes, calculs et autres opérations sur la base de données sont limités au goulot d'étranglement d'E / S d'accès au disque.
- Le partitionnement permet au système d'utiliser pleinement toutes les ressources. Avec un bon schéma de partitionnement et un calcul parallèle, l'informatique distribuée peut utiliser pleinement tous les nœuds pour accomplir des tâches qui sont généralement effectuées sur un nœud. Lorsqu'une tâche peut être divisée en plusieurs sous-tâches dispersées et que chaque sous-tâche accède à une partition différente, l'efficacité peut être améliorée.
- Le partitionnement augmente la disponibilité du système. Parce que la copie de la partition est généralement stockée dans différents nœuds physiques. Ainsi, une fois qu'une partition n'est pas disponible, le système peut toujours appeler d'autres partitions de réplique pour assurer le fonctionnement normal du travail.
2. Méthode de partition
DolphinDB prend en charge une variété de méthodes de partitionnement: partition de plage (RANGE), partition de hachage (HASH), partition de valeur (VALUE), partition de liste (LIST), partition composite (COMPO).
- Le partitionnement par plage crée une partition pour chaque intervalle, qui est la méthode de partitionnement la plus couramment utilisée et recommandée. Vous pouvez placer tous les enregistrements avec des valeurs dans une plage dans une partition.
- Le partitionnement de hachage utilise des fonctions de hachage pour opérer sur les colonnes de partition afin de faciliter l'établissement d'un nombre spécifié de partitions.
- La partition de valeur crée une partition pour chaque valeur, telle que la date de négociation des actions et le mois de négociation des actions.
- Le partitionnement de liste est basé sur des listes énumérées par l'utilisateur, ce qui est plus flexible que le partitionnement par valeur.
- Le partitionnement composé convient à de très grandes quantités de données et les requêtes impliquent souvent deux colonnes de partition ou plus. Chaque sélection de partition peut utiliser un intervalle, une valeur ou une partition de liste. Par exemple, la partition de valeur est basée sur la date de transaction boursière et la partition de plage est basée sur le code boursier.
Nous pouvons utiliser la fonction de base de données pour créer une base de données.
语法 :base de données (répertoire, [partitionType], [partitionScheme], [locations])
paramètre
répertoire: le répertoire dans lequel la base de données est enregistrée. DolphinDB dispose de trois types de bases de données, qui sont une base de données en mémoire, une base de données sur disque et une base de données sur un système de fichiers distribué. Pour créer une base de données en mémoire, le répertoire est vide; pour créer une base de données locale, le répertoire doit être un répertoire de système de fichiers local; pour créer une base de données sur un système de fichiers distribué, le répertoire doit commencer par "dfs: //". Ce didacticiel prend comme exemple la création d'une base de données locale Windows.
partitionType: Mode de partition, il existe 5 modes: partition de plage (RANGE), partition de hachage (HASH), partition de valeur (VALUE), partition de liste (LIST), partition composite (COMPO).
partitionScheme: schéma de partition. Les schémas de partition correspondant aux différentes méthodes de partitionnement sont les suivants:
locations: spécifiez l'emplacement du nœud où se trouve chaque partition. S'il s'agit d'une base de données de système de fichiers distribuée ou d'une base de données de type partition composée (COMPO), le paramètre locations ne peut pas être utilisé.
2.1 Partition de plage
La partition de plage est déterminée par le vecteur de partition. Le vecteur de partition représente l'intervalle, y compris la valeur de départ mais pas la valeur de fin.
Dans l'exemple suivant, la base de données db a deux partitions: [0,5) et [5,10). Utilisez la fonction append! Pour enregistrer la table t en tant que table de partition pt dans la base de données de base de données, et utilisez l'ID comme colonne de partition.
n = 1000000 ID = rand (10, n) x = rand (1.0, n) t = table (ID, x) db = database ("dfs: // rangedb", RANGE, 0 5 10) pt = db.createPartitionedTable (t, `pt,` ID) pt.append! (t); pt = loadTable (db, `pt) sélectionner count (x) à partir de pt
2.2 Partition de hachage
La partition de hachage utilise une fonction de hachage sur la colonne de partition pour générer des partitions. Le partitionnement par hachage est un moyen simple de générer un nombre spécifié de partitions. Cependant, il convient de noter que la partition de hachage ne peut pas garantir la même taille de la partition, en particulier lorsque la distribution de la valeur de la colonne de partition est biaisée. En outre, lorsque vous recherchez des données dans une zone continue de la colonne de partition, l'efficacité de la partition de hachage est inférieure à celle de la partition de zone ou de la partition de valeur.
Dans l'exemple suivant, la base de données db comporte deux partitions. Utilisez la fonction append! Pour enregistrer la table t en tant que table de partition pt dans la base de données de base de données, et utilisez l'ID comme colonne de partition.
n = 1000000 ID = rand (10, n) x = rand (1.0, n) t = table (ID, x) db = database ("dfs: // hashdb", HASH, [INT, 2]) pt = db .createPartitionedTable (t, `pt,` ID) pt.append! (t); pt = loadTable (db, `pt) sélectionner count (x) à partir de pt
2.3 Partition de valeur
La partition de valeur utilise une valeur pour représenter une partition. L'exemple suivant définit 204 partitions. Chaque zone représente le mois entre janvier 2000 et décembre 2016.
n = 1000000 mois = prendre (2000.01M..2016.12M, n) x = rand (1.0, n) t = table (mois, x) db = database ("dfs: // valuedb", VALUE, 2000.01M .. 2016.12M) pt = db.createPartitionedTable (t, `pt,` mois) pt.append! (T) pt = loadTable (db, `pt) sélectionnez count (x) à partir de pt
2.4 Partition de liste
Dans la partition LIST, nous utilisons une liste contenant plusieurs éléments pour représenter une partition. L'exemple suivant a deux partitions, la première partition contient 3 codes de stock et la seconde partition contient 2 codes de stock.
n = 1000000 ticker = rand (`MSFT`GOOG`FB`ORCL`IBM, n); x = rand (1.0, n) t = table (ticker, x) db = database ("dfs: // listdb", LIST, [`IBM`ORCL`MSFT,` GOOG`FB]) pt = db.createPartitionedTable ( t, `pt,` ticker) pt.append! (t) pt = loadTable (db, `pt) sélectionner count (x) from pt
2.5 Cloison combinée
La partition combinée (COMPO) peut définir 2 ou 3 colonnes de partition. Chaque colonne peut être partitionnée indépendamment par plage (RANGE), valeur (VALUE) ou liste (LIST). Les multiples colonnes de la partition combinée sont logiquement parallèles et il n'y a pas de relation de subordination ou de priorité.
n = 1000000 ID = rand (100, n) dates = 2017.08.07..2017.08.11 date = rand (dates, n) x = rand (10.0, n) t = table (ID, date, x) dbDate = base de données (, VALUE, 2017.08.07..2017.08.11) dbID = database (, RANGE, 0 50 100) db = database ("dfs: // compoDB", COMPO, [dbDate, dbID]) pt = db.createPartitionedTable ( t, `pt,` date`ID) pt.append! (t) pt = loadTable (db, `pt) sélectionner count (x) from pt
L'exemple ci-dessus crée 5 partitions de valeur.
Dans la partition 20170807, il y a 2 partitions de plage.
Le didacticiel de partitionnement de base de données (2) présentera les principes du partitionnement de base de données et des schémas de partitionnement spéciaux