Redis vs. SQL Server (MOT)

March 12, 2017

 

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

 

תחילה, מהו Redis

Redis הינו מסד נתונים שעובד כ In – Memory בתצורת Key-Value.

המנוע הינו Open- Source מאוד נפוץ ששוקל כ700KB בלבד. ניתן להשתמש כמסד נתונים לכל דבר או כשגבת caching – שימוש עיקרי אצל חברות לטובת Session-State.

ההתקנה של Redis פשוטה מאד (הגרסא הרשמית מבוססות מערכות Linux. אך, קיימת גם גרסה על Windows

Redis-on-Windows-Getting-Started  )

על Redis כבר שמעתי דיי מזמן ומשתמשים בזו לא מעט מלקוחותינו, אך מה שדחף אותי להתחיל ללמוד את הנושא הייתה, הרצאה ששמעתי בAzure Meetup שהתקיימה בפברואר 2017, לצערי עדיין לא העלו את ההקלטות, אבל ההרצאה הייתה מקרה לקוח שהסביר מדוע הם התחילו להשתמש עם Redis.

חגי (Hagai Luger), סיפר שבחברת הזנק שעבד, עבדו מול מסד נתונים ולא היה להם DBA, כך חיפשו פיתרון שיוכל לבצע Cashing, ולקבל פתרון לבעיית ביצועים בצורה קלה נוחה ופשוטה, ההטמעה הייתה קלה ופשוטה והביצועים היו מעולים.

 

אני רציתי לבצע השוואת ביצועים בין פיתרון מוצע ב - SQL Server.

לכן, השתמשתי עם הDemo של Microsoft, להדגמת שימוש והשוואת ביצועים בשרתי SQL Server 2014 ומעלה עם שימוש בIn – Memory.

In-Memory OLTP Performance Improvement Sample -

 

ניתן ללמוד יותר ב2 הדגמות שבוצעו עם הDEMO –

  1. In-Memory OLTP in SQL Server 2016

  2. Latency and Durability with SQL Server 2016

 

בהדגמה של הDemo, מבדילים בין מצב הבסיס-

  1. מצב בסיס – עבודה מול טבלה רגילה – aka Base Table.

  2. מצב ראשון – הפיכת הטבלה לטבלה בזכרון – DURABILITY = SCHEMA_AND_DATA

  3. מצב שני – שינו מצב הטבלה ל - DURABILITY = SCHEMA_ONLY

  4. מצב שלישי – שינוי הפרוצדורה ל NATIVE_COMPILATION –(DLL)

  5. מצב רביעי – שינוי DURABILITY(ACID) ברמת מסד הנתונים DELAYED_DURABILITY = FORCED

כעת נוסיף עוד 2 תהליכים כדי לחבר את Redis לDemo –

תהליך ראשון (מצב חמישי)-

פרויקט מקור - RediSQL

עבודה עם פרויקט קיים - RediSql–קליינט לעבודה מול Redis מ- SQL Server – מאמר בעברית

מה שהוספתי היו פרוצדורות שעטפו את הכלים של RediSQL ובצעם בלי שינוי באפליקציה היה אפשר לבדוק את העבודה עם Redis.

ניתן להוריד את הקוד -  כאן 

 

כמה בעיות בתהליך –

  1. הוספתי מעבר בSQL כדי להגיע לRedis למרות שלא היה צורך בכך.

  2. ניראה שSQL מנצח בענק – נוגד את מה שניסיתי להוכיח.

  3. האפליקציה של מיקרוסופט דוגמת DMV של נגיעה בטבלאות, אשר עברתי דרך Redis לא הייתה שום נגיעה בטבלאות SQL Server כך הנתונים לא הציגו את המספרים הרלוונטים.

 

תהליך שני (מצב שישי)-

התחלתי לעבוד על האפליקציה של Microsoft לטובת ההוכחה,

שיניתי את האפליקציה שתדה לעבוד ב2 פלטפורמות – Redis + SQL Server. בעצם, פתחתי Class נוסף של TicketReservationDetail אשר הכיל פרטים על הישות.

והוספתי קישור לעבודה על Redis דרך StackExchange.Redis

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

 

Single threaded nature of Redis

Redis uses a mostly single threaded design. This means that a single process serves all the client requests, using a technique called multiplexing. This means that Redis can serve a single request in every given moment, so all the requests are served sequentially. This is very similar to how Node.js works as well. However, both products are often not perceived as being slow. This is caused in part by the small amount of time to complete a single request, but primarily because these products are designed to not block on system calls, such as reading data from or writing data to a socket.

I said that Redis is mostly single threaded since actually from Redis 2.4 we use threads in Redis in order to perform some slow I/O operations in the background, mainly related to disk I/O, but this does not change the fact that Redis serves all the requests using a single thread.

מקור: https://redis.io/topics/latency

 

 

הפעולות התבססו על 2 אלמנטים פשוטים INSERT / SELECT – Set/Get

ניתן להוריד את האפליקציה + השינויים כאן.

 

מעבר לתצוגה בגרף שהראתה שינוי משמעותי בפעולות –

לבדיקת כמות הנתונים בSQL Server השתמשי בSSMS  המוכר. ובשביל לדגום את כמות הרשומות בRedis השתמשתי ב Redis Desktop Manager

בדקתי את כמות הרשומות שנכנסו לטבלה לאחר כל הפעלה, לטובת SQL Server הקצאתי כפול מהזמן של הRedis.

 SSMS- SQL Server - 8000 rows

 Redis - 32599 keys = rows.

 

 

32 אלף בRedis אל מול 8 אלף בשרת SQL Server.

 

 

Please reload

Featured Posts

I'm busy working on my blog posts. Watch this space!

Please reload

Recent Posts

October 31, 2017

October 29, 2017

Please reload

Archive
Please reload

Search By Tags