מבוא ל-NoSQL: האם זה תחליף למסד נתונים קונבנציונאלי? - ilDBA

מבוא ל-NoSQL: האם זה תחליף למסד נתונים קונבנציונאלי?

31/07/2012 | פורסם על ידי

לאחרונה אנחנו שומעים יותר ויותר על מונח ישן-חדש: NoSQL. נתקלתי כבר בכמה לקוחות ששאלו אותי: "מה המשמעות של NoSQL – האם כדאי לי לעבור ל NoSQL? שמענו שזה מהיר יותר מ-Oracle/SQL Server, זה עולה פחות, לא צריך DBA ולא צריך SQL, אז למה בעצם לא?".

זו באמת שאלה טובה ולכן החלטתי לכתוב מאמר קצר שמתאר, מנקודת המבט שלי, את NoSQL בתקווה להבהיר כמה נושאים ולתת כיוון לגבי מתי נשתמש ב-NoSQL ומתי לא. הערה קטנה לפני שנתחיל – במאמר זה אני מתייחס למסדי הנתונים מסוג NoSQL לפעמים כמנוע כי לפי דעתי הרבה פעמים לא מדובר ממש במסדי נתונים אלא במנועי אחסון ואחזור מתוחכמים וארחיב יותר על הנקודה הזו בהמשך.

מה זה NoSQL ומה ההבדל בינו לבין מסד נתונים רלציוני?

נתחיל בהסבר קצר על המושג NoSQL. המושג NoSQL הוא מושג די כללי שניתן לכמה סוגים שונים של בסיסי נתונים המכילים מידע לא שהוא לא בהכרח רציונאלי ולפעמים הוא אפילו מבוזר. היכולות העיקריות של מסדי נתונים מסוג NoSQL היא היכולת לשמור מידע ולאחזר אותו במהירות רבה ע"י חלוקת המידע לכמה מקורות אחסון (horizontal partition) ובכך ליצור מסד נתונים מהיר עם מעט נקודות כשל וצווארי בקבוק. היכולת לבזר את המידע בצורה אופקית נותן למתכננים את היכולת "לפזר" את המידע לרוחב (scale out) על ידי שימוש במספר גדול של שרתים זולים שלכאורה אינם תלויים אחד בשני.

איך מאחזרים (שולפים) מידע מ-NoSQL?

חלק ממערכות ה-NoSQL שומרות את המידע בצמדים של מפתח וערך ומכאן גם מגיע שמם: Key-Value Store ובהם נתמקד במאמר זה. כדי להבין טוב יותר את בסיסי הנתונים האלה, נשתמש בדוגמה פשוטה: אם נייצג לקוח על ידי מספר מזהה, שם ורשימת חברים, אז מספר מזהה ללקוח יהיה המפתח של הרשומה ואילו השם שלו, רשימת החברים וכדומה יהיו הערכים.

אופן התחקור או התשאול של מערכת NoSQL מתבצע בעיקר על ידי איתור מפתח מסויים והבאת ערך מסויים המקושר אליו (הרבה פעמים מביאים את כל הערכים). יתרה מכך, במערכות  ה-NoSQL  ישנה יכולת מוגבלת יחסית לסנן את התוצאה של החקירה שלנו על פי המידע שבערכים. כדי להבין את זה נשתמש שוב בדוגמה: אנחנו יכולים לבקש מהמערכת ערך של מפתח מסויים אבל אנחנו לרוב לא נוכל לבקש כל מספרי האנשים (המפתחות) שיש להם יותר מ-50 חברים. בכדי לבצע את הפעולה הזו, נאלץ לשלוף את כל רשימת האנשים, לספור את מספר החברים בקוד ורק אז להחזיר את התוצאה – פעולה זו אינה מובנית בתוך מנוע ה-NoSQL ונאלץ לבצע אותה על ידי שימוש בקוד חיצוני לבסיס הנתונים.

כדאי להבין בנקודה זו את המינוח "אחזור תוצאה": מערכות No SQL נקראות כך כי לעיתים קרובות הן אינן "שולפות" את הנתונים בשפה הסטנדרטית SQL. דבר זה היה נכון עד לפני כמה שנים אבל מכוון שאנשים התרגלו להשתמש בשפה הזו לטובת גישה לנתונים, הוצגו מספר מערכות המאפשרות שימוש בשפה הסטדרטית ביחד עם השפה הייעודית (בדרך כלל שפה תכנותית כלשהי). השיטה אומנם השתנתה אבל השם נשאר ואילו ה-NO הפך מ-"לא" לראשי התיבות Not Only – "לא רק". חברת Oracle לדוגמה, מספקת חבילה בשם Oracle big data המכילה מערכת לשליפת המידע ממנוע ה-NoSQL וניתוחו. מידע זה מנותח על ידי תוכנות סטטיסטיות (לדוגמה R) או על ידי שימוש במסד הנתונים הרציונלי של Oracle או על ידי שילוב בין השניים.

אם נתייחס לרגע רק למערכות מבוססות אחזור בצורת שפת תכנות כגון R, נראה שמה שנראה כמו מגבלה היא זו שהופכת מהר מאוד ליתרון המהותי של מערכות ה-NoSQL. אם אין צורך בכתיבת שאילתות אז אין גם צורך לתחזק מנוע אופטימזציה מסובך ויקר מבחינת משאבים ותפעול, אין צורך בתחזוקה של אינדקסים לטובת אופטימיזציה של השליפות ואין צורך "לנחש" את תוכנית הפעולה של אחזור הנתונים. אם הנתונים שלנו נשמרים בצורה שונה אז אין יותר צורך לבנות סכמה שתשמור את המידע בכדי לשלוף אותו במהירות ולעיתים גם אין צורך ב-DBA. ניתן לדוגמה, באמצעות שימוש בתוצרים של פרויקט ה-Hadoop  להשתמש בפרדיגמת תכנות בשם MapReduce המאפשרת כתיבה של קוד שינתח את המידע מחוץ למנוע ה-NoSQL בצורה מקבילית ומהירה על כמה שרתים במקביל ובכך לייעל את השימוש במידע הרבה יותר ממה שאפשר היה לעשות באמצעות מנוע SQL שצריך להתאים למספר גדול של שליפות כלליות.

מה לגבי טרנזאקציות ב-NoSQL?

הבדל מהותי נוסף הוא התפיסה השונה של מונח הטרנזאקציה. מערכות ה-RDBMS, כלומר בסיסי נתונים רציונלים, סטנדרטיים – כמו אורקל ו-SQL Server, דורשות מימוש של 4 פרמטרים חשובים כאשר מדברים על טנזאקציות. הפרמטרים האלה מכונים  ACID: atomicity, consistency, isolation, durability – טרנזאקציות צריכות להיות עצמאיות (הכל או כלום), קונסיסטנטיות (הטרנזאקציה מביאה את בסיס הנתונים למצב אחוד מיד בסיומה), מבודדת (טרנזאקציות על נתון מסוים צריכות להיות סדרתיות) ועמידות (ברגע שטרנזאקציה עברה commit מובטח כי המידע נשמר ואם המידע לא עבר commit והבסיס הנתונים קורס מובטח כי המידע מוחזר לאחור).

אחד הדברים שמערכות ה-NoSQL ניפצו עוד בתחילת דרכן היא את התפיסה המסורתית הזו. לעיתים קרובות בסיסי הנתונים מסוג NoSQL מממשות רק שלושה מתוך הפרמטרים – ולא משנה איזה שלושה. היכולת לוותר על כל אחד מהפרמטרים מאפשרת לבסיסי הנתונים האלה להיות הרבה יותר מהירים, לבזר את המידע למספר שרתים ולהוות תחליף ראוי במקרים מסויימים.

כדי להבין את ההבדל בעולם הטרנזאקציות, אני אדגים את איך ויתור על קונסיסטנטיות מאפשר שיפור במהירות על חשבון דיוק בנתונים. נניח שיש לנו מערכת של חיפוש ברשת, בדומה לגוגל. במערכת מורכבת מהרבה שרתים המחזיקים את בסיס הנתונים בצורה מבוזרת. אם רשומה חדשה שנכנסת לא צריכה להיות קונסיסטנטית – יתכן ועד שכל השרתים יגלו שיש רשומה, שליפה של הנתון הזה יחזיר נתון לא מדוייק. מצד שני היכולת של מערכת כזו להתמודד עם הכנסה של כמות גדולה של רשומות בזמן קצר לא תלויה יותר במנגנוני נעילות ועל כן היא מהירה הרבה יותר. אם כך, היתרון הגדול של מערכות אלו הוא במהירות של שמירת המידע ושליפתו על הדיוק בשמירתו.

ראוי לציין שמערכות NoSQL שאינה מממשת טרנזאקציות על פי ACID אינה מתאימה לשימושים סטנדרטים של RDBMS כמו מערכות פיננסיות, או ERP או CRM. מערכות אלה "יאלצו" להמשיך להשתמש ב-RDBMS גם בעתיד.

אז מה אנחנו יכולים לעשות עם NoSQL?

מנוע ה-NoSQL מתאים לעיתים קרובות למערכות WEB או מערכות דומות שמעגל העבודה שלהם הוא insert-read-update-delete  בצורה מושלמת. מערכות אלו יכולות לנצל את יכולת השליפה והשמירה הפשוטה והמהירה של מנועי ה-NoSQL. דוגמה לכך ניתן לראות ברשימת מועדפים או רשימת חברים . מערכות כאלה יכולות בקלות להישמר ולהישלף בצורה מהירה על מנוע NoSQL ואם התוצאה המתקבלת היא לא מדוייקת בנקודת זמן מסוימת, אז זה לא עניין של חיים ומוות.

שימוש אחר שרבים מבצעים במנוע ה-NoSQL הוא כ-web cache, בכדי לשמור נתונים בצורה קרובה לשרתי ה-web – לדוגמה שמור נתוני session של משתמשים, לאסוף נתוני זמן אמת ממקורות מהירים שמייצרים המון מידע בזמן קצר – למשל סנסורים מהירים או מערכות סטטיסטיות.

מהם מנועי ה-NoSQL המרכזיים כיום?

בחלק זה השתדלתי לתאר בקצרה כמה ממנועי ה-NoSQL המרכזיים כיום. ישנם המון הבדלים בין המנועים השונים וקיימים הרבה מבחני השוואה בין המנועים ברשת. זו אינה רשימה מלאה ואני אשמח לשמוע את התייחסותכם לרשימה.

Hadoop – האדופ הוא שמו של פרויקט קוד פתוח בתחום ה-NoSQL/Big Data המחבר בין פרויקטים לאחסון הנתונים (HDFS) ומנועים שונים לאחזור המידע (MapReduce – תשתית להרצת קוד בצורה פרללית ואופקית ולתשאול בסיס הנתונים). במשך השנים התווספו לפרויקט הזה המון פרויקטי לווין המהווים שיפור והגדלה של הפתרון הזה. הפרויקט מנוהל על ידי Apache והוא כאמור, קוד פתוח. סביב פתרון זה קמו מספר חברות המספקות את הפתרון הזה "מהקופסא" – Oracle ו-EMC הן הראשונות שמביאות את הפתרון הזה לעולם ה-Enterprise.

זהר אלקיים כתב מאמר המסביר את עקרונות ההאדופ ואיך אורקל ממשים את הפתרון הזה – המאמר שלו נמצא באתר ואתם מוזמנים לקרוא אותו כאן.

Google BIGTABLE – פרויקט סגור של חברת Google והאב הרוחני של פרויקט ההאדופ. בסיס נתונים זה נבנה כדי לשמש בסיס הנתונים למנוע האינדוקס הענקי של החברה. מערכת זו מתוכננת לשמירה של טריליוני רשומות בצורה מבוזרת על מספר עצום (למעלה מ-100,000) של מכונות.  חלק גדול המוצרים של Google משתמשים במנוע הזה כדי להחזיק את המידע שלהם.

HBASE – פרויקט קוד פתוח המבוסס על Hadoop, המאפשר שימוש נוח יותר בניהול, אחזור ותחזוקה של מיליארדי רשומות בדומה מערכות ה-big table של Google.

CouchDB  – עוד מנוע שמסתמך על Hadoop. מכיל את אותם יכולות וכלים וכמו Hadoop, אך מכיל עוד אפשריות מיוחדות לעבודה מול json. 

Cassandra – מנוע NoSQL קוד פתוח הבנוי על Hadoop. מכיל יכולות מורכבות יותר כמו אינדוקס ו-Matrialized views ויכולת ניהול מתקדמות יותר.

Oracle NoSQL – מנוע NoSQL חדש שבנוי על מנוע בשם Oracle Berkeley DB וזוהי למעשה התשובה של חברת Oracle לעולם ה-NoSQL.  פתרון זה מגיע בן היתר גם כחלק מחבילת ה-big data של Oracle המוזכרת במאמר של זהר ועוד נכתוב עליה לעומק בהמשך.

Mongodb – מנוע מאוד פופולארי ואחד הנפוצים בתעשייה. הוא מוגדר כמנוע מדור החדש של מנועי ה-NoSQL: הוא מאוד דינאמי ובנוי על תפיסה של object oriented. אחד היתרונות של מנוע זה הוא שהוא מכיל תמיכה טובה ב- C# וב-Java והוא מאפשר להשתמש הן בקידוד והן ב-SQL כדי לאחזר מידע.

MySQL NDB  –  מנוע ה-NDB  של MySQL. מסוגל לשמש כמנוע NoSQL ובכך מאפשר גישה למידע הטבלאי בצורת NoSQL. יכולת חדשה וחזקה של מנוע ה-CLUSTER של MYSQL ומשמש בעיקר כ-web cache. גם על מנוע זה נפרט על כך במאמר נוסף בהמשך.

לסיכום, אני מקווה שהעברתי קצת מההבדלים בין מנוע RDBMS רגיל לבין מנועי NoSQL.

נתראה ברשומה הבאה!

ברוך  אוסובסקי,
Baruch@brillix.co.il

5 תגובות ל- “מבוא ל-NoSQL: האם זה תחליף למסד נתונים קונבנציונאלי?”

commenter

הי, יש לי שאלה איך Cassandra ן CouchDB  קשור ל Hadoop איך הם מסתמכים/בנויים על הדופ?

ליאור קינג | 01/08/2012 בשעה 12:38
commenter

Hi Baruch,

There are a few other NoSQL projects worth mentioning:

1. Redis – a persistent Key/Value store that is very efficient in holding data in memory and writing it asynchronouly to disks. "Craigslist" web site uses it.

2. Graph databases such as Neo4J and FlockDB are also good for particular cases. FlockDB is used by Twitter and stores adjacency lists for follower on Twitter.

3. Hypertable – an open source project that claims it has better performance over HBase when dealing with large amounts of data. It is used by Baidu (the most successful search engine in China)

There is a trend in RDBMS system to offer NoSQL-like services (like "columnstore indexes" in sql server 2012) and on the other hand the NoSQL systems offer "SQL"-like services (such as Hive).

I guess we might see a fusion of SQL and NoSQL in the future – to get the best both type of systems offer.

What do you think?

commenter

hi lior

i dont think that the combination for the nosql and rdbms can be on the same engine
the Different approach of retrieval and storing the data making the combined database approach very Problematic to apply .
and will not be a match to standard rdbms and standard nosql engine working Together .
lots of nosql/bigdata (not only sql) Engines (like MongoDB ) Trying to live in Both of the worlds but nosql Engine will never be a rdbms and rdbms will never be a nosql Engine
i think that oracle with the Big Data solution that combain nosql engine and Advanced Analytics (R) and a standard rdbms is the right approach .
despite of this
the combination of nosql access to rdbms can be nice to have Feature for fast access to parts of the data but you need to be very very Careful how and where you are using this Feature .
i will Expand this issue on my next articale .

baruch .

commenter

אחלה מאמר!

commenter

בהחלט מאמר מעשיר, תודה.

השאר תגובה:

שם (חובה):
אימייל (לא יפורסם) (חובה):
תגובה (חובה):

*



מאמרים קשורים

MongoDB ל DBA ומפתחים הלכה למעשה

אין טעם לחזור ולספר מה החשיבות של בסיסי נתונים Nosql. על פי הסקרים האחרונים בין ה Nosql מסוג Document DB, MongoDB הוא המוביל. בסדרה זו אני אציג ניהול של MongoDB דרך ה Shell וכלי הניהול החדשים של גרסה 3.2. בהקשר של [...]
http://hadoop.apache.org

עולם ה-Big Data ופתרון ה- Hadoop

זהר אלקיים במאמר מעניין בנושא Big Data [...]
Copyright 2017 ilDBA Portal. Brought to you by Brillix - Israel Leading DBA company. Sponsored by: DBSnaps - Database Video Tutorialss
Website Security Test
%d בלוגרים אהבו את זה: