چرا SQLite با زبان C کدنویسی شده است؟

چرا SQLite با زبان C کدنویسی شده است؟

SQLite یک سیستم مدیریت پایگاه داده و یک ابزار ذخیره و بازیابی اطلاعات است که از زمان انتشار اولیۀ آن در سال ۲۰۰۰، با زبان برنامه‌نویسی C پیاده‌سازی شده است و جالب است بدانید که تاکنون بهترین زبان برای پیاده‌سازی چنین نرم‌افزارهایی که در قالب یک لایبرری ارائه می‌شوند، زبان C بوده است (در همین راستا، باید بگوییم که در سال ۲۰۱۷ این زبان به عنوان محبوب‌ترین زبان انتخاب شد؛ برای کسب اطلاعات بیشتر، به مقالهٔ زبان C طبق شاخص TIOBE زبان برگزیدهٔ سال ۲۰۱۷ شد مراجعه نمایید). این سیستم مدیریت پایگاه داده #اپن‌سورس بوده و به‌ طور پیوسته در حال بهبود و توسعه است ولی تاکنون هیچ پلَنی برای بازنویسی مجدد آن به زبان‌های دیگر مطرح نشده است!

پرفورمنس بالا، یکی از دلایل استفاده از زبان C برای پیاده‌سازی اس‌کیولایت
دلایل زیادی را می‌توان برای کدنویسی این دیتابیس محبوب با زبان سی برشمرد که به طور مثال، یکی از مهم‌ترین آن‌ها پرفورمنس است. لایبرری سطح پایینی همچون SQLite در فرآیند مدیریت‌ داده‌ها باید سریع باشد؛ فلسفۀ اصلی عملکرد اس‌کیولایت در سیستم‌های کوچک و سریع است و در سیستم‌های بزرگ با حجم بالای اطلاعات و تراکنش‌های زیاد، کارایی خود را از دست می‌دهد! به عبارتی، بزرگ‌ترین عیب اس‌کیولایت کارایی پایین آن در حجم بالای اطلاعات است (جالب است بدانید که #لینوس توروالدز -خالق کرنل لینوکس- نیز از علاقمندان زبان سی است؛ در همین راستا و برای کسب اطلاعات بیشتر، توصیه می‌کنیم به مقالهٔ چرا لینوس توروالدز فکر می‌کند زبان برنامه‌نویسی ++C به درد نمی‌خورد! مراجعه نمایید).

به‌ منظور بررسی پرفورمنس SQLite در ذخیرۀ ساختارهای BLOB، آزمایشی انجام شد که در آن از دو روش مختلف برای مدیریت داده‌ها استفاده‌ شد. روش اول که در آن بلاب‌ها به‌ طور مستقیم در دیتابیس ذخیره می‌شدند و روش دیگر که در آن بلاب‌ها با استفاده از اس‌کیولایت مدیریت‌ شده و به‌ طور جداگانه در فایل‌هایی ذخیره شده و فقط نام فایل مربوطه در دیتابیس ثبت می‌شد. نتایج به‌ دست‌ آمده حاکی از آنند که:

- اس‌کیولایت در مدیریت داده‌ها 35٪ سریع‌تر از زمانی عمل کرده است که ورودی/خروجی مستقیم روی فایل‌سیستم اصطلاحاً Read یا Write می‌شود.

- برای بلاب‌هایی با اندازهٔ کمتر از 100 کیلوبایت، مدیریت داده‌ها با اس‌کیولایت سریع‌تر از زمانی است که بلاب‌ها به‌ طور مستقیم در خود دیتابیس ذخیره می‌شوند.

- برای بلاب‌ها با اندازه‌ٔ بیشتر از 100 کیلوبایت، مدیریت داده‌ها و ذخیرۀ مستقیم آن‌ها در دیتابیس سریع‌تر از زمانی است که آن‌ها را در فایل‌های جداگانه‌ای ذخیره کرده و فقط نام فایل مربوطه در دیتابیس آورده می‌شود زیرا در هنگام دسترسی به آن‌ها، قبل از باز کردن و خواندن فایل، ابتدا باید به دیتابیس مراجعه کرده و نام فایل را در آن جستجو کرد که در این مورد، ذخیرهٔ سادۀ کل بلاب در دیتابیس، پرفورمنس بالاتری در خواندن و نوشتن آن‌ ارائه می‌دهد.

C یک زبان برنامه‌نویسی عالی برای نوشتن کدهایی است که باید سریع اجرا شوند و به‌ نوعی می‌توان این زبان را نسخه‌ای پرتابل از زبان برنامه‌نویسی Assembly قلمداد کرد. همچنین این زبان ارتباط تنگاتنگی با زبان ماشین -یا همان صفر و یک- دارا است و بسیاری از پردازنده‌ها به‌ خوبی می‌توانند با کدهای نوشته‌ شده با این زبان ارتباط برقرار سازند؛ با این‌ وجود، زبان C همچنان پرتابل بوده و بین پلتفرم‌های مختلف قابل‌استفاده است.

گاهی‌اوقات ادعا می‌شود که زبان‌های برنامه‌نویسی دیگر سرعتی معادل سرعت زبان C دارند اما هیچ زبانی تاکنون نتوانسته سرعتی بیش از سرعت زبان C برای برنامه‌نویسی‌ اپلیکیشن‌های عمومی و همه‌منظوره ارائه دهد (زبان برنامه‌نویسی همه‌منظوره یک زبان برنامه‌نویسی طراحی‌شده برای کدنویسی نرم‌افزاری است که در طیف گسترده‌ای از کاربردها استفاده شود).

سازگاری بالای زبان C
تقریباً تمام سیستم‌ها توانایی فراخوانی لایبرری‌های نوشته‌ شده با زبان C را دارند و این در حالی است که دیگر زبان‌های برنامه‌نویسی، این قابلیت را ندارند و یا اگر هم داشته باشند، به توانمندی زبان C نیست.

بنابراین، برای مثال، اپلیکیشن‌های اندرویدی نوشته‌ شده با زبان جاوا می‌توانند اس‌کیولایت را از طریق یک به اصطلاح Adaptor فراخوانی کنند؛ بدین ترتیب، کدنویسی اس‌کیولایت با جاوا برای اپلیکیشن‌های اندرویدی بسیار راحت‌تر است چرا که اینترفیس آن‌ها را بسیار ساده‌تر می‌سازد.

وابستگی کم لایبرری‌های نوشته شده با زبان C
لایبرری‌‌های نوشته‌ شده با زبان C نیاز به وابستگی‌‌های زیادی در اصطلاحاً Run-time یا زمان اجرا ندارند (وابستگی‌‌های زمان‌ اجرا به آن دسته از ماژول‌ها، بلوک‌های کد، لایبرری‌ها و غیره می‌گویند که با پایان یافتن اجرای کد، دیگر نیازی به آن‌ها نیست) و سیستم مدیریت دیتابیس SQLite با حداقل تنظیمات، تنها به چند لایبرری‌ استاندارد C همانند موارد زیر نیاز خواهد داشت:

- memcmp()
- memcpy()
- memmove()
- memset()
- strcmp()
- strlen()
- strncmp()

در یک بیلد کامل‌تر، اس‌کیولایت از لایبرری‌های روتین دیگری همچون ()malloc و ()free و یکسری اینترفیس‌های سیستم‌عاملی برای باز کردن، خواندن، نوشتن و بستن فایل‌ها نیز استفاده خواهد کرد؛ اما با این‌ وجود، وابستگی‌های این سیستم بسیار کم است. در مقابل، زبان‌های برنامه‌نویسی مدرن دیگر، اغلب به چندین مگابایت (RLM (Runtim Loaded Modules برای مدیریت وابستگی‌ها و هزاران هزار اینترفیس نیاز دارند.

پایداری خوب زبان C
زبان C یک زبان برنامه‌نویسی قدیمی، شناخته‌شده و قابل‌درک است. این دقیقاً همان چیزی است که یک دولوپر در هنگام ایجاد چیزی همچون SQLite به آن نیاز دارد. پیاده‌سازی یک موتور پایگاه دادۀ کوچک، سریع و قابل‌اطمینان کار دشواری است زیرا اگر دولوپری از یک زبان برنامه‌نویسی اصطلاحاً اِستِیبِل (پایدار) استفاده نکند، در صورت انتشار هر آپدیت‌ از آن زبان، شاخصه‌‌های زبان برنامه‌نویسی تغییر خواهد کرد و ماژول مد نظر نیاز به بازنویسی خواهد داشت!

در پایان هم اگر علاقمند هستید بدانید که ابداع زبان C چه کمک‌های به صنعت فناوری کرده‌ است، می‌توانید به مقالهٔ آیا می‌دانید اگر زبان برنامه‌نویسی C نبود، چه بلایی سر دنیای نرم‌‌افزار می‌آمد! مراجعه نمایید.

منبع


اکرم امراه‌نژاد