معرفی mongoDB و چگونگی استفاده از آن از طریق PHP
نمایش نتایج: از شماره 1 تا 2 , از مجموع 2

موضوع: معرفی mongoDB و چگونگی استفاده از آن از طریق PHP

  1. *Mohammad* آواتار ها
    *Mohammad*
    مدیر سابق
    May 2011
    63,336
    22,637
    تشکر شده : 91,444

    پیش فرض معرفی mongoDB و چگونگی استفاده از آن از طریق PHP

    محیطی را تصور کنید که استفاده پایگاه‌داده در آن به قدری ساده است که گاهی وقت‌ها یادتان مي‌رود در حال استفاده از آن هستید. هرگاه که مي‌خواهید به مجموعه سرورهای خود یک ماشین جدید اضافه مي‌کنید و بدون نیاز به تنظیمات خاصی، کل مجموعه پایگاه‌داده از قدرت و ظرفیتی جدید برخوردار مي‌شود. تصور کنید برای یک بار هم که شده، امکان تمرکز روی کار اصلی را خواهید داشت و بدون استرس درباره پایگاه داده، محل کار خود را به موقع ترک خواهید کرد. اگرچه این‌ها آرزوهایی بسیار ایده­‌آل هستند اما پایگاه‌داده mongoDB برای تحقق آن‌ها تا حد امکان، طراحی و ساخته شده است.
    مقدمه‌ای بر mongoDB
    پایگاه‌داده mongoDB که بر‌اساس کلمه Humongous (به معنی بسیار بزرگ) نام‌گذاری شده است، نوع جدیدی از پایگاه‌داده‌ای NoSQL است که در آن خبری از مفاهیم جدول‌ها، سطر، عملیات Join، کلیدهای خارجی، SQL و... نیست. این پایگاه‌داده با نیازمندی‌هاي ACID انطباق دارد و در نوع خود، یکی از باسابقه‌ترین پایگاه‌هاي داده NoSQL به شمار مي‌رود. در mongoDB اطلاعات در قالب اسناد ذخیره مي‌شوند و به همین دلیل، به آن، پایگاه‌داده اسنادی هم گفته مي‌شود. این ساختار، به mongoDB اجازه مي‌دهد که سرعتی خیره‌کننده و مقیاس‌پذیری عالی و آساني در استفاده را به ارمغان آورد.
    با این حال، این پایگاه‌داده همانند بسیاری از هم‌نوعان خود، یک راه‌حل ایده‌آل برای تمام چالش‌ها نیست و محدودیت‌هایی را نیز ایجاد مي‌کند. به‌عنوان مثال، عدم وجود تراکنش در این پایگاه‌داده باعث مي‌شود که نتوان یک برنامه حسابداری با آن نوشت. اما نقطه قوت این پایگاه‌داده در ارائه تحلیل‌ها با سرعت بالا (مثلاً یک نوع Google Analytics محلی برای یک سایت) یا ذخیره‌سازی داده‌هاي‌پیچیده با روشی ساده است. همچنين، مي‌توان از آن برای ذخیره اسناد در کنار پلتفرم‌های موجود رابطه‌ای نیز استفاده کرد.

    نصب و راه اندازی
    با توجه به این‌که mongoDB با استفاده از C++ نوشته شده است، به‌سادگی امکان انطباق آن در هر پلتفرمی فراهم است و به همین دلیل، باینری‌هاي مربوط به لینوکس، ویندوز، سولاریس و مک از سایت آن قابل دانلود است. پس مي‌توانید با مراجعه به سایت فقط کاربران ثبت نام شده میتوانند لینک های انجمن را مشاهده کنند. ] نسخه مناسب خود را انتخاب و دانلود کرده و آماده مراحل بعدی شوید. توجه کنيد که نسخه‌هاي 32 بیتی این پایگاه‌داده دارای محدودیت 2,5 گیگابایت برای هر سرور است. در سیستم‌عامل لینوکس دو روش کلی برای نصب mongoDB وجود دارد که شامل نصب‌دستی و استفاده از دایرکتوری‌هاي آنلاین برای نصب خودکار می‌شود. در اوبونتو، مي‌توان این پایگاه‌داده را با استفاده از سیستم‌مدیریت بسته‌هاي نرم‌افزاری سیستم، از طریق مخازن mongoDB نصب کرد.
    " mongoDB با استفاده از ++C نوشته شده است، به‌سادگی امکان به‌همين دليل انطباق آن در هر پلتفرمی فراهم است."

    در نسخه‌هاي اخیر این سیستم‌عامل، مخازن mongoDB موجود و با یک جست‌وجوی ساده قابل انتخاب و نصب است اما در صورتی که نتوان آن را در اوبونتو پیدا کرد، باید در فایل فهرست مخازن اوبونتو که در آدرس etc/apt/sources.list/ قرار دارد، عبارت زیر را وارد کرد:

    deb فقط کاربران ثبت نام شده میتوانند لینک های انجمن را مشاهده کنند. ] (version.number) 10gen

    در این عبارت به‌جای (version.number)، باید نسخه اوبونتوی مورد استفاده جایگزین شود. پس از این کار، باید با استفاده از خط فرمان و دستور زیر، مجموعه مخازن سیستم‌عامل را به‌روزرسانی کنيم.

    $ sudo aptitude update

    پس از این کار، مي‌توان به سادگی و با استفاده از دستور زیر در خط فرمان، نسخه پایدار mongoDB را نصب کرد.
    $ sudo aptitude install mongodb-stable پس از این کار، mongoDB روی سیستم مقصد نصب‌شده و آماده کار است. البته برای نصب mongoDB روی لینوکس از روش دستی نیز مي‌توان استفاده کرد اما به دلیل برخی محدودیت‌هایی که برای پایگاه‌داده به وجود خواهد آورد (که البته در صورتی که حرفه‌ای باشید به راحتی قابل حل‌کردن است) چندان توصیه نمی‌شود. نصب mongoDB در ویندوز بسیار ساده است. در اصل، استفاده از mongoDB در ویندوز به نصب احتیاجی نداشته و تنها لازم است تا فایل دانلود شده را در محلی مطمئن از حالت فشرده خارج کنید. فایل‌هاي اجرایی در پوشه BIN قرار دارند و برای اجرای پایگاه داده، تنها به آن‌ها نیاز داریم. توجه به این نکته ضروری است که mongoDB سعی مي‌کند تا داده‌هاي خود را در دایرکتوری /data/db در لینوکس و مک یا در پوشه C:\Data\db ویندوز ذخیره کند و در صورتی که نتواند آن‌ها را بیابد، با خطا مواجه خواهد شد. به همین دلیل قبل از اجرای آن این دایرکتوری‌ها را ایجاد کرده و در صورتی که مي‌خواهید از پوشه دیگری برای این کار استفاده کنيد، فایل اجرایی را با پارامتر --dbpath به همراه آدرس مورد نظر اجرا کنيد.
    "برای کار با پوسته mongoDB نیازی به نصب آن روی سیستم خود ندارید. سایت این پایگاه داده، یک کنسول آزمایشی آنلاین نیز راه‌اندازی کرده که برای انجام امور آموزشی یا آزمايش‌هاي مختلف قابل استفاده است."

    پس از آماده‌سازی، با اجرای فایل اجرایی mongod در پوشه باینری نصب شده در سیستم مقصد، پایگاه‌داده اجرا خواهد شد که دیگر در ویندوز و لینوکس تفاوتی با یکدیگر نخواهد داشت. توجه کنيد که در این پوشه، فایل‌های اجرایی دیگری نیز وجود دارند که برای برقراری ارتباط با پایگاه‌داده یا تنظیم و پیکربندی آن به‌کار مي‌روند. در این پوشه، وظیفه فایل‌های اجرایی موجود از قرار زیر است:
    - mongo: پوسته ارتباطی با پایگاه‌داده
    - mongod: هسته اجرایی پایگاه‌داده
    - mongos: پردازه اجرای عملیات sharding به‌صورت خودکار
    - mongodump: ابزار خروجی گرفتن از پایگاه‌داده
    - mongorestore: ابزار بازگردانی و ورود داده‌ها به پایگاه‌داده در صورتی که mongoDB را با تنظیمات پیش‌فرض اجرا کنيم، به طور خودکار یک پایگاه‌داده با نام test در آن ایجاد شده و آماده استفاده است. برای دسترسی به mongoDB مي‌توان از پوسته خط فرمانی آن استفاده کرد که در تمام سیستم‌عامل‌ها قابل استفاده است. برای اجرای آن، مي‌توان به سادگی فایل اجرایی mongo را با تایپ نام آن در خط فرمان اجرا کرد. در صورت اجرا با تنظیم‌هاي پیش فرض، این پوسته تلاش مي‌کند که به پایگاه‌داده نصب شده به‌صورت محلی متصل شود. در صورت درست پیش‌رفتن همه چیز، کاربر پنجره‌ای مشابه شکل 1 را در ویندوز مشاهده خواهد کرد.
    شکل 1- پایگاه ‌داده mongoDB در حال اجرا روی ویندوز به همراه پوسته ارتباطی آن در پنجره جلویی
    بهتر است بدانید که برای کار با پوسته mongoDB نیازی به نصب آن روی سیستم خود ندارید. سایت این پایگاه داده، یک کنسول آزمایشی آنلاین نیز راه‌اندازی کرده است (در بخش Try it Out) که برای انجام امور آموزشی یا آزمايش‌هاي مختلف قابل استفاده است. کار با این کنسول در نوع خود بسیار سودمند، سریع و کم زحمت بوده و در کسب مهارت در mongoDB بسیار مؤثر خواهد بود. شکل ۲ نمایی از این کنسول را نشان مي‌دهد. قبل از انجام هر کاری، بهتر است دستورات اصلی کار با پایگاه‌داده از طریق پوسته مربوطه را که در جدول 1 آورده شده است، مرور کنيد. این دستورات، در آینده برای انجام امور ارتباطی با mongoDB استفاده خواهند‌شد.
    شکل 2- کنسول مدیریتی آزمایشی mongoDb که به‌صورت آنلاین در دسترس است
    جدول 1- دستورهاي اصلی برای کار با پوسته mongoDB
    "برای استفاده از درایور mongoDB در PHP، مي‌توانید از مخزن معروف PECL که حاوی مجموعه‌ای از افزونه‌هاي سودمند PHP است در سیستم‌عامل لینوکس استفاده کنيد."
    اتصال از طریق PHP
    پس از انجام امور فوق، باید درایور مناسبی را نیز برای ارتباط با پایگاه‌داده از طریق پلتفرم برنامه‌نویسی مورد‌نظر خود دانلود و نصب کنيد. خوشبختانه، درایورهای بسیار مناسب و پایداری برای ارتباط با پایگاه‌داده mongoDB برای بيشتر زبان‌هاي برنامه‌نویسی موجود است. برای دانلود و نصب این درایورها، مي‌توانید به بخش درایورهای mongoDB در سایت آن مراجعه کنيد. همان‌طور که در شکل ۳ نیز نشان داده شده است، تعداد بسیاری از زبان‌هاي برنامه‌نویسی تحت پوشش mongoDB قرار دارند.
    شکل 3- بخش دانلود درایورهای mongoDB برای زبان‌هاي برنامه‌نویسی مختلف
    برای استفاده از درایور mongoDB در PHP که در بخش‌هاي بعدی به آن نیاز خواهیم داشت، مي‌توانید از مخزن معروف PECL که حاوی مجموعه‌ای از افزونه‌هاي سودمند PHP است در سیستم‌عامل لینوکس استفاده کنيد. طریقه نصب درایور مذکور در اوبونتو نیز همانند روش توضیح‌داده‌شده برای خود mongoDB و با استفاده از دستور زیر است:
    $ sudo pecl install mongo برای نصب دستی این درایور در لینوکس و همچنین ویندوز کارهای بیشتری باید انجام داد که با مراجعه به بخش مربوطه در سایت mongoDB مي‌توانید به راحتی با آن آشنا شوید. برای برقراری اتصال با پایگاه‌داده از طریق PHP و با استفاده از درایور نصب شده آن، باید از کدهای زیر استفاده کرد:
    $connection = new Mongo(); در این حالت، درایور مذکور تلاش مي‌کند تا به پایگاه‌داده موجود روی سرور محلی و با استفاده از پورت پیش‌فرض 27017 متصل شود. در صورتی که پایگاه‌داده روی ماشینی دیگر و پورتی متفاوت موجود است، باید از کد زیر استفاده کرد:
    $connection = new Mongo(“example.com:12345”); پس از انجام کارهای لازم از طریق کد PHP، باید اتصال به پایگاه‌داده را با استفاده از کد زیر بست: $connection->close(); اکنون که با روش نصب و راه‌اندازی mongoDB و مفاهیم اولیه برقراری ارتباط با آن از طریق PHP آشنا شده‌اید، بهتر است کمی به معماری و ساختار داده‌ای آن بپردازیم.
    "در این پلتفرم، یک پایگاه‌داده مي‌تواند حاوی مجموعه‌هایی (Collection) باشد که خود حاوی صدها یا هزاران سند با ساختار متفاوت باشند."

    معماری داده‌ای MongoDB
    همان‌طور که قبلاً نیز گفته شد، پایگاه‌داده mongoDB یک پایگاه‌داده اسنادی NoSQL است که انعطاف بسیار بالایی را در ذخیره داده‌ها فراهم مي‌سازد. در این پلتفرم، یک پایگاه‌داده مي‌تواند حاوی مجموعه‌هایی(Collection) باشد که خود حاوی صدها یا هزاران سند با ساختار متفاوت باشند. این انعطاف، دست برنامه‌نویس را در کار با پایگاه‌داده از طریق زبان‌هاي داینامیکی مانند PHP باز گذاشته و انجام بسیاری از امور را به پایگاه‌داده محول مي‌کند. برای آشنایی بهتر با این پایگاه داده، بهتر است یک مثال را در نظر بگیریم. در MongoDB، یک سند عنصری است که حاوی داده‌هاست و مي‌توان آن را به نوعی با سطر(Row) در پایگاه‌هاي داده‌ای سنتی رابطه‌ای معادل دانست. در عبارت آورده شده زیر که با فرمت کلی JSON ارائه شده است، شاهد دو سند کاملاً متفاوت هستیم که به‌سادگی مي‌توانند در یک مجموعه منفرد با نام Media در یک پایگاه‌داده موجود در mongoDB ذخیره و مدیریت شوند:

    {
    “Type”: “CD”,
    “Artist”: “Shajarian”,
    “Title”: “Bidad”,
    “Genre”: “Classic”,
    “Releasedate”: “1991.09.24”,
    “Tracklist”: [
    {
    “Track”: “1”,
    “Title”: “Saz o Avaz”,
    “Length”: “5:02”
    },
    {
    “Track”: “2”,
    “Title”: “Suz o godaz”,
    “Length”: “4:15”
    }
    ]
    }
    {
    “Type”: “Magazine”,
    “Title”: “Shabakeh (Network)”,
    “ISSN”: “987-1-4302-3051-9”,
    “Publisher”: “Asr e Shabakeh”,
    “Authors”: [
    “Izad Panah, Parham”,
    “Nazari, Erfan”,
    “Soltani, Qmars”
    ]
    }

    همان‌طور که مي‌بینید، دو سند مختلف با ساختاری متفاوت در کنار یکدیگر و در یک مجموعه (Collection) با نام Media ذخیره شده‌اند و قابل استفاده خواهند بود. شکل 4 نمایی از ساختار داده‌ای mongoDB و مقایسه آن با پایگاه‌هاي داده‌ رابطه‌ای را نشان مي‌دهد که برای درک بهتر mongoDB توجه به آن سودمند خواهد بود. در هر سند، مي‌توان از انواع داده‌ای مختلف مانندString ،Integer (32b & 64b) ،Boolean ،Double ،Array، Timestamp ،Object ،Null ،Symbol ،Date ،Object ID و Binary Data و حتی کد جاوااسکریپت (به‌عنوان یک نوع داده‌ای) استفاده کرد. چهار نوع داده‌اي آخر از انواع داده‌ای JSON نبوده و از آن‌ها به BSON تعبیر مي‌شود.
    شکل 4- مدل داده‌ای mongoDB در مقایسه با مدل سنتی رابطه‌ای
    ' mongoDB علاوه بر فراهم‌سازی سهولت و انعطاف در ذخیره‌سازی داده‌ها، قابلیت‌هاي پیشرفته‌ای مانند کلاستر‌سازی، جایگزینی و MapReduce را نیز ارائه مي‌کند که وجود آن‌ها، قابلیت اعتماد و مقیاس‌پذیری بالا را برای آن به ارمغان آورده است."
    مدیریت داده‌ها
    پس از آشنایی کلی با مدل داده‌ای mongoDB‌، روش مدیریت آن‌ها از طریق پوسته پایگاه‌داده را مورد بررسی قرار خواهیم داد. همان‌طور که قبلاً نیز گفته شد، برای مشاهده پایگاه‌هاي داده‌ای موجود، از دستور show dbs استفاده مي‌شود که در صورت اجرای این دستور روی یک پایگاه‌داده تازه اجرا شده، جوابی مطابق با کد زیر برگردانده خواهد شد:
    > show dbs
    local (empty)
    برای تولید یک مجموعه جدید در پایگاه‌داده حاضر، باید از دستور زیر استفاده کرد:
    > db.createCollection(“Media”)
    {“ok”: 1} توجه داشته باشید که در پوسته MongoDB، متغیر db به نام پایگاه‌داده جاری اشاره دارد که عملیات مربوطه در آن انجام مي‌شود. حال، برای افزودن یک سند به این مجموعه تازه ایجاد شده، باید از دستورات زیر استفاده کنيم:

    > document = ({ “Type”: “CD”, “Artist”: “Shajarian”, “Title”: “Bidad”, “Genre”: “Classic”, “Releasedate”: “1991.09.24”, “Tracklist”: [ { “Track”: “1”, “Title”: “Saz o Avaz”, “Length”: “5:02” }, { “Track”: “2”, “Title”: “Suz o godaz”, “Length”: “4:15” } ]})
    db.Media.insert(document)

    هم‌اکنون، سند نخست به مجموعه Media اضافه شده و مي‌توان آن را مورد استفاده قرار داد. برای مشاهده داده‌هاي ذخیره‌شده در یک مجموعه به سادگی مي‌توان از دستور find به‌صورت زیر استفاده کرد. این دستور لیستی از سندهای موجود در مجموعه مورد نظر را بر‌خواهد گرداند:

    > db.Media.find()
    { “_id” : ObjectId(“4c1a8a56c603000000007ecb”), “Type”: “CD”, “Artist”: “Shajarian”, “Title”: “Bidad”, “Genre»: “Classic”, “Releasedate”: “1991.09.24”, “Tracklist”: [
    {
    “Track”: “1”,
    “Title”: “Saz o Avaz”,
    “Length”: “5:02”
    },
    {
    “Track”: “2”,
    “Title”: “Suz o godaz”,
    “Length”: “4:15”
    }
    ]}

    اما مي‌توان در تابع find، از پارامتر نیز استفاده کرد که به معنی برگرداندن اسنادی است که پارامتر مذکور در آن‌ها موجود است. به‌عنوان مثال، در صورتی که بخواهیم اسنادی را برگردانیم که حاوی Artist:”Shajarian” هستند، از این دستور استفاده مي‌کنیم که نتیجه اجرای آن نیز در ادامه آورده شده است:
    > db.Media.find({Artist: “Shajarian”})
    { “_id” : ObjectId(“4c1a8a56c603000000007ecb”), “Type”: “CD”, “Artist”: “Shajarian”, “Title”: “Bidad”, “Genre”: “Classic”, “Releasedate”: “1991.09.24”, “Tracklist”: [
    {
    “Track”: “1”,
    “Title”: “Saz o Avaz”,
    “Length”: “5:02”
    },
    {
    “Track”: “2”,
    “Title”: “Suz o godaz”,
    “Length”: “4:15”
    }
    ]}

    برای انجام پرس‌وجوهای پیچیده‌تر، مي‌توان چندین پارامتر مختلف را با هم به تابع find ارسال کرده و با استفاده از کارکتر «:»، دامنه جست‌وجو را به عبارت‌هاي جزئی‌تر و زیر مجموعه ببریم. همچنين، مي‌توان با استفاده از روش‌هاي sort‌، limit، skip و... در تابع find، نتایج جست‌وجو را بر‌اساس نیاز مرتب‌ کرده یا محدود کرد. پایگاه mongoDB ابزارهای مدیریتی بسیار سودمندی را ارائه مي‌کند که کنسول مورد استفاده ما تنها یکی از آن‌ها است. در سایت mongoDB مي‌توانید بخشی را تحت‌عنوان Admin+UIs بیابید که به معرفی انواع ابزارها برای مدیریت این پایگاه‌داده مي‌پردازد. یک رابط مدیریتی تحت وب همانند PHPMyAdmin از جمله این ابزارهای سودمند است. همچنين، یک ابزار درونکار گزارش‌‌دهی نیز در این پایگاه‌داده در نظر گرفته‌شده است که با وارد‌کردن آدرس فقط کاربران ثبت نام شده میتوانند لینک های انجمن را مشاهده کنند. ] در نوار‌آدرس مرورگر ماشین اجرا‌کننده mongoDB به نمایش در مي‌آید. شکل۵ نمونه‌ای از این ابزار گزارش‌دهی را نشان مي‌دهد.

    شکل 5- رابط تحت وب مانیتورینگ و تهیه گزارش از وضعیت کاری MongoDB

    نردبان این جهان ما و منیست
    عاقبت این
    نردبان افتادنیست
    لاجرم آن کس که بالاتر نشست
    استخوانش سخت تر خواهد شکست




    #1 ارسال شده در تاريخ 7th July 2012 در ساعت 09:15

  2. *Mohammad* آواتار ها
    *Mohammad*
    مدیر سابق
    May 2011
    63,336
    22,637
    تشکر شده : 91,444

    پیش فرض

    جایگزینی، بخش بخش‌سازی و GridFS
    پایگاه‌داده mongoDB علاوه بر فراهم‌سازی سهولت و انعطاف در ذخیره‌سازی داده‌ها، قابلیت‌هاي پیشرفته‌ای مانند کلاستر‌سازی، جایگزینی، MapReduce و... را نیز ارائه مي‌کند که وجود آن‌ها، قابلیت اعتماد و مقیاس‌پذیری بالا را برای آن به ارمغان آورده است. نخستين قابلیت سودمند mongoDB وجود یک ابزار مانیتورینگ عملکرد با نام Profiler است که امکان زیر نظر گرفتن عملکرد کلی سیستم نرم‌افزاری و سخت‌افزاری را فراهم‌‌کرده و راه را برای بهینه‌سازی تنظیمات نرم‌افزاری برای بهره‌برداری حداکثری از سخت افزار فراهم مي‌سازد. همچنين، قابلیت تنظیم انعطاف‌پذیر انديس‌ها در این پایگاه‌داده امکان Tune کردن عملکرد آن برای دریافت بهینه‌ترین بازخورد را فراهم‌مي‌سازد که در نوع خود، یکی از مناسب‌ترین گرینه‌هاي سفارشی‌سازی پایگاه‌داده به شمار مي‌آید.
    فقط کاربران ثبت نام شده میتوانند لینک های انجمن را مشاهده کنند. ]
    شکل 6- ساختار پیکربندی پیچیده جایگزینی مجموعه‌اي در MongoDB
    "به گونه‌اي انتخاب و طراحی شده‌اند که با نیازمندی‌هاي پردازش ابری امروزی همخوانی داشته و امکانات مقیاس‌دهی خودکار با حساسیت به بار کاری و همچنین داینامیک بودن کل مجموعه را به بهترین نحو حفظ کند."
    همچنين، mongoDB از قابلیت‌هاي جایگزینی بسیار غنی نیز سود مي‌برد که امکان استفاده قابل اعتماد از آن در محیط‌هاي مختلط و همچنین کاربردهای حساس با در دسترس بودن بالا را به سادگی فراهم مي‌سازد. اين پایگاه‌داده از سناریوهای مختلفی برای جایگزینی مانند Single Master/ Single Slave، Single Master/ Multiple Slave، Multiple Master/ Single Slave، جایگزینی آبشاری، جایگزینی جفتی و جایگزینی مجموعه‌اي پشتیبانی مي‌کند که به فراخور وضعیت مورد استفاده، حجم داده‌ها و زیر‌ساخت در دسترس و قابل استفاده هستند. شکل ۶ نمونه‌اي از ساختار جایگزینی در mongoDB را نشان مي‌دهد. در کنار امکانات بالا، پایگاه‌داده mongoDB قابلیت بسیار پیشرفته و سودمند Sharding را نیز که بيشتر توسط پایگاه‌های داده No SQL پشتیبانی می‌شود، ارائه مي‌کند. با استفاده از این قابلیت، مي‌توان داده‌ها را در سطح تعداد زیادی از ماشین‌هاي یک کلاستر پخش کرد در حالی که در سمت کاربر یا یک برنامه کاربردی، تنها به صورتی دیده شوند که گویی روی یک سرور منفرد قرار دارند. امکانات sharding موجود در mongoDB به گونه‌اي انتخاب و طراحی شده‌اند که با نیازمندی‌هاي پردازش ابری امروزی همخوانی داشته و امکانات مقیاس‌دهی خودکار با حساسیت به بار کاری و همچنین داینامیک بودن کل مجموعه را به بهترین نحو حفظ کند. همانند جایگزینی‌، پیکربندی‌هاي مختلفی برای sharding در mongoDB وجود دارد که بسته به ساختار داده‌ها، حجم آن‌ها و همچنین اولویت عمق عمودی یا افقی آن‌ها، مدل مورد استفاده انتخاب خواهد شد. در شکل‌هاي ۷ و ۸ نمونه‌هایی ساده و پیشرفته از پیکربندی sharding پایگاه‌داده mongoDB به تصویر کشیده شده است.
    فقط کاربران ثبت نام شده میتوانند لینک های انجمن را مشاهده کنند. ]
    شکل 7- یک پیکربندی ساده برای sharding در پایگاه‌داده MongoDB
    و اما GridFS. درباره این قابلیت mongoDB ابتدا باید به نکته‌اي خاص درباره محدودیت‌هاي این پايگاه‌داده اشاره کرد. در MongoDB، حداکثر حجم در‌نظر گرفته شده برای هر سند ذخیره شده در مجموعه‌ها 4‌مگابایت است که در مقابل حجم در حال افزایش داده‌ها مانند تصاویر با کیفیت، اسناد حجیم و فایل‌هاي ویديویی بسیار کم و غیر قابل استفاده به نظر مي‌رسد. مهم‌ترین دلیل انتخاب این حجم به‌عنوان حد نهایی، حفظ سرعت عملکرد پایگاه‌داده در حدی قابل قبول است. با این حال، برای حل مشکل ذخیره‌داده‌هاي حجیم در MongoDB، قابلیتی به‌نام GridFS در آن گنجانده شده است که داده‌هاي حجیم را در قالب بخش‌هاي مختلف ذخیره‌کرده و سیستم در صورت نیاز به دسترسی به آن‌ها، تنها بخش‌هاي مورد نیاز را (بدون برگرداندن کل داده‌ها) بر مي‌گرداند که خود قابلیتی بسیار سودمند و کارا است.
    "برای ذخیره‌ داده‌هاي حجیم در MongoDB، قابلیتی به‌نام GridFS در آن گنجانده شده که داده‌هاي حجیم را در قالب بخش‌هاي مختلف ذخیره‌کرده و سیستم در صورت نیاز به دسترسی تنها بخش‌هاي مورد نیاز را بر مي‌گرداند."

    سیستم GridFS در اصل یک بخش نرم‌افزاری جدا در سمت سرور نیست که برای استفاده از آن به کد سمت سرور خاصی نیاز باشد بلکه یک خصوصیت است که در درایورهای mongoDB پیاده‌سازی شده و به همین دلیل، اسناد ذخیره‌شده توسط یک درایور، توسط دیگر درایورها نیز قابل خواندن است. پیاده‌سازی شدن GridFS در درایورهای mongoDB بسیار سودمند بوده و کارایی کل مجموعه را نیز به شدت بالا مي‌برد. برای استفاده از این قابلیت باید با باینری اجرایی mongofiles که در پوشه bin پوشه mongoDB وجود دارد، کار کرد. با یک جست‌وجوی ساده در اینترنت، روش کار با این قابلیت سودمند را به سادگی خواهید یافت.
    "اجرای دستورات و کوئری روی mongoDB استفاده از درایور PHP بسیار شبیه به ساختار مورد استفاده در پوسته خط فرمان این پایگاه‌داده طراحی شده است تا توسعه‌دهنده بتواند به سادگی با محیط مربوطه ارتباط برقرار کند."
    یک وبلاگ ساده
    اکنون به بررسی یک مثال ساده برای آشنایی بیشتر با mongoDB خواهیم پرداخت. در این مثال، یک برنامه مدیریت وبلاگ را با استفاده از پایگاه‌داده mongoDB و PHP خواهیم ساخت. برای شروع کار، ساختار سند را مانند فهرست ۱ برای ذخیره در وبلاگ در نظر مي‌گیریم:
    {
    “Title”: “این عنوان بلاگ است”,
    “Author”:
    {
    “$ref” : “authors”,
    “$id” : ObjectId(“4c612fa774740000000034b5”)
    },
    “Date”: “Tue Aug 10 2010 13:14:08 GMT+0200”,
    “Message”: «اولین پست بلاگ”,
    “Comments” : [
    {
    “Name”: “Parham”,
    “Comment”: “کامنت اول”
    },
    {
    “Name”: “Ahmad”,
    “Comment”: “کامنت دوم”
    }
    ]
    }

    در سند فوق، همان‌طور که مشاهده مي‌کنيد بخشی برای عنوان، بخشی برای نویسنده و همچنین بخش‌هایی برای تاریخ، محتوا و توضیحات پایین پست در نظر گرفته شده است. این سند باید در یک مجموعه (Collection) جدید با نام Posts ذخیره شود. توجه کنيد که در بخش نویسنده از مدل خاصی استفاده شده است که به آن ارجاع گفته مي‌شود و در این سند، به یک مجموعه موجود در پایگاه‌داده با عنوان نویسندگان یا Authors اشاره دارد. ساختار این مجموعه مانند فهرست ۲ خواهد بود:

    {
    “Name”: “Erfan”,
    “E-Mail”: “erfan.nazari@shabakeh-mag.com”,
    “Interests”: “MongoDB”,
    “_id”: ObjectId(“4c612fa774740000000034b5”)
    }

    اکنون باید با استفاده از پوسته mongoDB، پایگاه داده Blog ومجموعه‌های Posts و Authors را ایجاد کرده و داده‌هاي مربوطه (سندهای مربوطه) را در آن‌ها وارد کرده و آماده استفاده از آن‌ها از طریق PHP شویم. در برنامه وبلاگ مورد نظر ما، به یک بخش برای نمایش پست‌ها نیاز داریم. این بخش، با کدی مشابه آنچه در فهرست۳ آورده شده است قابل پیاده‌سازی است‌:
    <?php
    // تعریف چند متغیر
    $db = “Blog”;
    // نام پایگاه‌داده در نظر گرفته شده برای بلاگ
    $col_authors = “Authors”;
    // نام مجموعه در نظر گرفته شده برای ذخیره‌نویسندگان
    $col_posts = “Posts”
    ; // نام مجموعه در نظر گرفته شده برای ذخیره پست‌ها
    $limit = 10;
    // حداکثر تعداد پست‌هاي مجاز برای نمایش
    // اتصال به پایگاه‌داده
    $c = new Mongo();
    // اجرای یک جست‌وجو و ذخیره نتایج در متغیر نشانگر
    $cursor = $c->$db->$col_posts->find()->limit($limit)->sort(array(‘_id’=>-1));
    // برای هر سند بازگردانده شده در مجموعه، حلقه زیر یک بار تکرار مي‌شود
    while ($document = $cursor->getNext())

    {

    //واکشی داده‌هاي مربوط به نویسنده با استفاده از متد مناسب
    $ref = $c->$db->getDBRef($document[“Author”]);
    $author = $ref[“Name”];
    $date = date(‘M d, Y @ h:i’, $document[“Date”]->sec);
    //چاپ مقادیر مربوطه
    print “<h1>$document[Title]</h1>”;
    print “<i>By $author on $date</i>”;
    print “<p>$document[Message]</p>”;
    // در صورتی که کامنتی موجود باشد، آن‌ها را چاپ مي‌کند
    if (isset($document[‘Comments’]))
    {
    // نمایش تیتر برای کامنت‌‌ها
    print “<h3>Comments</h3>”;
    // ذخیره هر کامنت یافت شده در یک متغیر جدید برای اجرا در حلقه
    foreach ($document[‘Comments’] as $comm)
    {
    // چاپ بخش‌هاي ذخیره شده برای کامنت‌ها
    print “<b>$comm[Name]</b></br>”;
    print “<i>$comm[Comment]</i></br>”;
    }
    }
    {
    ?> ساختار کد استفاده شده بسیار ساده است و با توجه به توضیحات ارائه شده در خود کد، به سادگی قابل درک است. در این کد، با استفاده از درایور mongoDB برای PHP به این پایگاه‌داده وصل شده و یک کوئری در آن به اجرا گذاشته‌ایم. سپس محتوای اسناد بازگردانده شده، به‌صورت کد HTML نوشته مي‌شوند. همان‌طور که مشاهده مي‌کنيد، اجرای دستورات و کوئری روی mongoDB با استفاده از درایور PHP بسیار شبیه به ساختار مورد استفاده در پوسته خط فرمان این پایگاه‌داده طراحی شده است تا توسعه‌دهنده بتواند به سادگی با محیط مربوطه ارتباط برقرار کند. برای ایجاد یک پست جدید در پایگاه‌داده نیز مي‌توان از کد فهرست ۴ استفاده کرد که باید در قالب یک صفحه با نام add.php ذخیره شود:

    <?php
    // بخش اول، تولید فرم دریافت کامنت
    // ابتدا اتصال به پایگاه داده
    $c = new Mongo();
    $db = “Blog”;
    $col_posts = “Posts”;
    $col_authors = “Authors”;
    // دریافت لیستی از نویسندگان
    $cursor = $c->$db->$col_authors->find();
    // چاپ فرم با استفاده از نام‌هاي بازیابی شده
    print “<form action=’add.php’ name=’addpost’ method=’posts’>”;
    print “<input type=’text’ name=’Title’ value=’Fill in the title’><br>”;
    print “Post as: <select name=’names’>”;
    while ($names = $cursor->getNext())
    {
    print “<option value=$names[_id]>$names[Name]”;
    }
    print “</select><br>”;
    print “<textarea cols=’40’ rows=’8’ name=’Message’>Type here</textarea>”;
    print “<input type=’submit’ name=’addpost’ value=’Add’/>”;
    print “</form>”;
    // بخش دوم، پردازش داده‌هاي بازگردانده شده برای پست
    if(isset($_GET[“addpost”]))
    {
    // ایجاد یک آرایه برای ذخیره داده‌هاي ارسال شده توسط کاربر
    $arr = array();
    $arr[‘Title’] = addslashes($_GET[‘Title’]);
    $arr[‘Message’] = addslashes($_GET[‘Message’]);
    $arr[‘Author’] = MongoDBRef::create(
    $c->$db->$col_authors->getName(),
    new MongoId($_GET[‘names’])
    );
    $arr[‘Date’] = new MongoDate();
    $c->$db->$col_posts->insert($arr);
    print “Post added. You can leave this page.”;
    }
    ?> ساختار کد ذخیره پست‌ها نیز بسیار ساده و مشتمل بر دو بخش است. بخش نخست وظیفه رندر‌کردن فرم HTML برای دریافت محتوای پست‌ها از کاربر را بر عهده دارد که در آن از پایگاه‌داده، فهرستي از نویسندگان درخواست شده و نمایش داده مي‌شود. در بخش دوم، به پردازش داده‌هاي وارد شده توسط کاربر پرداخته خواهد شد و با سازماندهی در یک آرایه، برای ذخیره‌شدن به پایگاه‌داده mongoDB ارسال مي‌شوند.
    "اجرا، پیکربندی و کار با پایگاه‌داده mongoDB بسیار ساده است و مي‌توان به سرعت با ساختار و طرز پرس‌و‌جو در آن تطبیق پیدا کرد. به‌رغم اين، این پایگاه‌داده قابلیت‌هاي بسیار پیشرفته و سودمندی همچون قابلیت کلاستر‌سازی و قابلیت MapReduce نیز دارد."
    جمع‌بندی
    همان‌طور که مشاهده کرديد، اجرا، پیکربندی و کار با پایگاه‌داده mongoDB بسیار ساده است و مي‌توان به سرعت با ساختار و طرز پرس‌و‌جو در آن تطبیق پیدا کرد. با این حال، این پایگاه‌داده قابلیت‌هاي بسیار پیشرفته و سودمندی همچون قابلیت کلاستر‌سازی، قابلیت MapReduce و... نیز دارد که پرداختن به آن‌ها در این نوشتار نمی‌گنجد. به هر روی، امید است تا پس از معرفی اجمالی این پایگاه‌داده بسیار شایسته، امکان استفاده از قابلیت‌هاي آن در امور بسیار پیشرفته برای شما فراهم شود.

    نردبان این جهان ما و منیست
    عاقبت این
    نردبان افتادنیست
    لاجرم آن کس که بالاتر نشست
    استخوانش سخت تر خواهد شکست




    #2 ارسال شده در تاريخ 8th July 2012 در ساعت 11:37

علاقه مندی ها (Bookmarks)

مجوز های ارسال و ویرایش

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