صفحه نخست --> پایگاه داده غیر رابطه ای (NOSQL) --> مدل داده ای و تعریف شِما در کاساندرا (Data Model)

مدل داده ای و تعریف شِما در کاساندرا (Data Model)

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

آرایه
array
  • ساختار آرایه ای در Cassandra

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

با این حال، با این ساختار تنها می‌توان به یک مفهوم (مثلاً یک شخص) اشاره شود و راهی برای ذخیره‌سازی داده‌های چندگانه (مثلاً اشخاص مختلف) در یک ساختار منفرد را در اختیار نخواهیم داشت. به بیان دیگر، ما به ستون‌هایی احتیاج داریم که در آن‌ها نیاز نباشد تا نام آن‌ها همواره تکرار شود و همچنین، به مفهومی نیاز داریم تا بتوانیم گروهی از ستون‌ها را در یک قالب مفهومی دسته‌بندی کنیم.

آرایه دو بعدی
آرایه دو بعدی

راه‌حل ساده برای اضافه کردن مقادیر چندگانه به ستون‌ها، سطرها هستند که می‌توانند یک شناسه انحصاری به نام کلید سطر یا Row Key را نیز در اختیار داشته باشند. کاساندرا، مفهومی به ‌نام Column Family را معرفی کرده که برای تقسیم‌بندی گروهی از ستون‌های مرتبط با یکدیگر در نظر گرفته‌شده است و مثالی از آن یک Column Family برای مشخصات اشخاص است. در اصل، مفهوم Column Family در کاساندرا به نوعی شبیه به مفهوم جدول در مدل سنتی رابطه‌ای است. با کنار هم قرار دادن مباحث بالا، ساختار داده‌ای کلی کاساندرا ازاین‌قرار خواهد بود:

مدل داده کسندرا
مدل داده کسندرا

ستون‌ها که جفت‌های Name/Value هستند و Column Family‌ها که حاوی سطرهایی هستند که مجموعه‌های ستونی مشابه، اما نه دقیقاً یکسان با تعداد ستون‌های موجود در سیستم، هستند. نکته مهم دیگری که در کاساندرا مطرح است آن است که بر‌خلاف پایگاه‌های داده‌ سنتی که در آن‌ها نام ستون‌ها باید تنها یک متغیر رشته‌ای باشد، نام ستون‌ها و مقادیر ذخیره‌شده در سطرهای مرتبط می‌توانند علاوه بر نوع رشته‌ای، مقادیر Integer، UUID یا هر نوع آرایه بایتی دیگری نیز باشند. این قابلیت، امکان ذخیره‌سازی داده‌های ارزشمند در کلیدها (خود ستون‌ها) را علاوه بر مقادیر آن‌ها (سطرها) فراهم می‌سازد که کاربردهای پیشرفته‌ای ، به‌خصوص در زمینه ایندکس کردن دارد.

مدل داده کاساندرا
مدل داده کاساندرا

Super column:

واحدهای دیگری نیز برای گروه‌بندی ساختار پایگاه داده وجود دارند که با نام Super Column شناخته می‌شوند. این اَبَر‌ستون‌ها، مجموعه‌ای از ستون‌های مرتبط را در یک Column Family شامل می‌شوند که می‌توان از آن‌ها به نقشه­ نقشه‌ها تعبیر کرد. شکل زیرین نمایی از مدل داده‌ای کامل کاساندرا را نشان می‌دهد. به یاد داشته باشید که ستون‌ها در کاساندرا در اصل یک بعد دیگر با نام timestamp نیز دارند که ذخیره کننده آخرین به‌روزرسانی داده‌های درون ستون است. این برچسب زمانی، مقداری خودکار و یک متادیتا نیست، بلکه مقداری است که باید توسط کلاینت فراهم شود و قابلیت پرس‌وجو نیز ندارد، بلکه برای جلوگیری از اختلاط داده‌ها مورد استفاده قرار ‌می‌گیرد. توجه کنید، سطرها برچسب زمانی ندارند، بلکه تنها ستون‌های منفرد برچسب زمانی را ذخیره می‌کنند.

super column family
super column family

هر کلاستر، نگه‌دارنده‌ (یک یا چند) مفهوم کلی و انتزاعی با نام Keyspace است که بزرگ‌ترین مفهوم داده‌ای در کاساندرا به شمار می‌آید و معادل مفهوم Database در مدل RDBMS است. هر فضای کلیدی خصوصیات مختلفی (مانند فاکتور جایگزینی، راهبرد جایگزینی، Column Family‌ها و…) دارد که چگونگی رفتار آن را در کل کلاستر تعیین می‌کنند.

مفهوم بعدی، Column Family‌ها هستند که نگه‌دارنده مجموعه مرتبی از سطرهای داده‌ای است و هر کدام از آن‌ها، حاوی مجموعه مرتبی از ستون‌های داده‌ای هستند. مفهوم Column Family را می‌توان به نوعی معادل جدول‌ها در مدل رابطه‌ای به شمار آورد، اما توجه کنید که با جدول‌ها بسیار متفاوت هستند. با توجه به مفهوم کلید سطر و مفهوم ستون که در بخش قبل نیز مطرح شدند، به ساختار ۴ بعدی معمول در کاساندرا خواهیم رسید که نقشی اساسی را در دسترسی به داده‌ها ایفا می‌کند:

[Keyspace][ColumnFamily][Key][Column]

Data Modeling Cassandra Architecture
Data Modeling Cassandra Architecture

برای روشن شدن مطلب، می‌توانیم یک مثال برای ذخیره داده‌ها در کاساندرا مطرح کنیم. برای این منظور، یک Column Family با نام Hotel برای ذخیره‌سازی داده‌های چند هتل، مطابق نوشتار JSON ارائه شده در زیر را در نظر می‌گیریم:

Hotel {
key: THE_043 { name: Espinas, phone: 021-66352565,
address: Keshavarz Blvd., city: Tehran, state: Tehran}
key: THC_011 { name: Evin, phone: 021-22668562,
address: Chamran Highway, city: Tehran, state: Tehran}
key: HRD_021 { name: Dariush, phone: 0764-4223659,
address: Dariush Sq. , city: Kish, state: Hormozgan}
key: GIH_042 { name: Height, phone: 0131-5262266,
address: Namak Abrood, city: Chaloos, state: Gilan}
}

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

=> (column=state, value=Hormozgan, timestamp=۳۸۹۴۱۶۶۱۵۷۰۳۱۶۵۱)
=> (column=phone, value=0764-۴۲۲۳۶۵۹, timestamp=۳۸۹۴۱۶۶۱۵۷۰۳۱۶۵۱)
=> (column=name, value=Dariush, timestamp=۳۸۹۴۱۶۶۱۵۷۰۳۱۶۵۱)
=> (column=city, value=Kish, timestamp=۳۸۹۴۱۶۶۱۵۷۰۳۱۶۵۱)
=> (column=address, value= Dariush Sq., timestamp=۳۸۹۴۱۶۶۱۵۷۰۳۱۶۵۱)
Returned ۵ results.

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

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *