Skip to content

مدل‌سازی داده NoSQL توضیح داده شده

الگوهای مدل‌سازی برای پایگاه‌های داده document، key-value، wide-column، graph و vector — چه زمانی embed، reference، denormalize یا bucket کنید.

پایگاه‌های داده NoSQL اسکیمای ثابت و join را با مقیاس‌پذیری افقی معامله می‌کنند. هر خانواده روابط را به روش خودش مدل می‌کند، پس الگوی دسترسی — نه فرم نرمال — است که ساختار را دیکته می‌کند.

جدول مرجع · 28 مورد
28 of 28 rows
Document
ساب‌سندهای تودرتو درون یک سند والد زندگی می‌کنند، نه در جدول‌های جداگانه.رابطه‌های one-to-few که با هم خوانده می‌شوند. یک سفارش با اقلام آن. یک کاربر با سه آدرس.
یک id خارجی ذخیره کنید، نه خود داده. آن را با یک خواندن دوم یا $lookup حل کنید.زیرموجودیت‌های بزرگ، مشترک یا دارای به‌روزرسانی مستقل. پیوندهای چند-به-چند بین collectionها.
والد یک آرایه کوتاه از فرزندان را embed می‌کند؛ کل مجموعه به‌صورت یک سند جا می‌شود و بارگذاری می‌شود.چند شماره تلفن یا تنظیمات روی یک پروفایل. یک خواندن، والد و فرزندان را برمی‌گرداند.
فرزندان در collection خودشان زندگی می‌کنند؛ هر فرزند id والد را دارد، یا والد یک آرایه id محدود نگه می‌دارد.مجموعه‌هایی که برای embed کردن زیادی بزرگ یا زیادی مستقل‌اند. فرزندان را با id والد پرس‌وجو کنید.
فرزند id والد را ذخیره می‌کند؛ والد هرگز فرزندان را فهرست نمی‌کند چون مجموعه بی‌کران است.رویدادها، لاگ‌ها یا رأی‌های متصل به یک هاست یا کاربر. فرزندان را با id والد فیلتر و صفحه‌بندی کنید.
سندهایی از نوع موجودیت متفاوت یک collection را به اشتراک می‌گذارند و با یک فیلد type از هم تشخیص داده می‌شوند.نظرها یا اعلان‌هایی که به انواع والد متصل‌اند و همگی با یک روش پرس‌وجو می‌شوند.
چند موجودیت حدی از شکل مشترک جدا می‌شوند تا اندازه یا ترافیکشان بقیه را منحرف نکند.حساب‌های معروف که فهرست دنبال‌کننده‌ها یا شمارنده‌هایشان از سند عادی بزرگ‌تر می‌شود.
هر بازنگری سندی جدید با همان id و شماره نسخه افزایشی است؛ پرس‌وجو آخرین را برمی‌گزیند.ردپای حسابرسی و تاریخچه ویرایش، جایی که بازنگری‌های قدیمی قابل پرس‌وجو می‌مانند.
مقادیر مشتق در زمان نوشتن محاسبه و کنار داده‌ای که خلاصه می‌کنند ذخیره می‌شوند.جمع‌ها، امتیازها و top-Nهایی که وگرنه در هر خواندن یک aggregation اجرا می‌کردند.
Key-value و wide-column
اصطلاح طراحی DynamoDB: فرو بردن انواع بسیاری از موجودیت در یک جدول با کلیدهای partition و sort بارگذاری‌شده.بازیابی اقلام ناهمگون در یک پرس‌وجو بدون join.
یک صفت کلید به انواع بسیاری از موجودیت خدمت می‌کند و با پیشوندهایی مثل USER# یا ORDER# مشخص می‌شود.طراحی‌های single-table. اقلام مرتبط را زیر یک partition خوشه‌بندی و در یک پرس‌وجو بازیابی کنید.
کلید partition ردیف‌ها را میان گره‌ها پخش می‌کند؛ کلید sort هر partition را مرتب می‌کند.Cassandra و DynamoDB. پویش بازه‌ای، لاگ‌های مرتب، کلیدهای ترکیبی سلسله‌مراتبی.
چند صفت را در یک sort key جداشده انباره کنید — country#region#city — تا تطبیق پیشوند در سلسله‌مراتب پایین برود.سلسله‌مراتب و فیلترهای چندوجهی. یک پرس‌وجوی بازه‌ای مرتب جای بسیاری از lookupهای ایندکس‌شده را می‌گیرد.
رویدادها را در پنجره‌های ثابت — ساعت، روز، ماه — زیر partitionها یا جدول‌های اختصاصی گروه‌بندی کنید.متریک‌ها، لاگ‌ها و تله‌متری IoT. اندازه partition را محدود و داده سرد را قدیمی می‌کند.
فیلدهای پرمخاطب-خواندنی را میان رکوردها تکرار کنید تا پرس‌وجو هرگز به دنبال lookup دوم نرود.بارهای کاری خواندن‌محور که در آنها سازگاری نهایی قابل تحمل و ذخیره‌سازی ارزان است.
یک ایندکس ثانویه ساخته‌شده روی صفتی که فقط برخی اقلام دارند؛ اقلام بدون آن هرگز وارد ایندکس نمی‌شوند.مسیرهای دسترسی جایگزین. یافتن زیرمجموعه sparse — سفارش‌های باز، اقلام ارسال‌نشده — بدون پویش کامل.
ابتدا پرس‌وجوهای دقیق را بنویسید؛ چیدمان جدول از آنها مشتق می‌شود، نه از موجودیت‌ها یا فرم نرمال.کار اسکیمای Cassandra و DynamoDB. یک جدول به ازای هر خانواده پرس‌وجو؛ مدل داده سؤال را کپی می‌کند.
پرس‌وجو باید همزمان به partitionها یا گره‌های زیادی بخورد چون هیچ کلیدی با سؤال مطابقت ندارد.بویی است که باید با طراحی حذف شود، نه هدف. جدول را دوباره کلیدبندی کنید تا پرس‌وجوی رایج روی یک partition بیفتد.
کپی‌ها در زمان نوشتن به نمای هر خواننده هدایت می‌شوند، یا در زمان خواندن گردآوری و ادغام می‌شوند.فیدها و تایم‌لاین‌ها. fan-out زمان نوشتن برای مخاطبان کوچک، زمان خواندن برای مخاطبان عظیم.
نتیجه پرس‌وجوی از پیش ساخته‌شده که به‌عنوان جدول خودش ذخیره و با تغییر پایه به‌روز نگه داشته می‌شود.شکل‌های خواندن جایگزین روی یک مسیر نوشتن. پرس‌وجوهایی را پاسخ می‌دهد که جدول پایه نمی‌تواند.
Graph
هر یال یک ردیف یا tuple است که از گره مبدأ به گره مقصد اشاره می‌کند.پایگاه‌های graph و property. جست‌وجوی دوستِ دوست، مسیریابی، پیشنهادها.
هر رابطه سندی در collection خودش است که idهای from و to به‌علاوه صفات پیوند را حمل می‌کند.گراف‌ها در پایگاه‌های سندگرا. صفات روی خود پیوند — امتیاز، نقش، مهر زمانی.
هر گره شمارنده‌های چپ و راست از یک پیمایش depth-first ذخیره می‌کند؛ زیردرخت در بازه والدش زندگی می‌کند.درخت‌های خواندن‌محور. یک پرس‌وجوی BETWEEN یک زیردرخت را برمی‌گرداند؛ درج‌ها پیمایش را دوباره شماره‌گذاری می‌کنند.
یک جدول اختصاصی هر جفت جد-به-نوه را ثبت می‌کند، شامل هر گره در عمق صفر.پرس‌وجوهای کل شاخه در هر عمقی. joinهای ساده، با بهای ذخیره‌سازی و نگهداری.
گراف‌های ویژگی، صفات key-value را به گره‌ها و یال‌ها می‌چسبانند؛ RDF همه‌چیز را به‌صورت سه‌تایی‌های فاعل-محمول-مفعول بیان می‌کند.گراف‌های ویژگی برای پیمایش غنی (Neo4j)؛ RDF برای داده‌های باز پیوندی و تبادل آنتولوژی.
Vector
یک آرایه float با ابعاد بالا کنار metadata می‌نشیند. یک ایندکس ANN نزدیک‌ترین همسایه‌ها را پیدا می‌کند.جست‌وجوی معنایی، بازیابی RAG، پیشنهادها و شباهت روی محتوای ساخت‌نیافته.
سندهای منبع تقسیم می‌شوند — بر اساس اندازه، هم‌پوشانی یا ساختار — پیش از آنکه هر تکه جداگانه embed شود.کیفیت بازیابی RAG. اندازه chunk دقت را با بازیابی معامله می‌کند؛ هم‌پوشانی از جمله‌های بریده محافظت می‌کند.
شباهت برداری dense در کنار تطبیق کلیدواژه اجرا می‌شود؛ دو فهرست رتبه‌بندی‌شده در یک نتیجه ادغام می‌شوند.پرس‌وجوهایی که همزمان به اصطلاح دقیق و معنا نیاز دارند، با فیلترهای metadata روی آن.