המצאת שפת שאילתות חדשה
-
@םןץףך
איזה אופרטורים תרצה להוסיף?
אז ככה, מדובר רק בשינוי פרדיגמה קטנצ'יק אבל משמעותי. העניין הוא יותר בפסוקית ה where בשאר הפסוקיות אין לי הרבה מה להוסיף.
למעשה ככה, אנחנו כותבים את כל ה where ונותנים לאופטימייזר לבחור תוכנית. הכל טוב ויפה, וזה יכול להמשיך לעבוד ככה מבחינתי.
הבעיה המרכזית היא הקריאות של משפטי where מורכבים, לפעמים עד היום מאוד קשה לי להבין משפטים מורכבים שאני בעצמי כתבתי, אולם בעצם אין לי ברירה, אני מחוייב לשפת SQL והרבה פעמים גם לאופטימיזציות שלו. כשאני באמת מוצא את עצמי במורכבות עצומה של משפטי where (וכשנכנסים join ו left join לתמונה, בכלל העסק מתחיל להתבחבש) אז מה אני עושה?? תנחשו... יוצר טבלה זמנית, עושה לה סידרת אינסרטים שונים, ואחר כך סידרת מחיקות, ואולי גם update לפעמים לפי הצורך. ואז כשאני חוזר לקוד אחרי חודש, הכל כל כך ברור, בהיר ונהיר לעין. גם שינוי קטן בנקודה מסויימת, הוא בטוח מבחינתי הרבה יותר, מאשר להתבלבל בסוגריים פותחות וסוגרות בתוך משפטי ה where המתוסבכים (אוי הסוגריים!!! כשזה מגיע ליותר משלוש קינונים תברחו מהם כמו מאש!!! פעם אחת גיליתי טעות בגלל סוגריים רק אחרי חצי שנה !!) בעצם הרעיון של כתיבת קוד בצעדים שכל צעד מטפל בנושא שלו, הוא הרבה יותר קריא מאשר דחיסת כל הלוגיקה בתוך משפט אחד.
אממה, אתה לא יכול להרשות לעצמך לעשות טבלה זמנית של חמישים מיליון רשומות, רק בשביל ה"קריאות". כי הלקוח יאכל אותך, זה יעבוד מאוד לאט. לכן מה שאני מצפה משפה כמו SQL לתמוך במשהו שמזכיר את הרעיון של IQueryable ב LINQ שימו לב לרעיון, הוא בעצם מאחסן בתוכו חבילת אקספרשנים, ומאפשר להשתמש בהם ברגע שתרצה. כמובן שגם הוא חוטא בחטא הקדמון של דחיסת כל האקספרשנים בתוך חבילה אחת, אבל עדיין בלינק זה הרבה יותר קריא כי אתה יכול לשרשר בכל שלב את מה שאתה צריך (כלומר where,take,find order by) בפקודות נפרדות וגם בלי להקפיד על הסדר שלהם.
אז נסכם, ואני מקווה שהייתי ברור ברעיון שלי, מה שהייתי רוצה שיהיה זה סוג של משהו שאתה כותב ב SQL כאילו זאת היתה טבלה זמנית, אולם ההוספות והמחיקות לא מתבצעות בפועל, עד לרגע הפקודה, ואז האופטימייזר נכנס לתמונה, ועושה הכל (מבחינתי שירכיב where מגעיל ביותר כמו שעושה מיסטר אנטיטי פריימוורק, זה לא ממש מעניין כל עוד זה מתבצע מאחורי הקלעים) לפי השיקולים של היעילות שלו.
בתוך מערכת הצעדים הזו, יש לי כמה וכמה אופרטורים מעניינים להוסיף (שהם באופן נורמלי לא זמינים ב SQL אולם הם אפשרים בהחלט למימוש לפי התוכנית שהצעתי), ואת זה אוכל לבצע אחרי שעצם הרעיון יוכל לצאת אל הפועל.
ל softs האם עדיין האלגברה הרלציונית רלוונטית אחרי הדרשה הזו? כי קראתי בזמנו את הערך בויקיפדיה, ואני יודע מהי אלגברה רלציונית. וגם ראיתי את החלקים באותו קורס הנוגעים לטרנזקציות. אני לא חושב שהרעיון שלי נוגע לנושא הזה.
תודה לכולם על התגובות.
פורסם במקור בפורום CODE613 ב15/06/2016 01:09 (+03:00)
-
ממממ מה עם dynamic linq?
http://weblogs.asp.net/scottgu/dynamic-linq-part-1-using-the-linq-dynamic-query-library
https://www.nuget.org/packages/System.Linq.Dynamic/
זה בעצם אומר או שתחזיק הכל בC# או שתהדר לSQL בגמר כתיבת הקוד כל פעם.פורסם במקור בפורום CODE613 ב15/06/2016 01:48 (+03:00)
-
@םןץףך
מה עם NoSql? פותר חלק מהבעיות. לא?
זה כמו אחד שלא אהב שמציצים לו בחור המנעול אז הוא עקר את הדלת
noSql זה בריחה מאחריות התשאול, כל המשימה עוברת לקוד הפרוצדורלי, שזה לא הכי נחמד (לולאת פור בשביל לסכם לפי קריטריון זה לא כ"כ אלגנטי).פורסם במקור בפורום CODE613 ב15/06/2016 10:18 (+03:00)
-
@דוד ל.ט.
@םןץףך
מה עם NoSql? פותר חלק מהבעיות. לא?זה כמו אחד שלא אהב שמציצים לו בחור המנעול אז הוא עקר את הדלת
noSql זה בריחה מאחריות התשאול, כל המשימה עוברת לקוד הפרוצדורלי, שזה לא הכי נחמד (לולאת פור בשביל לסכם לפי קריטריון זה לא כ"כ אלגנטי).לא אלגנטי? אז Where (במקרים המתוארים למעלה) זה יותר אלגנטי? הרי זה מה שמפריע לו!
השאלה אם יש הבדל מבחינת ביצועים. וכמדומני שה-NoSql לוקח במהירות.
אמנם יש מקרים שעדיף SQL. וכל מקרה לגופו. ויעשה שאלת רב.
לגבי סיכום- גם בNoSQL יש SUM. מה כוונתך?פורסם במקור בפורום CODE613 ב15/06/2016 13:17 (+03:00)
-
האם אתה בצעם אומר שבנית מטא - שפה בין יום?
זה הצהרה גרנדיוזית...זה לא בדיוק ככה, אתה יודע, זה כמו תינוק שיום אחד מתחיל ללכת על שתיים, זה לא אומר שלא היו חודשים ארוכים של עיבוד לפני כן. אז מבחינת תאריכים אני לא ממש יודע להגיד לך, כי זה כמעט כבר חמש שנים שאני מתקשקש עם זה בצורה כזאת או אחרת, אתמול נפל האסימון סופית, וריכזתי את כל הרעיונות ב 8 פקודות מאוד ברורות, שיכולות לעשות את הכל בצורה הרבה יותר טובה מהמקובל ב SQL (הרעיון של הפקודות הללו, שהן רקורסיביות, כלומר אתה יכול להכניס חבילת פקודות בתוך פקודה אחת ולבצע את הפקודה על התוצאה הסופית שלהן, כך שכל ערימת פקודות רצה בקונטקסט נפרד, ככה אפשר לעשות מניפולציות אדירות, ועם זאת הקוד נשאר מובן וברור מאוד!!!)
מה שכן עשיתי ביום או יומיים, זה תוכנה שמקמפלת את כל הפקודות הללו לסקריפט של SQL, וזה נראה שעובד נהדר, אם כי טעון הרבה שיפוץ.
אשלח לך בפרטי אני רוצה באמת לשבת איתך על זה אם יהיו לך כמה דקות.פורסם במקור בפורום CODE613 ב16/06/2016 14:22 (+03:00)
-
שכחתי לציין עוד משהו, בשיטה הזאת שאנחנו עובדים, זה מאוד קל להנגיש את זה גם לאינטרפייס וללמד את הציבור הרחב להשתמש בזה גם אם אינם מבינים בתיכנות. זאת תודות לשפה המאוד אנושית שאנחנו נצמדים אליה בפקודות. האם זה יהיה פרוייקט קוד פתוח?? ימים יגידו :lol: :lol: :lol:
פורסם במקור בפורום CODE613 ב16/06/2016 14:33 (+03:00)
-
יפה. אולי ביום מן הימים זה יהיה קוד פתוח וזה יקמפל לכל סוגי ה SQL. ואולי גם ל Mango וכאלה.
זה בהחלט יכול להתקמפל לכל סוגי ה SQL וגם ל mongo כבר היום, אלא שהפרוייקט סובל ממגבלות מסויימות לפי חוק ה 80.20 (כלומר בשביל עשרים אחוז מהבעיות צריך מתבזבז 80 אחוז מהזמן)
האתגר העיקרי הבא הוא לאפשר עבודה עם entityFramework כלומר לשלב את זה בתוך linq בצורה יעילה (כלומר ienumerable מופשט בלי צורך לעבוד עם רשומות פיזיות!! אחרת מה עשינו)פורסם במקור בפורום CODE613 ב16/06/2016 14:39 (+03:00)
-
עדכון:
כעת זה עובד מעולה עם IEnumerable, בלי להגזים זה אלגוריתם שמאתגר את LINQ, יש מסמך בן 3 עמודים מפורט שמסביר את הרעיון והחוקים של התוכנה. הרוצה יבקש בפרטי.מה שכן לגבי entityFramework זה מעט בעייתי מכיוון שאנו צריכים לעבוד עם Iqueriable ואני לא כל כך יודע אם אפשרי בתוכנית שלנו, בכ"א יש מחלקה נפרדת לקימפול ל SQL כפי שכבתנו למעלה.
פורסם במקור בפורום CODE613 ב19/06/2016 04:57 (+03:00)
-
מכוון גבוה?
http://code.613m.org/viewtopic.php?f=12&t=1745#p11631פורסם במקור בפורום CODE613 ב09/07/2016 23:52 (+03:00)