دانشکده:دروس:22844:14002:main

تکنولوژی کامپیوتر - مهندسی داده‌های حجیم - نیم‌سال دوم ۱۴۰۰-۱۴۰۱

مدرس
مجتبی استواری
ابوالفضل طاهری

توضیحات درس

یکی از چالش‌های امروزه، تبدیل داده به اطلاعات، اطلاعات به دانش و دانش به ارزش است. این فرآیند به سرعت در حال پیچیده‌تر شدن است. داده‌ها حجیم‌تر، متنوع‌تر و از منابع مختلفی به دست می‌آید و به نسبت گذشته ناهمگن‌تر و ساختارناپذیرتر می‌شود. با این حال هم‌چنان نیاز خواهیم داشت که بتوانیم آن‌ها را با سرعت خوبی پردازش کنیم و الگوریتم‌های پیچیده‌تری روی آن‌ها اعمال کنیم.

مجموعه‌ی ملزومات و تکنولوژی‌های لازم برای این کار را با عنوان داده‌های حجیم مطرح می‌کنند، که انقلابی در کسب و کار ایجاد کرده است، توسعه‌ی محصولات و مدل‌های کسب‌وکار جدید در قالب علم، که به آن علم داده‌-محور می‌گوییم.

حجم زیاد داده‌‌ی تولید شده، که در محدوده‌ی زتابایت در سال است، باید در دسترس قرار گرفته، پردازش و ذخیره شود و اطلاعات ارزشمند آن به کمک الگوریتم‌های یادگیری ماشین مورد استفاده قرار گیرد. بنابراین نیاز به معماری‌ها و رویکردهای جدید برای دسترسی، محاسبات و ذخیره‌سازی می‌باشد و روش‌های گذشته پاسخ‌گوی نیاز حال نیست.

مهندسین داده مسئول ایجاد و نگهداری زیرساخت‌های لازم در این فرآیند هستند، در دسترس قرار دادن داده، در اختیار قرار دادن توانایی پردازش و ابزارهای تحلیل، قابلیت ذخیره و بازیابی اطلاعات، تولید محصولات مقیاس‌پذیر مجموعه کارهایی است که در این چرخه قرار می‌گیرد.

در این درس می‌خواهیم اشاره‌ی کوتاهی به هر کدام از این بخش‌ها داشته باشیم و با چالش‌های هر کدام روبرو شویم.

در این درس سعی می‌کنیم مفاهیم زیر را پوشش دهیم

  • مقدمات
    • Scalability
    • Availability
    • Performance
    • Latency
    • Fault Tolerance
    • Consistency
  • ابزارهای اولیه
    • Linux
    • Docker & Swarm
  • پردازش موازی و برنامه‌نویسی همروند
    • Threads
    • Asynchronous System
    • Protocols
  • برنامه‌نویسی تابعی
    • Scala
  • محاسبات توزیع شده
    • MapReduce
    • Hadoop
    • Spark
  • اجماع و انتخاب
    • Vector Clock
    • Failure Detection
    • FLP Impossibility
    • Paxos
    • Raft
  • سیستم فایل‌ها، دیتابیس‌ها و مسائل دیتابیس‌های توزیع شده
    • OLTP & OLAP
    • ACID
    • CAP Theorem
    • Sharding
    • Partitioning
    • Replication
    • HDFS
    • GFS
    • Dynamo
    • BigTable
    • Cassandra
    • Distributed Transaction
  • جریان داده و پیام‌رسانی
    • Stream Processing
    • Kafka
  • ابزار
    • Zookeeper
    • Kubernetes

نحوه ارزش‌یابی

  • تمرین: 7 نمره
  • پروژه: 9 نمره
  • پایان‌ترم: 4 نمره

۷ سری تمرین خواهیم داشت، که سری اول آن (در واقع سری صفرم) بیشتر برای بررسی پیش نیازهای درس خواهد بود. پروژه به صورت گروهی، در گروه‌های ۳ تا ۴ نفره پیش خواهد رفت و زمان تحویل آن نهایتا ۱۵ مرداد خواهد بود.

پیش‌نیاز‌ها

پیش‌نیازهای درس به صورت کلی، موارد زیر خواهد بود:

  • برنامه‌نویسی پیشرفته (مسلط)
  • شبکه (آشنا)
  • دیتابیس (تسلط به اصول اولیه)
  • سیستم عامل (آشنا)

مراجع

در مورد مراجع درس، مرجعی که تمامی موارد فوق را پوشش دهد موجود نیست، اما مراجع زیر می‌تواند مفید باشد:

Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems

Big Data Architect's Handbook: A guide to building proficiency in tools and systems used by leading big data experts

در مورد ابزارها، داکیومنت خود ابزار که بر روی سایت آن موجود است، مرجع کاملی است. در مورد برنامه‌نویسی اسکالا می‌توان از مراجع زیر استفاده کرد:

Programming in Scala: Updated for Scala 2.12

Functional Programming in Scala

در مورد مفاهیمی که در مراجع فوق موجود نیست، در کلاس مقاله‌ی مربوط به آن معرفی خواهد شد.

/opt/bitnami/dokuwiki/data/pages/دانشکده/دروس/22844/14002/main.txt · آخرین ویرایش: 2022/09/07 10:44 توسط 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki