Amazon Redshift: دليل مستودعات البيانات
تعرّف على Amazon Redshift ومفهوم مستودع البيانات.
I
InSkillCoach
· دقيقة
Amazon Redshift: دليل مستودعات البيانات
تعرّف على Amazon Redshift ومفهوم مستودع البيانات.
1. ما هو مستودع البيانات؟
تعريف مبسّط
- مستودع البيانات = قاعدة بيانات مهيأة للتحليل
- الخصائص:
- تخزين كميات كبيرة من البيانات
- مهيأ للاستعلامات التحليلية
- دعم أحمال عمل OLAP
المقارنة مع RDS
# مثال على المقارنة بين RDS و Redshift
def compare_databases():
# RDS : Base de données transactionnelle
rds_features = {
'type': 'OLTP',
'optimisation': 'Transactions',
'taille_max': '16 TB',
'utilisation': 'Applications'
}
# Redshift : Entrepôt de données
redshift_features = {
'type': 'OLAP',
'optimisation': 'Analyses',
'taille_max': 'Pétabytes',
'utilisation': 'Business Intelligence'
}
return {
'rds': rds_features,
'redshift': redshift_features
}
2. إعداد Redshift
إنشاء مجموعة (Cluster)
# مثال على إنشاء مجموعة Redshift
def create_redshift_cluster():
redshift = boto3.client('redshift')
# إنشاء المجموعة
cluster = redshift.create_cluster(
ClusterIdentifier='mon-cluster',
NodeType='dc2.large',
NumberOfNodes=1,
MasterUsername='admin',
MasterUserPassword='mon-mot-de-passe',
DBName='ma_base',
VpcSecurityGroupIds=['sg-xxxxx'],
ClusterSubnetGroupName='mon-subnet-group'
)
return cluster['Cluster']['ClusterIdentifier']
إعداد WLM
# مثال على إعداد WLM
def setup_wlm():
redshift = boto3.client('redshift')
# إعداد إدارة أحمال العمل (Workload Management)
wlm_config = {
'ParameterGroupName': 'mon-param-group',
'Parameters': [
{
'ParameterName': 'wlm_json_configuration',
'ParameterValue': json.dumps([
{
'query_concurrency': 5,
'memory_percent_to_use': 100,
'user_groups': ['admin', 'analyst']
}
])
}
]
}
redshift.modify_cluster_parameter_group(**wlm_config)
3. تحميل البيانات
التحميل من S3
# مثال على التحميل من S3
def load_from_s3():
redshift = boto3.client('redshift-data')
# تنفيذ الأمر COPY
query = """
COPY ma_table
FROM 's3://mon-bucket/data/'
IAM_ROLE 'arn:aws:iam::account:role/redshift-role'
CSV
IGNOREHEADER 1;
"""
response = redshift.execute_statement(
ClusterIdentifier='mon-cluster',
Database='ma_base',
DbUser='admin',
Sql=query
)
return response['StatementId']
التحميل من RDS
# مثال على التحميل من RDS
def load_from_rds():
redshift = boto3.client('redshift-data')
# تنفيذ الأمر UNLOAD
query = """
UNLOAD ('SELECT * FROM ma_table')
TO 's3://mon-bucket/export/'
IAM_ROLE 'arn:aws:iam::account:role/redshift-role'
CSV;
"""
response = redshift.execute_statement(
ClusterIdentifier='mon-cluster',
Database='ma_base',
DbUser='admin',
Sql=query
)
return response['StatementId']
4. تحسين الأداء
توزيع البيانات
# مثال على إعداد التوزيع
def setup_distribution():
redshift = boto3.client('redshift-data')
# إنشاء جدول مع توزيع
query = """
CREATE TABLE ma_table_distribuee (
id INTEGER,
nom VARCHAR(100),
valeur DECIMAL(10,2)
)
DISTSTYLE KEY
DISTKEY (id)
SORTKEY (nom);
"""
response = redshift.execute_statement(
ClusterIdentifier='mon-cluster',
Database='ma_base',
DbUser='admin',
Sql=query
)
return response['StatementId']
الضغط
# مثال على إعداد الضغط
def setup_compression():
redshift = boto3.client('redshift-data')
# إنشاء جدول مع ضغط
query = """
CREATE TABLE ma_table_compressee (
id INTEGER ENCODE delta,
nom VARCHAR(100) ENCODE zstd,
valeur DECIMAL(10,2) ENCODE zstd
)
DISTSTYLE ALL
SORTKEY (id);
"""
response = redshift.execute_statement(
ClusterIdentifier='mon-cluster',
Database='ma_base',
DbUser='admin',
Sql=query
)
return response['StatementId']
5. الاستعلامات والتحليلات
الاستعلامات التحليلية
# مثال على استعلام تحليلي
def analytical_query():
redshift = boto3.client('redshift-data')
# استعلام التحليل
query = """
SELECT
date_trunc('month', date_vente) as mois,
categorie,
SUM(montant) as total_ventes,
COUNT(*) as nombre_ventes
FROM ventes
GROUP BY 1, 2
ORDER BY 1, 2;
"""
response = redshift.execute_statement(
ClusterIdentifier='mon-cluster',
Database='ma_base',
DbUser='admin',
Sql=query
)
return response['StatementId']
العروض المادية (Materialized Views)
# مثال على عرض مادي
def create_materialized_view():
redshift = boto3.client('redshift-data')
# إنشاء عرض مادي
query = """
CREATE MATERIALIZED VIEW mv_ventes_mensuelles
AS
SELECT
date_trunc('month', date_vente) as mois,
categorie,
SUM(montant) as total_ventes
FROM ventes
GROUP BY 1, 2;
"""
response = redshift.execute_statement(
ClusterIdentifier='mon-cluster',
Database='ma_base',
DbUser='admin',
Sql=query
)
return response['StatementId']
6. الصيانة والمراقبة
VACUUM و ANALYZE
# مثال على الصيانة
def maintenance_tasks():
redshift = boto3.client('redshift-data')
# VACUUM لإعادة تنظيم البيانات
vacuum_query = "VACUUM ma_table;"
# ANALYZE لتحديث الإحصاءات
analyze_query = "ANALYZE ma_table;"
# تنفيذ المهام
redshift.execute_statement(
ClusterIdentifier='mon-cluster',
Database='ma_base',
DbUser='admin',
Sql=vacuum_query
)
redshift.execute_statement(
ClusterIdentifier='mon-cluster',
Database='ma_base',
DbUser='admin',
Sql=analyze_query
)
مراقبة الأداء
# مثال على المراقبة
def monitor_performance():
cloudwatch = boto3.client('cloudwatch')
# مقاييس الأداء
metrics = cloudwatch.get_metric_statistics(
Namespace='AWS/Redshift',
MetricName='CPUUtilization',
Dimensions=[
{
'Name': 'ClusterIdentifier',
'Value': 'mon-cluster'
}
],
StartTime=datetime.now() - timedelta(hours=1),
EndTime=datetime.now(),
Period=300,
Statistics=['Average']
)
return metrics['Datapoints']
الخاتمة
أهم النقاط التي ينبغي تذكرها:
- Redshift = مستودع بيانات مخصص للتحليلات
- مهيأ لاستعلامات OLAP
- تحميل فعّال من S3
- توزيع البيانات وضغطها
- الصيانة المنتظمة ضرورية
التوصيات:
- اختيار النوع المناسب من العُقد
- تحسين توزيع البيانات
- استخدام الضغط
- مراقبة الأداء
- إجراء الصيانة بانتظام
نبذة عن InSkillCoach
خبير في التدريب والتقنيات
مدرّب متخصص في التقنيات المتقدمة والذكاء الاصطناعي، تدعمه شركة GNeurone Inc.
الشهادات:
- AWS Certified Solutions Architect – Professional
- شهادات Google Cloud
- Microsoft Certified: DevOps Engineer Expert
- Certified Kubernetes Administrator (CKA)
- CompTIA Security+
1.7k
66
التعليقات
التعليقات مدعومة عبر GitHub Discussions
سجّل الدخول باستخدام GitHub للمشاركة في النقاش