چیزهایی که لازم است دربارهٔ JSON در MySQL بدانید

چیزهایی که لازم است دربارهٔ JSON در MySQL بدانید

افزودن دیتاتایپ JSON به MySQL، استفاده از این دیتابیس رابطه‌ای (Relational) را آسان‌تر کرده و فاصلهٔ میان دیتابیس‌های SQL و NoSQL را کمتر کرده است. زمانی را تصور کنید که فقط یک کامپیوتر در دسترس بود. بعد از مدتی، فردی پیدا شد و کامپیوتر دوم را ساخت و قصد داشت بخشی از کدهای درون کامپیوتر اول را در کامپیوتر دوم داشته باشد. این یعنی ما به راهی برای انتقال اطلاعات بین دو کامپیوتر نیاز داشتیم، بدون هیچ‌گونه وابستگی به سخت‌افزارهای مورد استفاده در آن دو سیستم. از آن پس، تعداد زیادی رمزنگاری کاراکتر و استانداردهایی برای مبادلهٔ اطلاعات بوجود آمد (مانند ASCII ،EBCIDIC ،SGML ،XML و غیره) که هر کدام‌شان زمانی در اوج بوده‌اند اما این در حالی است که در چند سال اخیر، JavaScript Object Notation یا به اختصار JSON، در میان دولوپرها از محبوبیت قابل‌توجهی برخوردار شده است.

تا پیش از MySQL 5.7، می‌توانستید دیتاهایی با فرمت JSON را در فیلدهایی از جنس تکست ذخیره کنید؛ اما جستجو کردن در استرینگ‌های بزرگ کار طاقت‌فرسایی است و نوشتن رجیکس برای یافتن مقادیر مورد نظر درون رشته‌ها، می‌تواند تجربهٔ خسته‌کننده‌ای باشد (برای آشنایی بیشتر با مفهوم رجیکس، به مقالهٔ راهنمای رگولار اکسپرشن (Regular Expression) یا ریجکس (Regex) برای برنامه‌نویسان مبتدی مراجعه نمایید.) در این صورت اگر یک قسمت از استرینگ را تغییر دهید، باید کل استرینگ را درون دیتابیس بازنویسی کنید که این کار، کاملاً ناکارامد است.

JSON در MySQL
MySQL دیتاتایپی نیتیو به نام JSON را در نسخهٔ MySQL 5.7 معرفی کرد؛ بنابراین همانند اعداد صحیح، کاراکترها، یا اعداد حقیقی، راهی برای ذخیرهٔ کامل دیتاهایی از جنس JSON داخل ستونی در جدول یک دیتابیس به‌وجود آمد و این دیتای جیسونی، می‌تواند حجمی به اندازهٔ یک گیگابایت داشته باشد!

در همین راستا، دیتابیس اطمینان حاصل کرده که اعتبار دیتای JSON قابل‌قبول است و سپس آن‌را به فرمت باینری ذخیره کرده که برای جستجو کردن نیز بهینه‌سازی شده است. این دیتاتایپ جدید، احتمالاً بیش از سایر ویژگی‌ها باعث پیشرفت MySQL شده است (MySQL 8 در حال حاضر در مرحلهٔ توزیع برای دولوپرها به سر می‌برد و قرار است چندین فانکشن و عملکرد جدید را نیز در همین ارتباط اضافه نماید.)

همچنین این دیتاتایپ، بیش از 20 فانکشن را به‌همراه دارد؛ این فانکشن‌ها جفت‌های کلید-مقدار (یا Key-Value) را از درون دیتای مد نظر استخراج می‌کنند، اطلاعات را آپدیت می‌نمایند و در مورد دیتاها، متادیتا تهیه می‌کنند و درنهایت ستون‌های بدون فرمت JSON را به‌صورت خروجی JSON تحویل می دهند. علاوه بر این، این اطلاعات در ذهن دولوپر بسیار راحت‌تر از REGEX تحلیل می‌شود (متادیتا داده‌های کلی است که دربارهٔ خود داده‌ها تهیه می‌شود؛ مثلاً متادیتای یک فایل صوتی می‌تواند اطلاعاتی شامل نام خواننده، آلبوم، سال تهیه، ‌ژانر و کپی‌رایت و … را دربرگیرد.)

فانکشن JSON_PRETTY_PRINT خروجی را به‌صورتی که خواناتر باشد تبدیل می‌کند و قرار است بهبودهای مهمی در زمینهٔ بازنویسی قسمت‌هایی از دیتا، بدون نیاز به بازنویسی کل داکیومنت صورت گیرد.

ذخیرهٔ اطلاعات به شکلی بدون فرمت، یکی از ویژگی‌های NoSQL بوده است؛ بسیاری از دیتابیس‌های رابطه‌ای مثل Oracle ،SQL server ،Postgresql و موارد دیگر هم دیتاتایپ‌های JSON را دربر می‌گیرند تا فاصلهٔ میان NoSQL و SQL را کمرنگ‌تر نمایند.

Document Store چیست؟
مدت کوتاهی بعد از JSON، ویژگی MySQL Document Store پدیدار شد. این ویژگی برای دولوپرهایی که با SQL آشنایی ندارند ولی می‌خواهند از دیتابیس استفاده کنند طراحی شده است.

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

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

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

اگر قصد امتحان کردن این ویژگی را دارید می‌توانید با دانلود MySQL و سپس برای این‌که پشتیبانی از ستون‌های JSON را نیز داشته باشید، با دانلود MySQL Workbench کار خود را شروع نمایید.

منبع


مرتضی صمدی