ایندکس ها یکی از ابزارهای قدرتمند Datomic برای اهرم نسبت به داده های شما هستند. شاخص های Datomic در پشت صحنه برای اجرای پرس و جو و اشخاص Datalog استفاده می شوند و می توان آنها را مستقیماً از طریق روش های پایگاه داده و اتصال به آنها دسترسی پیدا کرد.
مثالهای موجود در این سند از زیر مجموعه ساده ای از Datoms در پایگاه داده نمونه موسیقی Brainz استفاده می کنند.
اصول اولیه
شاخص های Datomic در حال پوشش شاخص ها هستند. این بدان معنی است که این شاخص در واقع حاوی Datoms است ، نه فقط یک اشاره گر برای آنها. بنابراین ، هنگامی که Datoms را در فهرست پیدا می کنید ، خود Datoms را دریافت می کنید ، نه فقط یک اشاره به محل زندگی آنها. این امر به Datomic اجازه می دهد تا از طریق شاخص های خود به Datomic بسیار کارآمد دسترسی پیدا کنند.
Datomic چهار شاخص را که حاوی مجموعه های سفارش داده شده از داده ها است ، حفظ می کند. هر یک از این شاخص ها بر اساس ترتیب مرتب سازی شده نامگذاری شده است. E ، A و V همیشه به ترتیب صعودی طبقه بندی می شوند ، در حالی که T همیشه در حال نزولی است:

شاخص EAVT دسترسی کارآمد به همه چیز در مورد یک موجود خاص را فراهم می کند. از نظر مفهومی این بسیار شبیه به سبک دسترسی به ردیف در یک پایگاه داده SQL است ، به جز این که نهادها می توانند دارای ویژگی های دلخواه باشند و سپس به مجموعه ای از پیش تعریف شده از ستون ها محدود شوند.
مثال زیر تمام حقایق مربوط به موجودیت 42 را با هم گروه بندی می کند:

EAVT همچنین در جستجوی کارشناسی ارشد/جزئیات مفید است ، زیرا منابع مربوط به اشخاص جزئیات فقط در مقابل ویژگی های مقیاس پذیر موجودیت اصلی هستند. با این وجود ، Datomic شناسه های موجودیت را به گونه ای اختصاص می دهد که وقتی سوابق استاد و جزئیات در همان معامله ایجاد می شوند ، در EAVT جمع می شوند.
شاخص AEVT دسترسی کارآمد به تمام مقادیر را برای یک ویژگی معین ، قابل مقایسه با سبک دسترسی به ستون سنتی فراهم می کند. در جدول زیر ، توجه کنید که چگونه همه: ویژگی های انتشار/نام با هم گروه بندی می شوند. این به Datomic اجازه می دهد تا به طور مؤثر برای همه مقادیر ویژگی: انتشار/نام ، پرس و جو کند ، زیرا آنها در این فهرست در کنار یکدیگر زندگی می کنند.

شاخص AVET دسترسی کارآمد به ترکیبات خاص ویژگی و ارزش را فراهم می کند. مثال زیر بخشی از شاخص AVET را نشان می دهد که به جستجوی: انتشار/نام اجازه می دهد.
شاخص AVET برای نگهداری از سایر شاخص ها گران تر است و به همین ترتیب تنها شاخصی است که به طور پیش فرض فعال نمی شود. برای حفظ AVET برای یک ویژگی ، مشخص کنید: db/index true (یا مقداری برای: db/منحصر به فرد) هنگام نصب یا تغییر ویژگی.
شاخص AVET همچنین از API IndexRange پشتیبانی می کند ، که تمام مقادیر ویژگی ها را در یک محدوده خاص باز می گرداند.

شاخص VAET شامل تمام و تنها داده های آنها است که ویژگی آن دارای: db/valueetype از: db. type/ref است. این همچنین به عنوان شاخص معکوس شناخته می شود ، زیرا امکان پیمایش کارآمد روابط را به صورت معکوس فراهم می کند. اگر Beatles Entity 100 است ، می توانید در جدول زیر مشاهده کنید که چگونه نسخه های آنها در این فهرست گروه بندی می شوند.

API Datoms
API Datoms دسترسی مستقیم به یکی از شاخص های Datoms را فراهم می کند. با توجه به یک نام فهرست و مشخصات جزئی از Datom ، Datoms یک قابل تکرار را بیش از همه Datoms مطابق با مشخصات موجود در فهرست باز می گرداند.
اجزای Datom به همان ترتیب شاخص مشخص شده اند. مثال زیر به AVET اشاره دارد ، بنابراین اولین مؤلفه: Account/Balance مؤلفه A را مشخص می کند و یک تکرار کننده را بر روی تمام مانده های موجود در سیستم باز می گرداند.
تماس با Datoms بدون هیچ مؤلفه کل شاخص را برمی گرداند. از آنجا که EAVT و AEVT شامل هر Datom در پایگاه داده می شوند ، از هر یک از این شاخص ها می توان برای پیاده روی کل پایگاه داده استفاده کرد:
Log Datoms را به موقع نشان می دهد. ورود به سیستم برخلاف سایر فهرست ها از چند طریق است.
- ورود به سیستم مجموعه ای از معاملات سفارش داده شده است ، که در آن هر معامله شامل مجموعه ای از داده های بدون هماهنگ است.
- ورود به سیستم به عنوان روشی در اتصال ، نه در پایگاه داده در دسترس است.
- ورود به سیستم به طور خودکار توسط پرس و جو استفاده نمی شود. در عوض ، از طریق پرس و جو از طریق توابع پرس و جو TX-IDS و TX-DATA قابل دسترسی است.
برای جزئیات بیشتر در مورد استفاده از ورود به سیستم ، به سند Log API مراجعه کنید.
پیاده سازی
فقط جمع می شود
Datomic فقط جمع می شود. اطلاعات با گذشت زمان جمع می شوند و تغییر با تجمع جدید و نه با اصلاح یا حذف قدیمی نشان داده می شود. به عنوان مثال ، "حذف" نه با دور کردن چیزی ، بلکه با افزودن یک انقباض جدید اتفاق می افتد.
در سطح اجرای ، این بدان معنی است که بخش های شاخص و ورود به سیستم تغییر ناپذیر هستند و می توانند مستقیماً بدون هماهنگی توسط هر فرآیند در یک سیستم داده استفاده شوند. این دلیلی است که فرآیندهای Datomic به عنوان همسالان خوانده می شوند - همه فرآیندها دسترسی معادل به اطلاعات موجود در سیستم دارند. علاوه بر این ، از آنجا که شاخص ها تغییر ناپذیر هستند ، می توانند در فرآیندهای کاربردی ذخیره شوند.
توجه داشته باشید که فقط جمع آوری یک ویژگی معنایی است و همانند Append-only نیست ، که یک ویژگی ساختاری است که نحوه نگارش داده ها را توصیف می کند. Datomic یک سیستم فقط ضمیمه نیست و از ویژگی های عملکرد مرتبط با سیستم های فقط ضمیمه برخوردار نیست.
تجمع کارآمد
API Datomic شاخص ها را به عنوان مجموعه های مرتب شده از داده ها یا معاملات به مصرف کنندگان ارائه می دهد. با این حال ، Datomic برای نوشتن کارآمد در زمان معامله طراحی شده است و برای استفاده با مجموعه داده ها بسیار بزرگتر از آنچه در حافظه قرار دارد. برای تحقق این اهداف ، Datomic:
- شاخص های فروشگاه ها به عنوان درختان کم عمق بخش ها ، که در آن هر بخش به طور معمول حاوی هزاران داده است.
- بخش ها را ذخیره می کند ، نه Datoms خام ، در ذخیره سازی.
- درختان Datom را فقط گاهی از طریق مشاغل نمایه سازی پس زمینه به روز می کند.
- از یک الگوریتم نمایه سازی تطبیقی استفاده می کند که رابطه زیرنویس با اندازه کل پایگاه داده دارد.
- درختان شاخص را با نمایندگی در حافظه از تغییرات اخیر ادغام می کند تا همسالان شاخص های به روز را ببینند.
- ورود به سیستم برای هر معامله (D در اسید) را به روز می کند
- بهینه سازی نامه های ورود به سیستم با استفاده از ساختارهای داده اضافی تنظیم شده برای اجازه دادن به O (1) ذخیره سازی در هر معامله.
پرس و جو
برای پرس و جوهایی که داده های پشتیبانی کننده آنها در حال حاضر در حافظه پنهان است ، Datomic می تواند با سرعت حافظه به Datoms دسترسی پیدا کند ، تأخیر که با پایگاه داده های مشتری/سرور امکان پذیر نیست. هنگامی که همه Datom های حامی در حافظه پنهان نیستند ، ضریب انشعاب گسترده درختان شاخص تضمین می کند که حداکثر 1-2 خوانده شده از ذخیره سازی برای یافتن بخش های لازم ضروری است.
پرس و جو
نمودار زیر یک نمونه داده مبتنی بر ابر را با استفاده از DynamoDB برای لایه ذخیره سازی خود نشان می دهد. استفاده از فهرست در بخش های کتابخانه همکار و سرور همسالان قابل مشاهده است ، که در آن بخش های فهرست ذخیره شده ("حافظه نهان زرد") و با تغییرات اخیر ("شاخص زنده" سبز) ادغام می شوند تا نمای زمان واقعی را برای پرس و جو ارائه دهند.
پارتیشن ها
هر موجودیت Datomic با یک پارتیشن خاص که در ابتدا از طریق Tempid مشخص شده است همراه است. این پارتیشن ها به عنوان یک مکانیسم گروه بندی درشت دانه برای اشخاص عمل می کنند ، به همان اندازه که کابینت های پرونده به عنوان مکانیسم گروه بندی درشت دانه برای پرونده های کاغذی عمل می کنند.
از آنجا که پارتیشن از طریق بیت های بالا در شناسه موجودیت رمزگذاری می شود ، موجودات در همان پارتیشن با هم طبقه بندی می شوند. اگر پارتیشن ها با الگوهای استفاده هماهنگ باشند ، این می تواند عملکرد را بهبود بخشد. به عنوان مثال ، سیستمی را با موجودی ، مشتریان و پارتیشن های سفارش در نظر بگیرید. پرس و جو برای یک مورد خاص در موجودی باعث می شود که یک بخش "موجودی" ذخیره شود و این بخش شامل چند هزار واقعیت مرتبط با موجودی باشد. اگر نمایش داده های موجودی توسط سایر پرس و جوهای موجودی دنبال شود ، این مکان باعث کاهش تعداد بخش هایی می شود که یک همسالان برای ذخیره سازی نیاز دارند.
پارتیشن ها همچنین دو تکنیک را که در سیستم های بزرگتر مفید هستند ، فعال می کنند: اسکن های جدید موجودیت و پارتیشن.
اسکن موجودیت جدید
از آنجا که Datomic اطلاعات مربوط به زمان را ذخیره می کند ، به راحتی می توان سؤالاتی را مطرح کرد که فقط برای اشخاص اخیراً ایجاد شده اعمال می شود. به عنوان مثال ، با استفاده از TxRange از ورود به سیستم ، از نیمه شب شروع به کار در Datomic می کند.
با این حال ، چنین اسکن باید تمام داده های امروزی را در نظر بگیرد ، و هر چیزی را که برای کار مورد نظر بی ارتباط نیست ، فیلتر کند.
اگر در حال طراحی سیستمی هستید که باید در مورد اشخاص جدید خاص (به عنوان مثال چیزی که می خواهد به رویدادهای جدید از یک نوع خاص پاسخ دهد) بدانید ، می توانید از پارتیشن ها به عنوان مکانیسم فیلتر استفاده کنید:
- تمام Datoms را برای یک دسته رویداد به همان پارتیشن اختصاص دهید.
- به جای استفاده از log ، از intidat برای ساخت شناسه رویداد نزدیک به زمان شروع مورد نظر خود استفاده کنید.
- شناسه موجودیت ساخته شده را به دنبال دنبال کردن EAVT ، نهادهای پیاده روی سفارش داده شده توسط زمان ایجاد و به طور ضمنی "فیلتر" با تأثیر پارتیشن بر ترتیب ، عبور دهید.
پارتیشن
Sharding مبتنی بر پارتیشن یک تکنیک برای توزیع بار خواندن با استفاده از موجودیت در سرورهای برنامه است. اگر می توانید در زمان ایجاد) نهادها را به صورت مکانیکی به گروه های مختلف تقسیم کنید ، می توانید به هر گروه یک پارتیشن متفاوت در Datomic بدهید. سپس ، در زمان پرس و جو ، پرس و جوهای مربوط به نهاد مستقیم به سرورهای برنامه های مختلف بر اساس پارتیشن خود. این امر باعث می شود سرورهای برنامه از زیر مجموعه های شاخص کل جدا شوند و به طور قابل توجهی کسری از شاخص را که می تواند در حافظه سرور برنامه باشد ، افزایش دهد.
Sharding مبتنی بر پارتیشن فقط یک بهینه سازی است. نهادهای موجود در هر پارتیشن هنوز هم توسط هر همسالان قابل دستیابی است.
یادداشت های استفاده
- ویژگی هایی که با ارزش پرسیده می شوند باید مشخص شوند: db/index true یا: db/منحصر به فرد.
- ترکیب Datomic از ایندکس ها به طور خودکار از نمایش داده های مرتبط با تعدادی از سبک های مختلف ذخیره سازی ، از جمله ردیف گرا ، ستون گرا ، اسناد گرا ، K/V و نمودار پشتیبانی می کند.
- شاخص های EAVT و VAET Datomic می توانند به طور خودکار روابط موجودیت را در هر دو جهت حرکت دهند ، بنابراین شما نیازی به ایجاد (و نباید) ندارید که دو ویژگی ایجاد کنید که یک رابطه یکسان اما از جهت های مختلف است.
- برنامه های DATOMIC نیازی به انجام هرگونه ذخیره سازی سطح API ندارند. ذخیره سازی عمومی ، همه جا است و به پیکربندی کمی یا بدون آن نیاز دارد.
- برای بانکهای اطلاعاتی به اندازه کافی کوچک ، کل بانک اطلاعاتی در ذخیره های همسالان قرار خواهد گرفت و دسترسی به داده ها را سریعتر از پایگاه داده های مشتری/سرور می کند.
- سربار یک حافظه پنهان همسالان 1-2 بخش است. از Memcached ، چنین واسطه هایی به ترتیب 1 میلی ثانیه است. انبارها از 1 تا 10 یا بیشتر میلی ثانیه متفاوت است.
- Cache Peer Datomic را از عملکرد سیستم ذخیره سازی اساسی عایق می کند. در نتیجه ، شما باید عملکرد ذخیره سازی را تا حدودی کمتر از آنچه ممکن است با سایر سیستم ها وزن داشته باشید ، وزن کنید.
- نمایه سازی پس زمینه باید به اندازه کافی سریع باشد تا از بار معاملات خودداری کند و با جزئیات بیشتری در اسناد ظرفیت مورد بحث قرار می گیرد.
کپی رایت © Cognitect ، یک NU Holdings ، Ltd. Ltd. Datomic® و آرم Datomic علائم تجاری ثبت شده از Cognitect ، Inc Policy Playing Playing < Span> سربار سربار یک حافظه پنهان همسالان 1-2 بخش است. از Memcached ، چنین واسطه هایی به ترتیب 1 میلی ثانیه است. انبارها از 1 تا 10 یا بیشتر میلی ثانیه متفاوت است.
کسب درآمد از فارکس...
ما را در سایت کسب درآمد از فارکس دنبال می کنید
برچسب :
نویسنده : عسلی سهیال
بازدید : <-PostHit->
تاريخ : جمعه
8 ارديبهشت
1402 ساعت: 17:22