Skip to content
  • דף הבית
  • קורס SQL
  • דוא"ל

חודש: אפריל 2019

נושאים בביזור – Distributed Transaction באמצעות 2PC ו- 3PC

2 במאי 2019 by שחר גבירץ

אחד ה- primitives העיקריים בעבודה עם DB-ים רלציוניים (ולא רק) זאת הטרנזקציה. טרנזקציה, היא אוסף של פעולות שמובטח לנו שכולן הצליחו להתבצע, או לחלופין שאף אחת מהן לא התבצעה. בואו נניח כעת שאנחנו רוצים לעשות טרנזקציה, שמערבת מס’ רכיבים, שכל אחד מהם בנפרד יודע לעשות טרנזקציה, ואנחנו רוצים לעשות טרנזקציה שכוללת פעולות מול כל אחד ואחד מהרכיבים הללו. למשל, נדמיין שרת Oracle ו- SQL Server (או שני שרתי SQL Server שונים), שאנחנו רוצים לעשות בכל אחד מהם בנפרד רצף פעולות כטרנזקציה.

איך לא עושים Distributed Transaction?

כדי להבין למה זה לא תרחיש טריוויאלי, נתבונן במימוש הנאיבי, ונראה כיצד הוא גורר תוצאה שגוייה במצבים מסוימים. נגדיר שיש לנו שרת A ושרת B. בואו נסתכל תחילה על המימוש הבא:

SERVER A: BEGIN TRANSACTION
  SERVER B: BEGIN TRANSACTION	
    SERVER A: UPDATE tblA SET Balance = 1 WHERE ID = 1
    SERVER B: UPDATE tblB SET Balance = 1 WHERE ID = 1
  SERVER B: COMMIT TRANSACTION
SERVER A: COMMIT TRANSACTION

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

… להמשך קריאה
Continue Reading

Entity Framework והטעויות שיגרמו לכם לבעיות ביצועים

19 באפריל 2019 by שחר גבירץ

בעשור האחרון, מרבית הפיתוח מול הדטאבייסים עושה שימוש ב- ORM-ים כאלה ואחרים. אחד ה- ORM-ים הפופולריים בעולם הדוטנט, הוא Entity Framework. בפוסט הזה, אסקור טעויות נפוצות שמשליכות על ביצועים של עבודה מול ה- DB בעבודה עם ORM-ים באופן כללי, ובפרט בעבודה עם Entity Framework.
כלל הדוגמאות בפוסט מבוססות על ה- DB של Stack Overflow, בגרסה שהתאמתי עבור הקורס SQL שהקלטתי בעבר. הדוגמאות מבוססות על Entity Framework 6.2, על אף שחלקן רלוונטיות לכל סוגי ה- ORM-ים.

טעות #1 : בעיית ה- N+1

בואו נניח שאנחנו רוצים להציג את כל השאלות ב- Stack Overflow, ולצד כל שאלה – מי המשתמש שכתב אותה. נסתכל בקוד הבא:

using (var data = new Entities())

{

    foreach (var question in data.Posts.Where(k=>k.Title != null))

    {

        Console.WriteLine($
… להמשך קריאה
Continue Reading

יצירת קשר

ליצירת קשר – מוזמנים לשלוח מייל ל- [email protected]

תגיות

DB DEV Elasticsearch ELK EntityFramework Kibana Logging Logstash RabbitMQ SQL SQL Server

פוסטים אחרונים

  • נושאים בביזור – Distributed Transaction באמצעות 2PC ו- 3PC
  • Entity Framework והטעויות שיגרמו לכם לבעיות ביצועים
  • מה הבעייה עם nvarchar(max) או varchar(max)
  • SQL Server: שימוש בפונקציות COMPRESS ו- DECOMPRESS לטובת דחיסת נתונים
  • DbFunctions.TruncateTime ובעיית הביצועים המוחבאת

תגובות אחרונות

  • ענת דרום על SQL Server למפתחים: Transaction Isolation Level
  • שחר גבירץ על SQL Server: שימוש בפונקציות COMPRESS ו- DECOMPRESS לטובת דחיסת נתונים
  • יעקב על SQL Server: שימוש בפונקציות COMPRESS ו- DECOMPRESS לטובת דחיסת נתונים
  • שחר גבירץ על SQL Server: שימוש בפונקציות COMPRESS ו- DECOMPRESS לטובת דחיסת נתונים
  • יעקב על SQL Server: שימוש בפונקציות COMPRESS ו- DECOMPRESS לטובת דחיסת נתונים

ארכיונים

  • אפריל 2019
  • מרץ 2019
  • מרץ 2018
  • דצמבר 2017
  • נובמבר 2017
  • יולי 2017
  • יוני 2017
  • מאי 2017
  • מרץ 2017
  • דצמבר 2016
  • נובמבר 2016
  • אוקטובר 2016
  • נובמבר 2015
© 2023 שחר.נט | WordPress Theme by Superbthemes