یک **سیستم مدیریت جویبار داده** یا **سیستم مدیریت جریان داده** (به انگلیسی Data Stream Management System یا به اختصار DSMS) یک برنامه کامپیوتری برای مدیریت مستمر جویبار داده است که شبیه به یک سیستم مدیریت پایگاه داده (DBMS) است که برای داده‌های استاتیک در پایگاه داده‌های مرسوم طراحی شده است. یک DSMS همچنین یک پردازش پرس و جوی انعطاف‌پذیر را ارائه می‌دهد به طوری که اطلاعات مورد نیاز بیان شده می‌تواند با استفاده از آن نمایش داده شود. اما در مقایسه با یک DBMS یک DSMS *یک پرس و جو* مستمر را اجرا می‌کند که نه تنها یک بار انجام می‌شود، بلکه به طور دائم نصب شده است؛ بنابراین پرس و جو به طور مداوم تا زمانی که آن را به صراحت حذف نکنیم، اجرا می‌شود. از آنجا که اکثر DSMSها data-driven هستند، یک پرس و جوی مستمر تا زمانی که داده‌های جدید وارد سیستم می‌شود، نتایج جدید تولید می‌کند. این مفهوم اساسی شبیه به پردازش رخداد مجتمع است به طوری که هردو فناوری تا حدودی یکی هستند.

اصل عملکردی
-----------

یکی از مهم‌ترین ویژگی‌های یک DSMS امکان رسیدگی به طور بالقوه و همزمان به جریان داده‌هایی است که بی‌نهایت و به سرعت در حال تغییر هستند، اگر چه منابعی مانند حافظهٔ اصلی محدود هستند. جدول زیر اصول مختلف DSMS را ارائه می‌کند و آنها را با DBMS سنتی مقایسه می‌کند.

| سیستم مدیریت پایگاه داده (DBMS) | سیستم مدیریت جویبار داده (DSMS) |
| --- | --- |
| داده‌های ماندگار (روابط) | جریان داده‌های فرار |
| با دسترسی تصادفی | دسترسی ترتیبی |
| پرس و جوهای یک باره | پرس و جوهای مداوم و مستمر |
| (از لحاظ تئوری) فضای ذخیره‌سازی ثانویه نامحدود | حافظه اصلی محدود |
| تنها به حالت فعلی وابسته است | ترتیب ورودی را در نظر می‌گیرد |
| نرخ به روز رسانی نسبتاً پایین | به طور بالقوه نرخ به روز رسانی بسیار بالا |
| نیازمندی‌های کم | نیازمندی‌های بلادرنگ |
| داده‌های دقیق را دریافت می‌کند | داده‌های منسوخ یا نادرست را دریافت می‌کند |
| پردازش پرس و جو قابل برنامه‌ریزی وارد می‌شود | داده‌های متغیر و مشخصات داده‌ها وارد می‌شود |

مدل‌های پردازش و جریان
----------------------

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

### فشرده‌سازی

ایده پشت تکنیک‌های فشرده سازی این است که تنها یک خلاصه‌ای از داده‌ها، اما نه همه (خام) نقاط داده‌ها از جریانی از داده‌ها حفظ می‌شود. الگوریتم‌ها به وسیلهٔ استفاده از هیستوگرام‌ها یا طراحی، طیف وسیعی از نقاط تصادفی داده‌ها را به عنوان نمونه برای خلاصه سازی انتخاب می‌کند. یک مثال ساده از یک فشرده سازی محاسبه مداوم یک معدل است. به جای به خاطر سپردن هر نقطه داده‌ها، فشره سازی تنها حاصل جمع و تعداد موارد را نگه می‌دارد. معدل با تقسیم این حاصل جمع بر تعداد محاسبه می‌شود. با این حال باید ذکر شود که فشره سازی نمی‌تواند منعکس کننده اطلاعات دقیق باشد؛ بنابراین یک پردازش که بر اساس فشره سازی است ممکن است نتایج نادرست تولید کند.

### پنجره‌ها

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

پردازش پرس و جو
---------------

از آنجایی که نمونه‌های اولیه بسیاری وجود دارد یک معماری استاندارد وجود ندارد. با این حال، اکثر DSMSها مبتنی بر پردازش پرس و جو در DBMS از تعریف زبان برای بیان پرس و جوها استفاده می‌کند که در نهایت به یک طرح از عامل‌ها ترجمه می‌شود. این برنامه می‌تواند به بهینه‌سازی و اجرا شده است. یک پردازش پرس و جو اغلب شامل مراحل زیر می‌باشد.

### فرمول بندی پرسو جوهای مستمر

فرمول بندی پرس و جوها عمدتاً با استفاده از زبان اعلانی مانند SQL در DBMS انجام می‌شود. از آنجا که هیچ زبان استاندارد پرس و جو برای بیان پرس و جوهای مستمر وجود ندارد، اما تعداد زیادی زبان و تفاوت بین زبان‌ها وجود دارد. اما بسیاری از آنها بر اساس SQL هستند مانند زبان پرس و جو مستمر (CQL) و StreamSQL و EPL. روش‌های گرافیکی ای هم هستند که هر گام پردازش به وسلیهٔ یک جعبه و جریان پردازش توسط فلش‌هایی بین جعبه‌ها نمایش داده می‌شود.

زبان به شدت بستگی به مدل پردازش دارد. برای مثال اگر پنجره‌ها در حال استفاده برای پردازش هستند، تعریف یک پنجره باید بیان شود. در StreamSQL یک پرس و جو با پنجره‌های کشویی برای ۱۰ عنصر آخر به نظر مانند شرح زیر است: این جریان به طور مداوم میانگین «قیمت» ۱۰ تاپل اخیر را محاسبه می‌کند، اما فقط آن تاپل‌هایی را مد نظر می‌گیرد که قیمت آن‌ها بیشتر از ۱۰۰٫۰ باشد.

در مرحله بعد اعلانی پرس و جو ترجمه شده است به یک منطقی پرس و جو برنامه است. یک پرس و جو طرح یک گراف جهت‌دار که در آن گره‌ها به اپراتورها و لبه توصیف پردازش جریان است. هر اپراتور در پرس و جو برنامه کپسوله معنایی از یک عمل خاص مانند فیلتر یا تجمع. در DSMSs که روند relational data streams اپراتورها با هم برابر هستند یا شبیه به اپراتورها از جبر رابطهای که برای ایجاد به طوری که وجود دارد اپراتورها برای انتخاب طرح عضویت و مجموعه‌ای از عملیات است. این اپراتور مفهوم اجازه می‌دهد تا بسیار انعطاف‌پذیر و همه‌کاره پردازش DSMS.

### بهینه‌سازی پرس و جوها

منطقی پرس و جو برنامه را می‌توان بهینه‌سازی شده که به شدت بستگی به جریان مدل. مفاهیم اولیه برای بهینه‌سازی پیوسته نمایش داده شد برابر کسانی که از سیستم‌های پایگاه داده. اگر وجود دارد relational data streams و منطقی پرس و جو برنامه‌ریزی مبتنی بر رابطهای اپراتورها از جبر رابطهای که برای ایجاد یک query optimizer می‌توانید با استفاده از جبری equivalences برای بهینه‌سازی این طرح است. این ممکن است به عنوان مثال به فشار انتخاب اپراتور به منابع چرا که آنها بسیار محاسباتی فشرده مانند پیوستن به اپراتور.

علاوه بر این نیز وجود دارد که هزینه بر اساس تکنیک‌های بهینه‌سازی مانند در DBMS که در آن یک پرس و جو و طرح با کمترین هزینه انتخاب شده است از معادل پرس و جو برنامه. یک مثال است را انتخاب کنید منظور از دو پی در پی پیوستن به اپراتور. در DBMS این تصمیم است که عمدتاً انجام شده توسط برخی آمار از درگیر پایگاه داده. اما از آنجا که داده‌ها از یک جریان داده است ناشناخته در پیشبرد وجود دارد این آمار در DSMS. ممکن است به رعایت یک جریان داده‌ها برای برخی از زمان برای به دست آوردن برخی از آمار. با استفاده از این آمار پرس و جو نیز می‌تواند بهینه‌سازی شده بعد؛ بنابراین در مقایسه با یک DBMS برخی DSMS اجازه می‌دهد تا برای بهینه‌سازی پرس و جو و حتی در طول زمان اجرا؛ بنابراین یک DSMS نیاز به برخی از طرح مهاجرت استراتژی به جای یک پرس و جو در حال اجرا برنامه با یکی از جدید.

### تغییرات پرس و جوها

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

### اجرای پرس و جوها

سیستم‌های مدیریت جریان داده
---------------------------

* SQLstream
* جریان
* شفق های StreamBase Systems, Inc.
* TelegraphCQ
* NiagaraCQ با
* QStream
* لوله های webMethods وقایع کسب و کار
* StreamGlobe
* اودیسه
* StreamInsight
* InfoSphere جریان
* SAS رویداد جریان پردازش موتور
* SAP رویداد جریان پردازنده
* خط لوله DB

جستارهای وابسته
---------------

* پردازش رویداد مجتمع
* پردازش جریان رویداد
* سیستم مدیریت جریان داده رابطه‌ای

منابع
-----

1. ↑  De Matteis, Tiziano; Mencagli, Gabriele (25 March 2016). "Parallel Patterns for Window-Based Stateful Operators on Data Streams: An Algorithmic Skeleton Approach". *International Journal of Parallel Programming*. doi:10.1007/s10766-016-0413-x.
2. ↑  «Arasu, A. et. al». بایگانی‌شده از اصلی در ۹ نوامبر ۲۰۱۶. دریافت‌شده در ۲۴ ژانویه ۲۰۱۷.
3. ↑   `{{cite conference}}`: Empty citation (help)
4. ↑  «Chandrasekaran, S. et al, "TelegraphCQ: Continuous Dataflow Processing for an Uncertain World."» (PDF). بایگانی‌شده از اصلی (PDF) در ۷ فوریه ۲۰۱۴. دریافت‌شده در ۲۴ ژانویه ۲۰۱۷.
5. ↑  «Chen, J. et al, "NiagaraCQ: A Scalable Continuous Query System for Internet Databases."» (PDF). بایگانی‌شده از اصلی (PDF) در ۱۱ ژوئن ۲۰۱۰. دریافت‌شده در ۲۴ ژانویه ۲۰۱۷.