ארכיטקטורה של גירסאות נתונים
-
שלום לכולם
אתגר חדש שעומד בפני, (הפרוייקט עוד לא התחיל אבל הדרישות קצת מפחידות ולכן אני מנסה להקדים רפואה למכה) מסד נתונים מרכזי עם 250 משתמשים, לכל אחד יש מאסה גדולה של נתונים (נניח 20 אלף רשומות במצטבר) כל משתמש הוא "כביכול" חי בעולם נפרד (בעצם מבחינת המשתמש הדטה בייס שלו זה רק הנתונים שלו) ורק הסניף המרכזי חשוף לכל המידע של כולם. עד כאן הכל קלאסי.
איפה מתחילה הבעיה? צריך לאפשר Undo לכל פעולה שהמשתמש עשה (נניח מתחילת הסשן ועד סופו) ועוד דבר לא פחות מסובך, צריך לשמור גירסה של הנתונים של אותו יוזר, בכל פעם שהסשן מסתיים. כלומר שאם הוא עשה טעות, הוא "מקסימום" חוזר אחורה לסגירה האחרונה התקינה.
מאיפה מתחילים לתקוף אתגר כזה עם ארכיטקטורה טובה ויציבה, בלי ללכלך את הידיים בבוץ?
הדברים שכן ברורים לי הם:
כדי לשרת את הצרכים של הסניף המרכזי, אין ברירה אלא לעשות דטה בייס מרכזי.
כדי שכל משתמש באמת יוכל לחזור אחורה, צריך לתת לכל משתמש דטה בייס נפרד (לא משנה עכשיו איזה) ולשמור עותק שלו עם כל סגירה של הסשן.
על מנת לאפשר Undo לכאורה צריך לנהל את זה בקליינט בלבד, ולהעלות את החומר רק בסיום העבודה. אני זוכר שיש כאלו patterns באינטרנט, אבל אני לא יודע בדיוק איך עושים דבר כזה מול מסד נתונים (בלי להתלכלך כמובן)בקיצור נבוכים הם בארץ סגר עליהם המדבר. כל העוזרים והמסייעים יבורכו מפי עליון אמן.
פורסם במקור בפורום CODE613 ב10/11/2016 11:42 (+02:00)