עבור לתוכן
Magic DevHub
amirbaroz

עזרה בנוגע לטבלת MEMORY

Recommended Posts

אודה להסבר קצר לגבי טבלת MEMORY.

הגדרתי 3 שדות בטבלת MEMORY + מפתח למיון.

לפי התיעוד שמצאתי הדרך לעדכן את הטבלה היא בעזרת פקודת MTblSet ושליפה בעזרת MTblGet

מה שלא כל כך ברור לי הם אילו הפרמטרים שאני מעביר לפונקציות.

MTblSet(<I>BLOB, table entry, DB table name, mode)

הפרמטר שאני אמור להעביר הוא משתנה BLOB.

איך אני יוצר משתנה BLOB שיש בתוכו מבנה רשומה (3 שדות) ?

שאלה נוספת - האם כשהתוכנית מסתיימת הטבלה הנ"ל נמחקת מהזיכרון ?

תודה מראש על העזרה,

עמיר

שתף אשכול


קישור ישיר להודעה
שתף באתרים אחרים

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

הטבלאה לא נמחקת מהזכרון בעת סיום התוכנית, אלא בעת סגירת היישום כולו (אתה יכול למחוק את זה אחרי תוכנית ע"י הוספה במשימה אחרי פקודת DB למחיקה (DBDEL) ).

שתף אשכול


קישור ישיר להודעה
שתף באתרים אחרים

עידו,

תודה על התגובה.

ברשותך שאלת המשך. אם אני מתייחס לטבלה כטבלה רגילה, אז מה ההבדל בהגדרה של MEMORY ל BETRIEV ?

מתי להשתמש ב MEMORY ומתי בטבלה רגילה (DB כלשהו) ?

עמיר

שתף אשכול


קישור ישיר להודעה
שתף באתרים אחרים

ההבדל בשימוש הוא מאוד פשוט:

ביטריב, MS-SQL, אורקל וכדו' הם מחסני נתונים רציונליים (עובדים על תשתית של קבצים) - ניתן לשמור בהם מידע לאורך זמן, ואין תלות באפלקציה (אני יכול למשוך את הנתונים דרך כל חיבור לDB ולאו דווקא זה של מג'יק).

הMEMORY הוא מחסן נתונים וירטואלי - הוא מיועד לדמות את הטבלאה הרציונלית, אך מקנה מספר יתרונות (כמו מהירות כתיבה/קריאה) בצד החסרונות (המחסן נמחק כשיוצאים מהאפלקציה).

כמו כן, בשיטת הMEMORY לא ניתן לגשת אל הנתונים ממערכת חיצונית, רק מהמג'יק.

בד"כ נעבוד בMEMORY אם נרצה לבצע חישובים מהירים לדוחות (נטען את המידע ממסד הנתונים הרציונאלי אל הוירטואלי ואח"כ נבצע על הבסיס הוירטולי חיתוכים וחישובים)

סיבה נוספת - משתנים ומידע גלובאלי

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

זה בגדול ההבדל - וירטואלי מול רציונלי (וכמו שהסברתי, לכל אחד יתרונות אל מול חסרונות)

שתף אשכול


קישור ישיר להודעה
שתף באתרים אחרים

עידו,

תודה רבה !!! עזרת לי מאוד.

(אני מתחזק מערכת מג'יק מדי פעם  ולכן לא הכי בקי בכל האפשרויות)

בברכה,

עמיר

שתף אשכול


קישור ישיר להודעה
שתף באתרים אחרים

בבקשה, רק שתדע שזה תקף עבור כל פלטפורמטת פיתוח, לאו דווקא מג'יק.

שתף אשכול


קישור ישיר להודעה
שתף באתרים אחרים

עידו,

איך אתה טוען 100 רשומות ממסד הנתונים הרציונאלי אל הוירטואלי ?

תוכנית BATCH רגילה שמבצעת הוספת רשומה ?

בברכה,

עמיר

שתף אשכול


קישור ישיר להודעה
שתף באתרים אחרים

קודם תיקון, שקיבלתי בהודעה פרטית מאריק:

הטרמינולוגיה הנכונה היא בסיס נתונים ראלציוני ולא רציונלי

התנצלותי על המינוח השגוי :)

לשאלתך, בדיוק.

התוכנית קוראת רשומה מהמסד הראלציוני ומיד אח"כ כותבת את המידע לטבלה הוירטואלית.

שתף אשכול


קישור ישיר להודעה
שתף באתרים אחרים

שלום רב,

אם כבר בטבלאות MEMORY אנו עסקים רציתי לשאול שאלה שדי מטרידה אותי מזה תקופה :

יש לי שאילתה מול SQL שמחזירה 100 רשומות, אותן אני מכניס ע"י קישור הוספה לטבלת MEMORY ועובד משם.

אבל בעצם המג'יק מכניס אותן רשומה אחרי רשומה... האם יש דרך שהוא יכניס אותן כ"באלק" (מה שכמובן הרבה יותר מהיר) ?

שאלה שניה,

באתר האינטרנט שלי אני לא מרוקן טבלאות MEMORY, ובפועל בין שאילתה לשאילתה הן מתרוקנות (לשמחתי), אבל בעצם הוא לא סוגר לחלוטין יישום (למיטב הבנתי), אז מדוע הן מתרוקנות ?

בברכת יום נפלא

יפתח

שתף אשכול


קישור ישיר להודעה
שתף באתרים אחרים

יפתח -

לגביי הזנה מהירה אני לא הצלחתי להכניס אותם במכה אחת (נסיתי לבצע שאילתה ואז להכניס, אבל לצערי זה לא צלח. יכול להיות שזה משהו שעשיתי/לא עשיתי וזה כן יכול לעבוד).

יש אבל פתרון יותר אלגנטי של עבודה מול מערך (בסוף זה כמעט כמו טבלאת הMEMORY, רק נותן לי יותר גמישות).

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

אמיר-

לא הבנתי את שאלתך, מז"א עדכון? שוב זה תלוי אם אני מעוניין לשמר את הנתונים לזמן ארוך או לא.

כי אם כן, אתה חייב לעבוד מול מסד נתונים ראלציוני.

שתף אשכול


קישור ישיר להודעה
שתף באתרים אחרים

אל תשכחו שטבלאות MEMORY הם טבלאות PER ONE THREAD כלומר טבלת MEMORY עם נתונים לא תראה ב THREAD אחר. חשוב מאוד במיוחד אם אתם עובדים ב - WEB.

כמו כן אתם יכולים לרשום אינפרומציה לטבלת RESIDENT MEMORY , טבלה שכל ה THREADS חוכלו להשתמש בה אבל היא לצרכי קריאה בלבד

לגבי MTBKSET+GET (העתקת טבלאות) מסכים עם עידו , היעילות שם לא בשמיים ואם מדובר בהרבה אינפורמציה יש סכנה להתנפחות רצינית של הזיכרון אבל אם מדובר במעט יחסית של DATA אין שום סיבה לא להשתמש בה (חוסר היעילות בא לידי ביטוי גם במהירות לא גבוהה, כלומר רשומה אחר רשומה)

שתף אשכול


קישור ישיר להודעה
שתף באתרים אחרים

התחבר או הרשם על מנת להגיב.

עליך להיות משתמש רשום על מנת להגיב

צור חשבון

צור חשבון חדש בקהילה בקלי קלות.

רישום חשבון חדש

התחבר

משתמש קיים? התחבר.

התחבר עכשיו

×