−فهرست مندرجات
تکنولوژی کامپیوتر - مهندسی دادههای حجیم - نیمسال دوم ۱۴۰۰-۱۴۰۱
مدرس |
---|
مجتبی استواری |
ابوالفضل طاهری |
توضیحات درس
یکی از چالشهای امروزه، تبدیل داده به اطلاعات، اطلاعات به دانش و دانش به ارزش است. این فرآیند به سرعت در حال پیچیدهتر شدن است. دادهها حجیمتر، متنوعتر و از منابع مختلفی به دست میآید و به نسبت گذشته ناهمگنتر و ساختارناپذیرتر میشود. با این حال همچنان نیاز خواهیم داشت که بتوانیم آنها را با سرعت خوبی پردازش کنیم و الگوریتمهای پیچیدهتری روی آنها اعمال کنیم.
مجموعهی ملزومات و تکنولوژیهای لازم برای این کار را با عنوان دادههای حجیم مطرح میکنند، که انقلابی در کسب و کار ایجاد کرده است، توسعهی محصولات و مدلهای کسبوکار جدید در قالب علم، که به آن علم داده-محور میگوییم.
حجم زیاد دادهی تولید شده، که در محدودهی زتابایت در سال است، باید در دسترس قرار گرفته، پردازش و ذخیره شود و اطلاعات ارزشمند آن به کمک الگوریتمهای یادگیری ماشین مورد استفاده قرار گیرد. بنابراین نیاز به معماریها و رویکردهای جدید برای دسترسی، محاسبات و ذخیرهسازی میباشد و روشهای گذشته پاسخگوی نیاز حال نیست.
مهندسین داده مسئول ایجاد و نگهداری زیرساختهای لازم در این فرآیند هستند، در دسترس قرار دادن داده، در اختیار قرار دادن توانایی پردازش و ابزارهای تحلیل، قابلیت ذخیره و بازیابی اطلاعات، تولید محصولات مقیاسپذیر مجموعه کارهایی است که در این چرخه قرار میگیرد.
در این درس میخواهیم اشارهی کوتاهی به هر کدام از این بخشها داشته باشیم و با چالشهای هر کدام روبرو شویم.
در این درس سعی میکنیم مفاهیم زیر را پوشش دهیم
- مقدمات
- 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 نمره
۷ سری تمرین خواهیم داشت، که سری اول آن (در واقع سری صفرم) بیشتر برای بررسی پیش نیازهای درس خواهد بود. پروژه به صورت گروهی، در گروههای ۳ تا ۴ نفره پیش خواهد رفت و زمان تحویل آن نهایتا ۱۵ مرداد خواهد بود.
پیشنیازها
پیشنیازهای درس به صورت کلی، موارد زیر خواهد بود:
- برنامهنویسی پیشرفته (مسلط)
- شبکه (آشنا)
- دیتابیس (تسلط به اصول اولیه)
- سیستم عامل (آشنا)
مراجع
در مورد مراجع درس، مرجعی که تمامی موارد فوق را پوشش دهد موجود نیست، اما مراجع زیر میتواند مفید باشد:
در مورد ابزارها، داکیومنت خود ابزار که بر روی سایت آن موجود است، مرجع کاملی است. در مورد برنامهنویسی اسکالا میتوان از مراجع زیر استفاده کرد:
Programming in Scala: Updated for Scala 2.12
Functional Programming in Scala
در مورد مفاهیمی که در مراجع فوق موجود نیست، در کلاس مقالهی مربوط به آن معرفی خواهد شد.