Cosmos DB
این مقاله، Cosmos DB، اخیراً بهواسطهٔ فرایند ایجاد مقاله ایجاد شدهاست. بازبینیکننده در حال بستن درخواست است و این برچسب احتمالاً بهزودی برداشته میشود.
ابزارهای بازبینی: پیشبارگیری بحث اعلان به نگارنده |
خطای اسکریپتی: پودمان «AfC submission catcheck» وجود ندارد.
برخی از ویرایشها در این مقاله در چارچوب یک تکلیف دانشگاهی انجام شدهاند. این تکالیف توسط ؟ برای دانشجویان ؟ تعیین شدهاند. |
دیتابیس Azure Cosmos سرویس اختصاصی جهانی توزیع شده مایکروسافت است و چند مدل پایگاه داده «برای مدیریت دادهها در مقیاس سیاره» در ماه می ۲۰۱۷ شروع به کار کرد.[۱]این بانک اطلاعاتی بهطور کلی به عنوان یک دیتابیس NoSQL طبقهبندی میشود.
مدل داده[ویرایش]
از نظر داخلی، Cosmos DB «موارد» را در کانتینر ذخیره میکند، با توجه به API استفاده شده، این دو مفهوم متفاوت ظاهر میشوند (برای مثال هنگام استفاده از API سازگار با MongoDB این «اسناد» در «مجموعه ها» است). کانتینرها در «پایگاه داده» گروهبندی میشوند، که مشابه فضای نام بالای ظروف هستند. کانتینرها از نظر طرح و برنامه اشتیاق آور هستند، به این معنی که هیچ برنامه ای هنگام افزودن موارد اعمال نمیشود.
بهطور پیش فرض، هر قسمت در هر مورد بهطور خودکار نمایه میشود، بهطور کلی عملکرد خوبی را بدون هماهنگی با الگوهای خاص پرس و جو ارائه میدهد. این پیش فرضها را میتوان با تنظیم سیاست نمایه سازی اصلاح کرد که میتواند برای هر قسمت، نوع فهرست و دقت مورد نظر را تعیین کند. Cosmos DB دو نوع شاخص را ارائه میدهد:
- محدوده، حمایت از دامنه و ORDER BY نمایش داده شد،
- مکانی، پشتیبانی از پرس و جوهای مکانی از نقاط، چند ضلعیها و رشتههای خطی که در قطعات استاندارد GeoJSON رمزگذاری شدهاند.
هر ظرف Cosmos DB یک خوراک تغییر را در معرض نمایش قرار میدهد، مشتری میتواند مشترک شود تا بتواند از اضافه شدن یا به روزرسانی موارد جدید در ظرف مطلع شود.[۲] موارد حذف شده در حال حاضر است در معرض تغذیه تغییر نمیکند. تغییرات توسط Cosmos DB ادامه دارد، که این امر امکان درخواست تغییرات از هر زمان به زمان ایجاد ظرف را فراهم میکند.
میتوان " زمان زندگی " (یا TTL) را در سطح کانتینر تعیین کرد تا به Cosmos DB اجازه داده شود پس از مدت زمان مشخصی که در ثانیه بیان میشود، بهطور خودکار موارد را حذف کند. این شمارش معکوس پس از آخرین به روزرسانی مورد شروع میشود. در صورت نیاز، TTL همچنین میتواند در سطح مورد بارگیری شود.
مدلهای چند گانه API[ویرایش]
مدل دادههای داخلی توصیف شده در بخش قبلی از طریق:
- یک API اختصاصی SQL
- پنج API سازگاری مختلف، نمایش نقاط پایانی که تا حدی با پروتکلهای سیم MongoDB , Gremlin، Cassandra , Azure Table Storage و غیره سازگار هستند. این APIهای سازگاری امکان اتصال و استفاده از Cosmos DB از طریق درایورهای استاندارد یا SDK را برای هر برنامه سازگار فراهم میکند، ضمن اینکه از ویژگیهای اصلی Cosmos DB مانند پارتیشنبندی و توزیع جهانی نیز بهرهمند میشود.
API | نقشهبرداری داخلی | وضعیت و اظهارات سازگاری | |
---|---|---|---|
ظروف | موارد | ||
MongoDb | مجموعهها | اسناد | سازگار با پروتکل سیم نسخه ۶ و سرور نسخه 3.6 MongoDB.[۳] |
موجود خیالی | نمودارها | گرهها و لبهها | سازگار با نسخه ۳٫۲ مشخصات Gremlin. |
کاساندرا | جدول | ردیف | سازگار با نسخه ۴ پروتکل سیم Cassandra Query Language (CQL). |
ذخیرهسازی جدول لاجوردی | جدول | مورد | |
و غیره | کلید | مقدار | سازگار با نسخه ۳ و غیره[۴] |
SQL API[ویرایش]
SQL API به مشتریان اجازه میدهد ظروف و موارد را ایجاد، به روزرسانی و حذف کنند. موارد را میتوان با یک گویش SQL دوستانه فقط برای خواندن، JSON پرس و جو کرد.[۵] همانطور که Cosmos DB یک موتور جاوا اسکریپت را تعبیه میکند، SQL API همچنین:
- روشهای ذخیره شده توابعی که مجموعه ای از عملکردها و منطق خودسرانه پیچیده را در یک معامله سازگار با ACID قرار میدهند. آنها از تغییرات ایجاد شده در حالی که رویه ذخیره شده در حال اجرا است جدا شده یا همه عملیات نوشتن موفق میشوند یا همه آنها از کار میافتند و پایگاه داده را در یک وضعیت ثابت نگه میدارند. رویههای ذخیره شده در یک پارتیشن واحد اجرا میشوند؛ بنابراین تماس گیرنده هنگام فراخوانی مجموعه پارتیشنبندی باید یک کلید پارتیشن ارائه کند. برای جبران کمبود عملکرد خاص میتوان از روشهای ذخیره شده استفاده کرد. به عنوان مثال، فقدان قابلیت تجمع با اجرای مکعب OLAP به عنوان یک روش ذخیره شده در پروژه open-documented-lumenize[۶] جبران میشود.
- راه اندازها توابعی که قبل یا بعد از عملیات خاصی اجرا میشوند (مانند درج سند به عنوان مثال) که میتواند عملیات را تغییر دهد یا آن را لغو کند. راه اندازها فقط در صورت درخواست اجرا میشوند.
- توابع تعریف شده توسط کاربر (UDF). توابعی که میتوانند از زبان جستجوی SQL استفاده کنند و ویژگیهای محدود SQL را جبران کنند.
SQL API به عنوان REST API در معرض دید قرار میگیرد که خود در SDKهای مختلفی که بهطور رسمی توسط مایکروسافت پشتیبانی میشوند و برای آنها در دسترس است، پیادهسازی میشود . NET، . NET Core ,[۷] Node.js (جاوا اسکریپت)، جاوا و پایتون.
پارتیشنبندی[ویرایش]
Cosmos DB در سال ۲۰۱۶ با معرفی کانتینرهای پارتیشنبندی، قابلیت پارتیشنبندی خودکار را اضافه کرد. در پشت صحنه، ظروف پارتیشنبندی شده دارای چندین پارتیشن فیزیکی با موارد توزیع شده توسط کلید پارتیشن ارائه شده توسط مشتری است. Cosmos DB بسته به نیاز و توان عملیاتی، بهطور خودکار تصمیم میگیرد که چند پارتیشن را برای پخش دادهها پخش کند. هنگامی که پارتیشنها اضافه یا حذف میشوند، عملیات بدون هیچ گونه خرابی انجام میشود بنابراین دادهها در دسترس باقی میمانند در حالی که در پارتیشنهای جدید یا باقی مانده متعادل میشوند.
قبل از اینکه کانتینرهای پارتیشنبندی در دسترس باشد، نوشتن کد سفارشی برای دادههای پارتیشن معمول بود و برخی از SDKهای Cosmos DB بهطور واضح از چندین طرح پارتیشنبندی مختلف پشتیبانی میکردند. این حالت هنوز در دسترس است اما فقط در مواردی که ذخیرهسازی و توان مصرفی از ظرفیت یک ظرف فراتر نرود، یا هنگامی که قابلیت پارتیشن داخلی در غیر این صورت پاسخگوی نیازهای برنامه نیست، توصیه میشود.
توان قابل تنظیم[ویرایش]
توسعه دهندگان میتوانند توان مورد نظر را متناسب با بار مورد انتظار برنامه تعیین کنند. Cosmos DB منابع (حافظه، CPU و IOPS) را برای تضمین توان درخواستی ذخیره میکند و در عین حال تأخیر درخواست را در ۱۰ درصد برای خواندن و نوشتن، زیر ۱۰ میلی ثانیه حفظ میکند. توان عملیاتی در واحد درخواست (RU) در هر ثانیه مشخص شدهاست. هزینه خواندن یک مورد ۱ کیلوبایت ۱ واحد درخواست (یا ۱ واحد RU) است. عملیات با استفاده از "id" در مقایسه با عملیات Delete , Update و Insert برای همان سند، تعداد کمتری RU مصرف میکند. پرس و جوهای بزرگ (به عنوان مثال تجمعاتی مانند شمارش) و اجرای روش ذخیره شده بسته به پیچیدگی عملیات مورد نیاز میتواند صدها تا هزاران RU مصرف کند.[۸] حداقل صورتحساب در هر ساعت است.
توان عملیاتی را میتوان در سطح کانتینر یا پایگاه داده تهیه کرد. هنگامی که در سطح پایگاه داده تهیه میشود، توان تولیدی در تمام کانتینرهای موجود در آن پایگاه داده تقسیم میشود، با داشتن توانایی اضافی برای داشتن توان اختصاصی برای برخی از کانتینرها. توان تولید شده در یک ظرف Azure Cosmos منحصراً برای آن ظرف اختصاص یافتهاست.[۹] حداکثر RUهای پیش فرض قابل تهیه در هر پایگاه داده و هر کانتینر، ۱٬۰۰۰،000 RU است، اما مشتریان میتوانند با تماس با پشتیبانی مشتری این محدودیت را افزایش دهند.
به عنوان مثالی از هزینه یابی، با استفاده از یک نمونه منطقه ای، تعداد ۱۰۰۰٬۰۰۰ رکورد از هر 1k در ۵ ثانیه به ۱٬۰۰۰،000 RU نیاز دارد با ۰٫۰۰۸ دلار در ساعت که برابر ۸۰۰ دلار است. دو منطقه هزینه را دو برابر میکنند.
توزیع جهانی[ویرایش]
پایگاه دادههای Cosmos DB را میتوان به گونه ای پیکربندی کرد که در هر یک از مناطق Microsoft Azure (54 منطقه از دسامبر ۲۰۱۸) در دسترس باشد، به توسعه دهندگان برنامه اجازه میدهد تا دادههای خود را نزدیک به مکان کاربران خود قرار دهند.[۱۰] دادههای هر کانتینر در تمام مناطق پیکربندی شده به صورت شفاف تکرار میشود. افزودن یا حذف مناطق بدون هیچ گونه خرابی و تأثیری بر عملکرد انجام میشود. با استفاده از API چند خانه Cosmos DB، نیازی نیست که برنامهها هنگام افزودن یا حذف مناطق، به روزرسانی یا مجدداً تقسیم شوند، زیرا Cosmos DB بهطور خودکار درخواستهای آنها را به مناطق موجود و نزدیک به محل سکونت خود هدایت میکند.
سطح سازگاری[ویرایش]
سازگاری دادهها بر روی Cosmos DB قابل تنظیم است و به توسعه دهندگان برنامهها اجازه میدهد از بین پنج سطح مختلف یکی را انتخاب کنند:[۱۱]
- Eventual هیچ گونه سفارشی را تضمین نمیکند و فقط اطمینان حاصل میکند که نسخهها در نهایت به هم نزدیک میشوند
- پیشوند ثابت تضمینهای سفارش را علاوه بر احتمالی، اضافه میکند
- Session به یک اتصال مشتری محدود میشود و اساساً یک قوام خواندن-نوشتن-برای-خود را برای هر مشتری تضمین میکند. این سطح سازگاری پیش فرض است[۱۲]
- کهنگی محدود با افزایش اطمینان از عدم قرائت قرائت از نسخههای x مورد یا برخی از پنجرههای زمانی مشخص، پیشوند ثابت را افزایش میدهد
- سازگاری قوی (یا به صورت خطی) تضمین میکند که مشتریان همیشه آخرین نوشتههای متعهد جهانی را میخوانند
سطح سازگاری مطلوب در سطح حساب تعریف شدهاست اما با استفاده از یک سرصفحه خاص HTTP یا ویژگی مربوطه که توسط SDKها نشان داده میشود، میتوان آن را بر اساس درخواست در نظر گرفت. هر پنج سطح سازگاری با استفاده از زبان مشخصات TLA + مشخص شده و تأیید شدهاند، با اینکه مدل TLA + در GitHub منبع بازدارد.[۱۳]
چند استاد[ویرایش]
مدل توزیع اصلی Cosmos DB شامل یک منطقه نوشتن است، و تمام مناطق دیگر فقط نسخههای خواندنی هستند. در مارس ۲۰۱۸، یک قابلیت جدید چندرسانه ای اعلام شد که به چندین منطقه امکان نوشتن کپی در یک استقرار جهانی را میدهد. تعارضات احتمالی ادغام که ممکن است هنگام ایجاد مناطق مختلف نوشتن همزمان ایجاد شود، نوشتن متناقض را میتوان با خط مشی پیش فرض آخرین نوشتن برندهها یا یک عملکرد جاوا اسکریپت سفارشی حل کرد.
فروشگاه تحلیلی[ویرایش]
این ویژگی که در ماه مه سال ۲۰۲۰ اعلام شد[۱۴] یک فروشگاه ستونی کاملاً منفرد برای امکان تجزیه و تحلیل مقیاس بزرگ در برابر دادههای عملیاتی در Azure Cosmos DB است، بدون اینکه هیچ تأثیری بر حجم کاری معاملات آن داشته باشد. این ویژگی به چالشهای پیچیدگی و تأخیری که در خطوط لوله ETL سنتی برای داشتن پردازش تحلیلی آنلاین بهینهسازی شده برای ذخیرهسازی دادهها با همگام سازی خودکار دادههای عملیاتی در یک ستون جداگانه و مناسب برای پرس و جوهای تحلیلی در مقیاس بزرگ برای انجام بهینهسازی شده، انجام میشود، برای خطوط لوله ETL سنتی اتفاق میافتد. در نتیجه، تأخیر چنین پرسشهایی را بهبود میبخشد.
با استفاده از Microsoft Azure Synapse Link[۱۵] برای Cosmos DB، میتوان با پیوند مستقیم به فروشگاه تحلیلی Azure Cosmos DB از Synapse Analytics، راه حلهای پردازش تراکنش و تحلیلی ترکیبی بدون ETL ساخت. این امکان را فراهم میکند تا نزدیک به زمان واقعی تجزیه و تحلیل مقیاس بزرگ را مستقیماً روی دادههای عملیاتی اجرا کنید.
پذیرایی[ویرایش]
تحقیقات گارتنر، مایکروسافت را به عنوان رهبر سیستمهای مدیریت پایگاه داده عملیاتی Magic Quadrant در سال ۲۰۱۶ معرفی میکند[۱۶] و در نوشتن آنها از قابلیتهای منحصر به فرد Cosmos DB نام میبرد.
موارد استفاده در دنیای واقعی[ویرایش]
این سرویسهای مایکروسافت از Cosmos DB استفاده میکنند:[۱۷] Microsoft Office، Skype، Active Directory، Xbox , MSN.
در ساخت یک برنامه / سیستم با مقاومت بیشتر در سطح جهانی، Cosmos DB با سایر خدمات Azure مانند Azure App Services و Azure Traffic Manager ترکیب میشود.[۱۸]
Cosmos DB Profiler[ویرایش]
ابزار بهینهسازی هزینه ابری Cosmos DB Profiler نمایش دادههای ناکارآمد داده را در تعاملات بین یک برنامه و پایگاه داده Cosmos DB آن شناسایی میکند. پروفایل ساز به کاربران نسبت به هدر رفتن عملکرد و هزینههای بیش از حد ابر ابر میدهد. همچنین توصیه میکند که چگونه آنها را با جدا کردن و تجزیه و تحلیل کد و هدایت کاربران به مکان دقیق، حل کنید.[۱۹]
محدودیتها[ویرایش]
- SQL بسیار محدود است. تجمع محدود به توابع COUNT , SUM , MIN , MAX , AVG اما هیچ پشتیبانی از GROUP BY یا سایر قابلیتهای تجمع در سیستمهای پایگاه داده وجود ندارد. با این حال، میتوان از روشهای ذخیره شده برای پیادهسازی قابلیت تجمیع در پایگاه داده استفاده کرد.[۲۰]
- پیوستن SQL بین "جداول" امکانپذیر نیست،
- فقط برای انواع دادههای خالص JSON پشتیبانی میشود. از همه مهمتر، Cosmos DB فاقد پشتیبانی از دادههای زمان تاریخ است که شما را ملزم به ذخیره این دادهها با استفاده از انواع داده موجود میکند. به عنوان مثال، میتوان آن را به عنوان یک رشته ISO-8601 یا عدد صحیح دوره ذخیره کرد. MongoDB، پایگاه دادهای که Cosmos DB اغلب با آن مقایسه میشود، JSON را در مشخصات سریال دودویی BSON خود گسترش دادهاست تا دادههای زمان تاریخ و همچنین انواع عدد سنتی، عبارات منظم و تعریف نشده را پوشش دهد. با این حال، بسیاری بحث میکنند [ چه کسی؟ ]اینکه Cosmos DB انتخاب JSON خالص است در واقع یک مزیت است زیرا برای برنامههای REST API مبتنی بر JSON و موتور جاوا اسکریپت که در پایگاه داده تعبیه شدهاست، مناسب تر است.
منابع[ویرایش]
رده:نواسکیوال رده:پایگاههای داده مبتنی بر سند
This article "Cosmos DB" is from Wikipedia. The list of its authors can be seen in its historical and/or the page Edithistory:Cosmos DB. Articles copied from Draft Namespace on Wikipedia could be seen on the Draft Namespace of Wikipedia and not main one.
- ↑ "Azure Cosmos DB". Microsoft Azure. Microsoft. Retrieved 9 July 2017.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ rafats. "Working with the change feed support in Azure Cosmos DB". docs.microsoft.com (به English). Retrieved 2018-12-13.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ "Azure Cosmos DB API now supports MongoDB version 3.6". azure.microsoft.com (به English). Retrieved 2020-02-11.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ "Introduction to the Azure Cosmos DB etcd API". docs.microsoft.com (به English). Retrieved 2020-06-10.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ LalithaMV. "SQL language syntax in Azure Cosmos DB". docs.microsoft.com (به English). Retrieved 2018-12-13.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ Maccherone, Larry. "Announcing documentdb-lumenize". blog.lumenize.com. Retrieved 2016-12-11.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ "Using Azure DocumentDB and ASP.NET Core for extreme NoSQL performance". auth0.com.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ "Provisioned Throughput: Request Units in Azure Cosmos DB". docs.microsoft.com. Retrieved 2019-07-21.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ "Provision throughput on containers and databases". docs.microsoft.com. Retrieved 2019-07-21.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ kiratp. "How to distribute data globally with Azure Cosmos DB". docs.microsoft.com. Retrieved 2017-08-22.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ "Diving Deep Into Different Consistency Levels Of Azure Cosmos DB". www.c-sharpcorner.com. Retrieved 2018-12-13.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ syamkmsft. "Tunable data consistency levels in Azure Cosmos DB". docs.microsoft.com. Microsoft. Retrieved 2017-08-22.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ GitHub - Azure/azure-cosmos-tla: Azure Cosmos TLA+ specifications., Microsoft Azure, 2018-12-09, retrieved 2018-12-13صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ "Microsoft Announces a New Pricing Model Option for Azure Cosmos DB and More Capabilities". www.infoq.com. Retrieved 2020-06-20.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ "A closer look at Azure Synapse Link". www.zdnet.com. Retrieved 2017-04-15.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ "Magic Quadrant for Operational Database Management Systems". www.gartner.com. Retrieved 2016-12-11.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ http://www.vldb.org/pvldb/vol8/p1668-shukla.pdf
- ↑ Pietschmann, Chris. "Building Globally Resilient Apps with Azure App Service and Cosmos DB". Build5Nines.com. Opsgility. Retrieved 30 January 2018.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ "Cosmos DB Profiler". hibernatingrhinos.com. Hibernating Rhinos. Retrieved 2020-05-20.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ "Add Group By support for Aggregate Functions". feedback.azure.com. Retrieved 2019-03-31.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.