במדריך הקודם דיברנו על GridFS – כיצד מאחסנים קבצים עם MongoDB. במדריך הזה אנו נדבר על ייבוא וייצוא של MongoDB ממכונה אחת למכונה שניה. ייבוא וייצוא נעשים לכמה מטרות – לעתים זה חלק מתהליך deployment – כלומר מעבר מסביבה אחת לאחרת. לעתים זה למטרות גיבוי.
ב-MongoDB, בדומה ל MySQL, יש שימוש בכלים חיצוניים על מנת לייצא ולייבא. כל הדוגמאות הן בלינוקס, אך מי שעקב אחרי המדריכים הקודמים שלי על MongoDB יודע שאת כל הדוגמאות מלינוקס אפשר להעתיק לחלונות – איך? פותחים cmd, הולכים אל התיקיה שהצבנו בה את MongoDB בהליך ההתקנה ומשם מריצים את הפקודה של לינוקס בצירוף exe. – אם למשל הפקודה בלינוקס היא mongorestore, בחלונות הפקודה תהיה mongorestore.exe. קל ופשוט, לא?
האמת שהכי קל זה פשוט לעבוד עם לינוקס. אם אתם לא עובדים עם דוט.נט, אז באמת אין שום סיבה שלא תעבדו עם לינוקס. זה פשוט ואפשר לעשות את זה עם Virtual Machine.
אחרי ההטפה – איך מייצאים? די בקלות. יש לנו שתי דרכים לבצע ייצוא – הראשונה והאמינה יותר היא mongodump שמייצרת לנו קבצי JSON ו-BSON. מה הבעיה? שקבצי ה-JSON הם קבצים שכוללים מידע לא סטנדרטי ולפיכך מערכות אחרות (לא MongoDB) יתקשו להתמודד איתם. אם אתם רוצים להעביר מ-MongoDB ל-MongoDB זו השיטה.
במידה ואתם רוצים JSON או CSV נקי – תצטרכו להשתמש ב-mongorestore שדומה מאוד מבחינת השימוש ל-mongodump, אבל הוא עלול להוציא קבצים שונים מעט ממה שיש במערכת שלכם – במיוחד אם יש לכם מידע מיוחד.
איך משתמשים? פשוט כותבים mongodump והוא ישפוך לכם את כל מסדי הנתונים לתוך תיקית dump מהמקום שהרצתם אותו. אחרי הייצוא, בתיקיה תראו שיש הרבה תיקיות – כל אחת ייחודית למסד הנתונים ובכל תיקיה, הס פן תעיר, ישנים להם קבצי ה-collection – שהם קבצי BSON ו-JSON. האחד הוא בינארי (BSON) והשני הוא JSON.
ואם אני רוצה לייצא רק מסד נתונים אחד ולא את כולם? מאוד פשוט:
mongorestore -d test
השורה שלעיל תייצא רק את מסד הנתונים test.
רגע, ומה אם אני רוצה רק collection?
mongodump -d test -c pages
רגע! ומה אם אני לא רוצה את כל ה-collection אלא רק documents שעונים לתנאי מסוים? למשל רק כאלו שה-title שלהם נגמר ב"61".
mongodump -d test -c pages -q '{"title":/61$/}'
רגע! ומה אם אני רוצה לקבוע לאן הקובץ יגיע? ואני רוצה גם שהוא ישטוף לי את הבית ויעשה לי מסאז' תוך כדי?
את כל זה ועוד אפשר לדעת אם עושים mongodump –help או מסתכלים בדוקומנטציה של mongodump. אפילו שלא הייתי בונה על שטיפת הבית או מסאז'.
אחרי שייצאנו, הגיע הזמן לייבא! איך מייבאים? מאוד פשוט – mongorestore. באותו מקום שיש בו את תיקית ה-dump. אם אתם לא במקום שבו יש את תיקית ה-dump, אז אפשר לעשות משהו בסגנון הזה:
mongorestore www/dump/test/
יש עוד כמה וכמה אפשרויות ל-mongorestore. איפה מוצאים אותן? אתם כבר יודעים איפה. או בדוקומנטציה של mongorestore או פשוט להקליד mongorestore –help.
כיף כיף כיף!
אגב, כדאי שלא לשכוח ששימוש בייבוא/ייצוא רוצח את MongoDB מבחינת ביצועים – כך שאם אתם מבצעים את זה על שרת חי, כדאי לבדוק את ההשלכות באופן יותר מקיף מאשר רק לקרוא על זה פה. אל תאשימו אותי אם האפליקציה שלכם מתפוצצת.
במאמר הבא נדבר על איך משתמשים ב-MongoDB ב-PHP.
2 תגובות
לא צריך להוסיף exe בחלונות.
ואם רוצים זמינות מכל מקום בשור הפקודה ולא רק בתיקיה של קבצי ההרצה, אז כמו בלינוקס (שם כנראה ההתקנה עושה את זה) יש להוסיף את הנתיב לPATH ע"י SETX.
מאמר מצויין (ובכלל כל המאמרים שלך מצויינים).
נראה שיש טעות copy-paste בדוגמה "ואם אני רוצה לייצא רק מסד נתונים אחד ולא את כולם? מאוד פשוט:".
רשום "mongorestore -d test" ואני מניח שצריך להיות "mongodump -d test"