اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
سه دقیقه
SQLite بانک اطلاعاتی سریع، کم حجم و سورس بازی است که استفاده از آن در دات نت فریم ورک بسیار ساده است. فقط کافی است پروایدر مربوط به آن را دریافت کنید و در کدهای قدیمی خود هر جایی مثلا sqlconnection داشتید آنرا تبدیل به sqliteconnection کنید و امثال آن (به بیان دیگر، پروایدر تهیه شده از معماری ADO.NET پیروی میکند و عملا دانش قبلی شما به سادگی قابل استفاده و ارتقاء است). علاوه بر آن پروایدر ADO.NET تهیه شده برای آن، پشتیبانی از Entity framework را هم ارائه میدهد.
این دیتابیس تحت سیستم عاملهای مختلف مهیا است و مهمترین مزیت آن عدم نیاز به نصب آن میباشد.
مزایا:
- سورس باز و رایگان
- مهیا بودن آن در سایر پلتفرمها (ویندوز، لینوکس و ...)
- نیازی به نصب ندارد و فقط یک DLL بومی است. این مورد برای کاربرانی که در مدیریت بانکهای اطلاعاتی پیچیده مشکل دارند، یک مزیت مهم است.
- امکان تشیکل دیتابیس در حافظه. این نکته و توانایی، در آزمونهای واحد بسیار جالب توجه است. میتوانید با سرعت بالا دیتابیسی واقعی را در حافظه تشکیل داده، کلیه آزمونهای واحد خود را اجرا کرده و پس از پایان کار، اثری از دیتابیس و تغییر دادهها و مشکلات بازگردانی اطلاعات به حالت اول وجود نخواهد داشت.
ملاحظات:
الف) مرتب سازی SQLite حساس به حروف کوچک و بزرگ است.
برای برگشت به عادت متداولی که وجود دارد میشود به صورت زیر عمل کرد:
select f1 from tbl1 order by f1 COLLATE NOCASE
یک COLLATE NOCASE اضافه شده است.
ب) رعایت نکات مرتبط با سیستمهای 64 بیتی
در مورد سیستمهای 64 بیتی و دات نت قبلا مطلبی را نوشته بودم : {+}. این مطلب دقیقا اینجا کاربرد پیدا میکند، از این لحاظ که SQLite یک بانک اطلاعاتی Native است. اگر برنامهی دات نت شما برای حالت Any CPU تهیه شده است، در سیستمهای 32 بیتی نیاز است تا DLL مرتبط SQLite را توزیع کنید و در سیستمهای 64 بیتی DLL مرتبط 64 بیتی آن نیاز خواهد بود. در غیراینصورت برنامهی شما در بدو امر کرش کرده و اجرا نخواهد شد.
مشکلات:
الف) کلید خارجی بی خاصیت!
SQLite از کلید خارجی پشتیبانی میکند اما آنرا اعمال نمیکند! برای اینکه کلید خارجی را اعمال کنید باید خودتان تریگر بنویسید تا اینکار را انجام دهد.
ب) پشتیبانی در حد صفر از مباحث همزمانی و تردینگ.
اگر برنامه شما مالتی ترد است، در بد مخمصهای گرفتار شدهاید. مدام با پیغام database is locked مواجه خواهید شد. (چه انتظاری داشتید؟ یک dll کمتر از 2 مگابایت که قرار نیست کار غولهای دیتابیسی را انجام دهد)
بنابراین اصلا تصورش را هم نکنید که از این دیتابیس به عنوان بانک اطلاعاتی یک سایت (و محیطهای چند کاربره) بتوان استفاده کرد و کاربران دچار مشکل نشوند.
ج)حجم بالای دیتابیس و عدم کش
از مباحث caching که در دیتابیسهای معظم دیگر به صورت توکار وجود دارد خبری نیست. برای مثال اگر یک کوئری قرار است تعدادی را شمارش نماید، حاصلی کش نشده و اگر صدبار هم به صورت متوالی آنرا فراخوانی کنید باز هم از نو محاسبات آن انجام خواهد شد.
این مورد در حجم بالای دیتابیس واقعا مهم است و نمودش را با دیتابیسی با حجم بالای یک گیگ به وضوح مشاهده خواهید. افت کارآیی و همچنین قرچ و قرچ مداوم هارد دیسک سیستم! (چون به کش رجوع نمیشود)
د) امنیت
روی بانکهای اطلاعاتی اکسس حداقل میتوان یک کلمهی عبور را قرار داد (که در کسری از ثانیه قابل شکستن است!). در SQLite استاندارد هیچ خبری از این مباحث نبوده و امنیت را باید خودتان تامین کنید. (البته یک نسخهی تجاری هم از این بانک اطلاعاتی با پشتیبانی از رمزنگاری اطلاعات موجود است : +)
ه) مرتب سازی فارسی
هر چند SQLite هیچ مشکلی در ثبت اطلاعات یونیکد و خصوصا متون فارسی ندارد، اما با مرتب سازی کلمات یونیکد مشکل داشته و بر اساس کد اسکی آنها عمل میکند. هر چند امکان تعریف Collation سفارشی در آن ممکن است : + (البته ممکن بودن با موجود بودن متفاوت است)
نتیجه گیری:
- SQLite برای دیتابیسی تا حدود یک گیگ که فقط یک نفر قرار باشد از آن استفاده کند انتخاب بسیار مناسبی است (برای مثال فایرفاکس از آن برای ذخیره سازی تنظیمات خودش استفاده میکند).