بازگشت   پی سی سیتی > کامپیوتر اینترنت و شبکه Computer internet > زبان های برنامه نویسی Programming

زبان های برنامه نویسی Programming بحث در مورد زبانهای مختلف برنامه نویسی

پاسخ
 
ابزارهای موضوع نحوه نمایش
  #1  
قدیمی 01-26-2014
کارگر سایت آواتار ها
کارگر سایت کارگر سایت آنلاین نیست.
ادمین در لباس کارگر!
 
تاریخ عضویت: Aug 2007
محل سکونت: کرمانشاه
نوشته ها: 1,444
سپاسها: : 907

4,878 سپاس در 836 نوشته ایشان در یکماه اخیر
کارگر سایت به Yahoo ارسال پیام
پیش فرض Boolean Full-Text Search چيست ؟ انواع جداول در MySql و پشتيباني از transaction

Boolean Full-Text Search چيست ؟ انواع جداول در MySql و پشتيباني از transaction
مطلب جمع و جور و خلاصه اي به نامانواع جداول در MySQL


از
(منبع)یادداشتهای یه برنامه نویس خیلی ^ 100 کوچولو


ديدم كه مطالعه ش نسبت به حجم كمش مفيده .












در این مقاله قصد داریم با انواع جداول موجود در MySQL آشنا شویم. طراحی بانکهای اطلاعاتی همانند سایر کارهای طراحی نیاز به یک سری اطلاعات پیش نیاز دارد، برای مثال در بعضی از موارد کار با بانک اطلاعاتی به نحوی است که transaction-safe بودن جدول را طلب می کند، اما استفاده از جداول transaction-safe موجب افزایش زمان اجرا، فضای دیسک و حافظه می شود. توجه داشته باشید که در این مقاله تنها هدف آشنایی با انواع جداول موجود در MySQL است و به طور کامل با هر کدام آشنا نخواهیم شد!. انواع جداول موجود در MySQL عبارتند از:

● ISAM

● MyISAM

● InnoDB

● BerkeleyDB (BDB)

● MERGE

● HEAP

جداول ISAM :

این نوع جداول تنها برای پشتیبانی از جداول قدیمی در MySQL وجود دارد، تمام کارایی و قابلیتهای آن در MyISAM وجود دارد، پس دلیلی برای توضیح این نوع جداول در اینجا وجود ندارد، بر اساس برنامه کاری برنامه نویسان MySQL قرار است این نوع جدول از نسخه ۵ این RDBMS از آن حذف شود. جداول ISAM ذخیره ای سریع اما غیر transaction-safe به شما ارائه می دهد، جداول ISAM یک سری محدودیتها دارند که همین محدودیتها باعث جایگزینی آنها با MyISAM و حذف این جداول در آینده ای نزدیک شده است، محدودیتهایی که در ISAM وجود داشتند اما در MyISAM برطرف شده اند عبارتند از:

جداول ISAM به پلتفرمی که MySQL در آن نصب است وابسته می باشند، یعنی اینکه اگر شما در یک پلتفرم جداول خود را تولید کنید امکان بارگذاری آن در یک پلتفرم دیگر نیست.

جداول ISAM به شما حداکثر اجازه ذخیره تا 4 GB را می دهند، در حالی که محدودیت شما در جداول MyISAM بستگی به سیستم عاملی که MySQL روی آن نصب است دارد. پس در انتخاب سیستم فایل خود دقت کنید، بعضی از این سیستم ها فقط تا 2GB برای یک فایل را پشتیبانی می کنند، هر چند که شما می توانید با استفاده از جداول MERGE این محدودیت را برطرف کنید اما شما امکان استفاده از MERGE را در جداول ISAM ندارید.

همچنین استفاده بهینه از فضای دیسک که در جداول ISAM وجود ندارد.

جداول ISAM به شما اجازه استفاده از ۱۶ کلید به ازای هر جدول را می دهند و حداکثر طول یک کلید هم ۲۵۶ بایت است، اما جداول MyISAM به شما اجازه استفاده از ۶۴ کلید با هر یک طول حداکثر ۱۰۲۴ بایت را میدهند.

بررسی تمام محدودیتهای جداول ISAM از حوصله این مقاله خارج است اما با نگاهی گذرا می بینیم که این نوع جدول از برنامه های مفیدی مثل CHECK TABLE یا REPAIR TABLE یا BAKCUP TABLE و یا حتی OPTIMIZE TABLE پشتیبانی نمی کند.

هر چند که جداول ISAM وجود دارند اما نباید از آنها برای ساخت جداول جدید استفاده کرد و اگر شما جداول ISAM دارید شدیدا به شما توصیه می شود تا آنها را به MyISAM تبدیل کنید، کاری ساده با نتایجی چشمگیر!

جداول MyISAM:

بسیاری از مردم از MySQL برای سالها استفاده می کنند بدون اینکه متوجه شوند که این RDBMS انواع جداول دیگری را نیز در اختیار آنها قرار می دهد، این افراد از MyISAM استفاده می کنند بدون اینکه بدانند چون این نوع جدول، نوع پیش فرض MySQL است.

این نوع جداول ذخیره ای سریع اما غیر transaction-safe را به شما ارائه می دهند، در اکثر موارد کارایی بالایی از خود نشان می دهند حتی اگر طراح بانک اطلاعاتی در طراحی خود دچار مشکل شود. این نوع جداول در دست یک مدیر حرفه ای توانایی Handle کردن بانکهای طلاعاتی بزرگ و پرمشغله را نیز دارند. جداول MyISAM می توانند در سه حالت: compressed و dynamic, static باشند. یک جدول بر حسب نحوه تعریف ستونهایش به طور خودکار dynamic و یا static می شود اما جداول compressed با استفاده از ابزار myisampack تولید می شوند.

جداولی با سطرهای با طول ثابت به صورت یک جدول static در می آیند اما جداول با طول متغیر سطرها به صورت dynamic در می آید، چگونه می توانیم بگوئیم که یک جدول سطرهای با طول ثابت و یا طول متغیر دارد؟

نوع char و تمام انواع عددی طول ثابت دارند، اما انواع text ، varchar و یا blob طول متغیر بر حسب اطلاعات ذخیره شده در انها دارند ، جدولی که فقط از ستونهای char و یا عددی داشته باشد به صورت static ساخته می شود و هر جدولی که هر یک از حالتهای متغیر را داشته باشد به صورت dynamic ساخته می شود. جداول static برای جستجو کردن از جدوال dynamic و compressed سریعتر است اما خوب بدی این روش هم در این است که اطلاعاتی که ممکن است با هم از نظر طول بسیار متفاوت باشند را در سطرهایی با طول ثابت بریزیم که باعث هدر رفتن فضای دیسک می شود.

هر چند که جدوال نوع static و dynamic بدون دخالت مستقیم ما و بسته به نحوه طراحی به صورت خود به خود ساخته می شوند اما برای ساخت جداولcompressed باید کار بیشتری انجام دهیم. برای فشرده کردن یک جدول باید از myisampack استفاده کنیم که یک برنامه خط فرمان است.فشرده سازی یک جدول امکان خوبی به نظر می رسد اما باید توجه داشته باشید که این امکان تنها می تواند برای بعضی از برنامه ها معنی دار باشد چون بعد از فشرده سازی یک جدول، آن جدول به حالت فقط خواندنی readonly در می آید و اگر شما نیاز به به روزرسانی جدول داشته باشید ابتدا باید آنرا از حالت فشرده خارج کنید و بعد از اعمال تغییرات مجددا آن را فشرده کنید.

امکان دیگری که به نظر می رسد تنها از طریق جداول MyISAM در MySQL در دسترس FullText Searching است ، اندیسهای معمولی برای پیدا کردن سطرهایی خاص از جدول به خوبی کار می کنند اما جستجو برای یک کلمه یا رشته در یک متن هم امکان جالبی به نظر می رسد. شما با استفاده از کد SQL زیر می توانید یک جدول MyISAM با FullText یک اندیس بسازید.

CREATE TABLE articles (

articleID int not null auto_increment primary key,

title varchar(2MERGE),

body text,

fulltext (title,body)

);

و با استفاده از query زیر به دنبال هر رکورد حاوی miniprogrammer بگردید!

SELECT title

FROM article

WHERE MATCH (title, body) AGAINST ('miniprogrammer');

شما امکان گرفتن query های پیچیده تر را هم دارید:

SELECT title

FROM article

WHERE MATCH (title, body) AGAINST ('miniprogrammer apache php

web');

حالا ما به دنبال هر رکوردی هستیم که حاوی هر یک از کلمات فوق باشد. متاسفانه در حال حاضر MySQL از Stemming پشتیبانی نمی کند ، Stemming امکان فوق العاده جالبی است که در خیلی از سیستمهای جستجوی fulltext وجود دارد و با استفاده از آن مثلا اگر شما کلمه acquire را جستجو کنید کلمه acquisitions هم که از همان رده معنایی است بازگردانده می شود، هر کدام از این کلمات برحسب میزان وابستگی معنایی مقدار دهی می شوند و بعد از آن بر همین میزان مرتب می شوند و نتایج بازگشت داده می شوند.

قابلیت بسیار جالب دیگری که در حالت Full-Text به دست می آورید Boolean Full-Text Search است که بسیار جالبتر از Full-Text خالی است!

SELECT title

FROM article

WHERE MATCH (title,body)

AGAINST ('+linux+”Open Source” -desktop Java ~Oracle' IN

BOOLEAN MODE);

در query بالا شما به دنبال رکوردهایی می گردید که دارای کلمه Open Source و linux باشند اما کلمه desktop را نداشته باشند، کلمات Oracle و Java به دلخواه وجود داشته باشند اما هنگام مرتب سازی رکوردها برای مشخص شدن میزان وابستگی به مورد جستجوی ما وجود کلمه Java باعث افزایش امتیاز و Oracle باعث کاهش امتیاز شود.

جداول InnoDB :




این نوع جداول امکانات زیر را در اختیار شما قرار می دهند:

      • Transaction-safe بودن.
      • Row-level locking به این معناست که فقط سطری که در حال استفاده است از دسترس کاربران دیگر خارج است در حالیکه در بسیاری از انواع جداول دیگر جدولی که در حال کار کردن با آن هستیم از دسترس دیگر کاربران خارج است.
      • Support for foreign keys


InnoDB روش خاص خودش رو برای ذخیره اطلاعات دارد، شاخه خاص خود و نیز تنظیمات خاص خود. در جایی که جداول MyISAM هر جدول را در یک فایل ذخیره می InnoDB ممکن است یک جدول را در چندین فایل متفاوت ذخیره کند و همین امر به InnoDB این امکان را می دهد که بدون وابستگی به فایل سیستم سیستم عامل هر چقدر که می خواهد بزرگ شود. توجه داشته باشید که برای یک پروژه مشخص جداول InnoDB به مراتب بیشتر از همان جداول در حالت MyISAM فضا اشغال می کنند.
بسیاری از سایتهای بزرگی که از MySQL استفاده می کنند مثل Slashdot، Google و یا Yahoo! finance از جداول InnoDB استفاده می کنند . InnoDB یکی از سریعترین Transaction-safe در دنیاست.
InnoDB توسط یک کمپانی جداگانه به نام InnoBase Oy توسعه داده می شود که برای به دست آوردن آخرین اطلعات می توانید از وب سایت آنها در www.innodb.com دیدن کنید.
جداول BerkeleyDB :
انتخاب دیگری که برای جداول Transaction-safe وجود دارد BerkeleyDB یا به اختصار BDB است، این جداول توسط شرکت نرم افزاری Sleepycat ارائه شده که از طریق نشانی www.sleepycat.com قابل دسترسی است. این نوع جداول در حالتی که به transaction-safe احتیاج است به اندازه رقیب خود یعنی InnoDB مورد استفاده قرار نگرفته است. موتور BDB مدت زمان زیادی است که وجود دارد اما یکپارچگی آن با MySQL امر تازه ای است. تمام جداول BDB نیاز به یک کلید دارند چیز بدی نیست چون شدیدا به شما توصیه می کنم که برای هر جدول یک کلید مشخص کنید اما اینجا اجباری است و اگر شما یک کلید مشخص نکنید خود BDB اینکار را انجام خواهد داد.
جداول MERGE :


راهی هوشمندانه برای حل مشکل محدودیت حداکثر اندازه یک فایل در فایل سیستمهای گوناگون، همانطور که گفته شد هر جدول MySQL در یک فایل ذخیره می شود پس مشکل حداکثر اندازه یک فایل مشکل مهمی است و MySQL با استفاده از نوع MERGE این مشکل را حل کرده است.
در این نوع جدول شما ابتدا چندین جدول خاص خود با ساختاری یکسان را می سازید، بعد یک جدول از نوع MERGE با همان ساختار می سازید که در برگیرنده تمامی آن جداول می باشد.
جداول HEAP :
جداولی فوق العاده سریع چون تماما در حافظه نگه داری می شوند، مشکل این نوع جداول این است که مثلا اگر برق قطع شود شما تمامی اطلاعات خود را از دست می دهید، به هر حال این نوع جداول برای کارهای موقتی مناسب هستند.
این نوع جداول محدودیتهایی هم دارند:
      • عدم پشتیبانی از auto_increment
      • عدم پشتیبانی از TEXT یا BLOB
      • محدود بودن عبارت جستجو به تنها استفاده از عملگرهای >=< و ...






پاسخ با نقل قول
  #2  
قدیمی 01-26-2014
کارگر سایت آواتار ها
کارگر سایت کارگر سایت آنلاین نیست.
ادمین در لباس کارگر!
 
تاریخ عضویت: Aug 2007
محل سکونت: کرمانشاه
نوشته ها: 1,444
سپاسها: : 907

4,878 سپاس در 836 نوشته ایشان در یکماه اخیر
کارگر سایت به Yahoo ارسال پیام
پیش فرض

در همين راستا حتما به تاپيك زير كه تستهايي جهت مشاهده سرعت انواع جدول در mysql انجام شده مراجعه كنيد





ویرایش توسط کارگر سایت : 01-26-2014 در ساعت 03:51 PM
پاسخ با نقل قول
پاسخ


کاربران در حال دیدن موضوع: 1 نفر (0 عضو و 1 مهمان)
 

مجوز های ارسال و ویرایش
شما نمیتوانید موضوع جدیدی ارسال کنید
شما امکان ارسال پاسخ را ندارید
شما نمیتوانید فایل پیوست در پست خود ضمیمه کنید
شما نمیتوانید پست های خود را ویرایش کنید

BB code is فعال
شکلک ها فعال است
کد [IMG] فعال است
اچ تی ام ال غیر فعال می باشد



اکنون ساعت 09:46 PM برپایه ساعت جهانی (GMT - گرینویچ) +3.5 می باشد.



Powered by vBulletin® Version 3.8.4 Copyright , Jelsoft Enterprices مدیریت توسط کورش نعلینی
استفاده از مطالب پی سی سیتی بدون ذکر منبع هم پیگرد قانونی ندارد!! (این دیگه به انصاف خودتونه !!)
(اگر مطلبی از شما در سایت ما بدون ذکر نامتان استفاده شده مارا خبر کنید تا آنرا اصلاح کنیم)


سایت دبیرستان وابسته به دانشگاه رازی کرمانشاه: کلیک کنید




  پیدا کردن مطالب قبلی سایت توسط گوگل برای جلوگیری از ارسال تکراری آنها