اگر در سالهای اخیر در مهندسی نرم افزار ، به خصوص سیستمهای سمت سرور و backend کار کرده اید، احتمالا با تعداد زیادی واژه مد روز در زمینههای ذخیره و پردازش دادهها بمباران شده اید. NoSQL، کلان داده، Web-scale، Sharding، Eventual consistency، ACID، تئوری CAP، سرویسهای ابری، MapReduce و Real-Time. در دهه گذشته ما شاهد بهبودهای جالب بسیاری در بانکهای اطلاعاتی، سیستمهای توزیع شده و نحوه ساختن برنامهها با استفاده از آنها هستیم.
برنامههای data-intensive، با استفاده از پیشرفتهای این تکنولوژی ها، مرزهای آنچه که امکان پذیر بوده است را جابه جا کرده اند. ما به برنامه ای data-intensive میگوییم که اگر چالش اصلی آن حجم داده ها، پیچیدگی دادهها و یا سرعت تغییر دادهها باشد و این بر خلاف برنامههای compute-intensive است که سایکلهای CPU گلوگاه هستند.
ابزارها و تکنولوژی هایی که به برنامههای data-intensive در ذخیره کردن و پردازش دادهها کمک میکنند، به سرعت با این تغییرات سازگار شده اند. انواع جدید سیستمهای پایگاه داده «NoSQL»، توجه زیادی را به خود جلب کرده اند، اما صفهای پیام، کش ها، ایندکسهای جستجو، فریمورکها برای پردازش استریم و batch و تکنولوژیهای مرتبط نیز خیلی مهم هستند. برنامههای زیادی هستند که از ترکیب اینها استفاده میکنند.
خوشبختانه، در پشت تغییرات سریع فناوری، اصول ثابتی وجود دارند که عوض نمیشوند و مهم نیست که از چه نسخهی ابزار خاصی استفاده میکنید. اگر آن اصول را خوب بفهمید، شما در موقعیتی قرار میگیرید که ببینید هر ابزاری به درد کجا میخود و چگونه به خوبی از آن استفاده کنید و از مشکلات جلوگیری کنید. این جایی است که این کتاب وارد میشود.
هدف کتاب طراحی برنامههای Data-Intensive، کمک به شما در پیدا کردن مسیر در بین چشم انداز متنوع و به سرعت در حال تغییر فناوریها برای پردازش و ذخیره سازی دادهها است. این کتاب، آموزش یک ابزار خاص نیست و همچنین کتاب درسی پر از تئوری خشک نیست. در عوض ما به مثال هایی از سیستمهای داده موفق خواهیم پرداخت: فناوری هایی که پایه و اساس بسیاری از برنامههای محبوب را تشکیل میدهند و باید نیازمندیهای مقیاس پذیری، کارایی و قابلیت اطمینان را هر روزه تامین کنند.
در ادامه ما وارد جزئیات درون این سیستمها میشویم، الگوریتمهای کلیدی آنها را از هم جدا میکنیم و در مورد اصولشان و مصالحه هایی که انجام داده اند بحث میکنیم. در این سفر ما سعی خواهیم کرد تا روشهای مفید فکر کردن درباره سیستمهای دادهها را پیدا کنیم؛ نه فقط در مورد نحوه کار آن ها، بلکه چرا این گونه کار میکنند و این که چه سوالاتی را باید بپرسیم.