2017-04-18 1 views
1

Disons que j'ai créé le tableau suivant:Simuler et la manipulation d'une base de données partitionné sur plusieurs sites

CREATE TABLE TABLE1 
( 
id INT NOT NULL 
country VARCHAR(10) NOT NULL 
name VARCHAR(10) NOT NULL 
productType VARCHAR(10) NOT NULL 
) 

Si, par exemple, j'ai des valeurs différentes pour producType (type1, type2 .. etc) et je fais partitionnement basé sur ces types tels que partition1 est pour type1 et ainsi de suite. Et les valeurs possibles pour le pays sont: country1, country2 et country3. Comment puis-je effectuer ou simulent une fragmentation horizontale basée sur le pays, et être en mesure d'utiliser une commande semblable à ceci:

SELECT * FROM [email protected] 
WHERE name = someName 

Est-ce une exigence que la base de données doit être stocké sur plusieurs serveurs afin de être capable de faire ça? Si oui, existe-t-il une autre façon de le faire qui ne nécessite pas cela (sur Oracle 11g)?

+0

Le sharding (partitionnement physique) n'est pas supporté avant 12c. Mais si vous ne voulez pas que les pays résident sur plusieurs serveurs, vous ne parlez pas de sharding de toute façon. Alors, qu'est-ce que vous voulez? – APC

+0

Table Le partitionnement n'est pas considéré comme un sharding? Je fais une tâche dans laquelle je dois faire une fragmentation horizontale qui doit aussi être basée sur l'emplacement, donc je vais devoir utiliser des commandes dans lesquelles je devrai spécifier l'emplacement comme "@countryName" et je Je ne sais pas s'il est possible de le faire dans Oracle 11g sans avoir plusieurs serveurs mais seulement des tables partitionnées. –

+0

Non. Le partage consiste à diviser une table entre plusieurs instances de base de données. Le partitionnement organise la disposition d'une table dans une base de données. – APC

Répondre

1

Souhaitez-vous subdiviser les tables? C'est-à-dire, partition par liste (ProductType), sous-partition par liste (pays)?

Cela peut être fait.

Les sous-partitions ont généré des noms qui ne reflètent pas le nom de la clé. Donc, ils ne se prêtent pas à explicitement référencer les partitions de façon peut L'instruction select renverrait le pays dans la clause WHERE:

select * from your_table partition (p_prodtype_0001) 
where country = 'country1' 

L'optimiseur peut encore appliquer la taille de ce cas dans sous-partition.

Vous pourriez truquer le partage en ayant différentes tables du même nom dans différents schémas, soit dans la même base de données, soit dans des bases différentes. Vous pouvez créer des liens de base de données avec le nom de vos différents pays. Cela vous permettrait d'employer @country1 ou autre. L'insertion serait difficile. Probablement vous auriez besoin d'avoir une vue et un déclencheur INSTEAD OF.