شرح مختصری از بانک اطلاعاتی SQLite

Topcoding

عضو جدید
382px-SQLite370.svg.png
SQLite یک پایگاه داده کوچک،سریع ،کم حجم(حجمی در حدود 500 کیلو بایت) و سورس بازی است که به زبان C در قالب یک کتابخانه نوشته شده است ویک پایگاه داده رابطه ای به حساب می آید.
تاریخچه:
ریچارد هیپ اس‌کیوال لایت را در سال ۲۰۰۰ در زمانی که از طریق جنرال داینامیکس با نیروی دریایی ایالات متحده آمریکا کار می‌کرد طراحی کرد. او در آن زمان مشغول کار روی برنامه‌های مربوط به ناوشکن‌هایی بود که به موشک‌های هدایت‌شونده مجهز بودند و تا آن زمان از پایگاه داده آی‌بی‌ام اینفورمیکس ( IBM Informix) استفاده می‌کردند. هدف از ساخت اس‌کیوال لایت این بود که این برنامه‌ها بتوانند بدون نصب یا مدیریت پایگاه داده مستقل اجرا شوند. نسخهٔ اول نرم‌افزار در اوت ۲۰۰۰ انتشار یافت. در نسخهٔ ۲٫۰ ساختار داخلی اس‌کیوال لایت تغییر یافت و از یک درخت بی در آن استفاده گردید. در نسخه ۳٫۰ که قسمتی از هزینه‌هایش توسط ای‌او‌ال تامین شد، پشتیبانی چندزبانی و چند تغییر بزرگ دیگر در اس‌کیو‌ال لایت رخ داد.
توسعه:
تغییرات اس‌کیوال لایت در یک سامانهٔ کنترل نسخه‌ها به نام فسیل ذخیره می‌شود که خود مبتنی بر یک پایگاه داده اس‌کیوال لایت است
کاربرد:
موزیلا فایرفاکس و موزیلا تاندربرد انواع مختلفی از تنظیمات (نظیر چوب‌الف‌ها، کوکی‌ها، تاریخچهٔ بازدید وب و غیره) را در یک پایگاه دادهٔ اس‌کیوال لایت ذخیره می‌کنند. اسکایپ هم از پایگاه داده اس‌کیوال لایت بهره می‌برد . ادوبی از اس‌کیوال لایت در برنامه‌های مختلف از جمله ادوبی ریدر و ادوبی ایر بهره می‌گیرد . دراپ‌باکس نیز از اس‌کیوال لایت در نرم‌افزار سمت کلاینت خود استفاده می‌کند http://fa.wikipedia.org/wiki/SQLite#cite_note-users-4.
با توجه به حجم کم و عملکرد بالا، اس‌کیوال لایت در بسیاری از سیستم‌های عامل از جمله iOS اپل، سیمبیان، آندروید گوگل، می‌گو بنیاد لینوکس و وب‌اواس پالم به کار رفته است .


مزايا:
- سورس باز و رايگان
- مهيا بودن آن در ساير پلتفرم‌ها (ويندوز، لينوكس و ...)
- نيازي به نصب ندارد و فقط يك 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 استاندارد هيچ خبري از اين مباحث نبوده و امنيت را بايد خودتان تامين كنيد. (البته يك نسخه‌ي تجاري هم از اين بانك اطلاعاتي با پشتيباني از رمزنگاري اطلاعات موجود است http://www.hwaci.com/sw/sqlite/prosupport.html)

ه) مرتب سازي فارسي
هر چند SQLite هيچ مشكلي در ثبت اطلاعات يونيكد و خصوصا متون فارسي ندارد، اما با مرتب سازي كلمات يونيكد مشكل داشته و بر اساس كد اسكي آن‌ها عمل مي‌كند. هر چند امكان تعريف Collation سفارشي در آن ممكن است : (البته ممكن بودن با موجود بودن متفاوت است)
----------------------------
sqlite.gif
----------------------------
استفاده از SQLite در دات نت فريم ورك بسيار ساده است. فقط كافي است پروايدر مربوط به آن را دريافت كنيد و در كدهاي قديمي خود هر جايي مثلا sqlconnection داشتيد آن‌را تبديل به sqliteconnection كنيد و امثال آن (به بيان ديگر، پروايدر تهيه شده از معماري ADO.NET پيروي مي‌كند و عملا دانش قبلي شما به سادگي قابل استفاده و ارتقاء است). علاوه بر آن پروايدر ADO.NET‌ تهيه شده براي آن، پشتيباني از Entity framework را هم ارائه مي‌دهد.
اين ديتابيس تحت سيستم عامل‌هاي مختلف مهيا است و مهم‌ترين مزيت آن عدم نياز به نصب آن مي‌باشد.
بررسی ویژگی ها:
برخلاف پایگاه داده های cclient-server http://salarblog.wordpress.com/ پایگاه داده ی SQLite به عنوان یک پروسه مجزا عمل نمی کند. بلکه به عنوان کتابخانه ای عمل می کند که همراه برنامه انتشار یافته و امکان دسترسی به دیتا را به برنامه می دهد و همانند بخشی از آن عمل می کند.
برنامه می بایست از طریق توابع فراهم شده اقدام به فراخوانی و دسترسی به دیتا نمایند که این نحوه فراخوانی باعث بهینه تر و سریعتر در دسترس قرار گرفتن نتایج خواهد شد. این روش از درخواست به سرویس های دیگر جهت دریافت اطلاعات که سایر پایگاه داده های از آن استفاده می کنند برای داده های کم حجم و پایگاه داده کوچک، بهینه تر است.
تمامی اطلاعات این بانک اطلاعاتی (شامل جداول، تعریفات، دیتا و غیره) در یک فایل که برای تمامی سیستم عامل ها یکسان است ذخیره می شود. این روش یکی از دلایل موفقیت این پایگاه داده به شمار می آید.
SQLite با توجه به نوع ساختاری که دارد تعدادی از ویژگی های استاندارد که در SQL-92 به تصویب رسیده را پشتیبانی نمی کند. شاید بزرگترین این موارد عدم پشتیبانی از توابع وstored procedure ها باشد. سایر موارد استاندارد SQL پیاده سازی شده و در دسترس هستند.
موارد قابل استفاده در این پایگاه داده را می توان trigger ها، View ها و Query های پیچیده نام برد.
یکی از موارد جالب در پیاده سازی SQLite نحوه اعمال نوع داده ها به فیلدها (Columns) است. در این پایگاه داده به جای اختصاص دادن نوع به فیلد مورد نظر که در اکثر پایگاه داده های معتبر از این روش استفاده می شود، فقط نوع به مقدار (value) داده شده اختصاص داده می شود. برای مثال اگر نوع فیلدی Integer تعریف شده باشد و کاربر قصد وارد کردن داده ای از نوع رشته را داشته باشد، موتور پایگاه داده ابتدا سعی خواهد کرد که داده را به نوع Integer تبدیل کند. این باعث افزایش انعطاف پذیری نوع داده های فیلدها می شود. مخصوصا وقتی که نیاز به عمل bind در سایر زبانها به صورت دینامیک مورد نیاز باشد.
شیوه مدیریت دسترسی ها:
چندین پروسه یا thread می تواند به صورت همزمان به یک پایگاه داده بدون مشکل دسترسی داشته باشد و از آن اطلاعات دریافت نمایند. ولی برای نوشتن اطلاعات فقط یک پروسه امکان دسترسی خواهد داشت. سایر پروسه ها باید منتظر بمانند و یا اینکه با خطا مواجه خواهند شد.
ابزارهای توسعه:
یکی از مهمترین مزیت های این پایگاه داده امکان استفاده آن در اکثر زبانهای برنامه نویسی است. برنامه های دسترسی به این پایگاه داده در اکثر زبانها نوشته شده است و در دسترس است. برای مشاهده ابزارهای دسترسی به این ادرس مراجعه کنید: http://www.sqlite.org/cvstrac/wiki?p=SqliteWrappers
مهمترین کتابخانه های رابط برای استفاده از SQLite
dotNET Framework: http://sqlite.phxsoftware.com/
dotNET Framework: http://www.mono-project.com/SQLite
Delphi: http://www.aducom.com/
Delpi: http://wikitaxi.org/delphi/doku.php/products/sqlite3/index
C++: http://www.sqliteplus.com/
Java: http://www.ch-werner.de/javasqlite
PHP: SQLite is bundled with PHP 5. http://www.php.net/
Python: http://pysqlite.org/
برای طراحی و ایجاد پایگاه داده SQLite می توانید از ابزارهای زیر استفاده کنید:
SQLite Manager: یک extension برای مرورگر فایرفاکس که با به سادگی امکان دسترسی به تمامی امکانات SQLite رو فراهم می کند. لینک: https://addons.mozilla.org/en-US/firefox/addon/5817

SQLite مورد مقبولیت فراوانی برای استفاده به عنوان یک دیتابیس Embeded قرار گرفته و در پروژه های زیر مورد استفاده قرار گرفته است:
FireFox :این مرورگر برای ذخیره اطلاعات خود از SQLite استفاده می کند.
MAc os X:سیستم عامل شرکت Apple http://www.apple.com/ به صورت داخلی از SQLite به عنوان یک پایگاه داده استاندارد استفاده می کند.
Skype:این نرم افزار چت و گفت و گوی آنلاین که با مقبولیت خوبی روبروست از SQLite استفاده می کند.
Symbian:سیستم عامل گوشی های موبایل در نسخه های جدید خود از این پایگاه داده به صورت توکار استفاده می کند.
android:سیستم عامل جدید گوگل برای موبایل
ipod touch , iphone: در این دو دستگاه محصول Apple از این پایگاه داده استفاده شده است.
google gears: ابزار گوگل برای نوشتن برنامه های تحت وب با استفاده از تکنولوژی های مختلف روز.
سخن آخر:
پایگاه داده SQLite یک ابزار کوچک سریع و مطمئن است که برای مقاصد خاص نوشته شده است. از این پایگاه داده می توانید برای سیستم های Embeded استفاده کنید. یا برای نزم افزار های کوچک و تک کاربره خود تا خود را از شر مشکلات انتشار پایگاه داده های بزرگ همراه نرم افزار خود دور بمانید.
همچنین این یک گزینه فوق العاده برای کسانی است که از access صرفا برای پایگاه داده خود استفاده می کنند.
منابع مفید:
سایت اصلی: http://www.sqlite.org
دانلود نسخه اصلی: http://www.sqlite.org/download.html
ویژگی های حذف شده از SQL استاندارد: http://www.sqlite.org/omitted.html
ویژگی های پیاده سازی شده: http://www.sqlite.org/lang.html
----------
منابع این مقاله از
ویکی پدیا
http://vahidnasiri.blogspot.com

 

sm1989

عضو جدید
سلام
دوستان کسی اطلاع داره Embeded DB که توی گوگل کروم استفاده شده چیه؟ SQLite؟
 

Similar threads

بالا