דילוג לתוכן

מודל נתונים

הקטלוג של bae הוא SQLite רגיל, מוצהר ל-coven טבלה אחר טבלה: טבלאות מסונכרנות נוסעות לכל מכשיר שיכול לקרוא אותן; טבלאות שלא הוצהרו לעולם לא עוזבות את המכשיר. החלוקה היא ההחלטה המרכזית במודל הנתונים, לכן הדף הזה מאורגן סביבה.

גרף הקטלוג

קישור למקטע הזה

הלב המסונכרן של הסכמה:

  • artists, albums, works: שכבת הקיבוץ. אלבום מאגד את ההוצאות שלו ומצביע על הוצאה ראשית; יצירות יוצרות גרף הורה/ילד למבנה קלאסי.
  • ** releases **: הישות המרכזית, שורה אחת לכל עותק שיובא. נושאת את עובדות הלחיצה (תגית, מספר קטלוג, קוד מסגרת, מדינה, פורמט, שנה), מקור נתוני מטא אפשריים, קוד תוכן של התיקיה המיובאת, ורמת הקול הנמדדת של האלבום. אין מקור פירושו שהנתוני מטא נכנסו ישירות; מקור חיצוני נותן את השם המדויק של הוצאת המקור, בעוד תגיות הקבצים רשומה במקור תמונה מקומית.
  • release_identities: זהויות חיצוניות מדויקות של מה ש* היא* השחרור. אין שורות פירושו אין זהות חיצונית. כל שורה מכנה את השחרור MusicBrainz או Discogs וקבוצת השחרורים, והשחרור יכול להכיל זהויות בשני המקורות בו זמנית. זה נפרד מהמקור: זהות יכולה להשתנות מבלי לטעון שהמידע הנוכחי הניתן לעריכה נקבע מחדש מהמקור הזה.
  • tracks עם track_artists, ועוד release_artist_roles ו-track_artist_roles: רשימות רצועות וקרדיטים, כל קרדיט מתויג במקור שלו.
  • track_works, work_parts, work_artists: הקלטות מחוברות ליצירות שהן מבצעות.
  • audio_formats ו-audio_format_segments: מפרטי הניגון. לכל רצועה: קודק, קצב דגימה, עומק סיביות, ערוצים, עוצמת שמע ושיא נמדדים, ואורכי pregap. מקטעים ממפים רצועה לחלונות בתים ודגימות מסודרים של קובצי המקור שלה, וכך רצועה מריפ CUE, כולל pregap, יכולה להשתרע על אזורים של קובץ גדול אחד, או כמה קבצים.
  • release_files, covers, artist_images: טבלאות שנושאות אובייקטים בינאריים. השורות הן רשומות קטלוג; הבתים חיים בשכבת האובייקטים הבינאריים של coven (ראה למטה).
  • people, ratings, history, playlists, playlist_entries: הפרופיל של כל אדם ומה שהוא רושם לעצמו. אלה טבלאות בעלים: רק המכשירים של מי שכתב אותן יכולים לשנות אותן. כל שורה של history ו-playlists חיה או במאגר המשותף של משק הבית או במעגל הפרטי של האדם.

מסונכרן ומקומי

קישור למקטע הזה

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

טבלאות מקומיות לגמרי, שלא מוצהרות ל-coven לעולם:

  • playback_state: רצועה נוכחית, מיקום, תור, עוצמה, ערבוב וחזרה. ניגון הוא עובדת מכשיר.
  • טבלאות הסריקה והייבוא: תיקיות במעקב, סריקות, מועמדים לייבוא והטיוטות שלהם.
  • source_release והטבלאות שתחתיה: מה ש-bae חילץ מכל שחרור של MusicBrainz ו-Discogs שהביא — פרטי האלבום וההדפסה, רשימת הרצועות המלאה עם הקרדיטים והיצירות, אפשרויות העטיפה והשם שקטלוגים אחרים נותנים לו — עם מפתח לפי שחרור הספק במקום לפי שחרור מקומי. ה-JSON הגולמי אינו נשמר; כל מכשיר יכול להביא שחרור שוב.
  • local_release_files: נתיבי הקבצים וזמני השינוי של הוצאה מקומית במכשיר הזה.
  • local_history: האזנות מלפני שלאדם של המכשיר הזה היה פרופיל, שעוברות למעגל הפרטי שלו כשהפרופיל נוצר.

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

אובייקטים בינאריים

קישור למקטע הזה

שמע ותמונות הם קובצי coven, וכל סוג הוא מרחב שמות עם תקציב מטמון מכשיר משלו: release_files (20 GiB), covers (512 MiB), artist_images (256 MiB) ו-avatars (64 MiB). שורה מפנה לקובץ שלה לפי המזהה של קובץ ה-coven: file ב-release_files, covers ו-artist_images, ו-avatar_id ב-people. הגודל, גיבוב התוכן והמיקום של הקובץ שייכים ל-coven, ונקראים בצירוף עם coven_files.

קובצי הוצאה שייכים למשתמש: הקבצים של הוצאה מקומית הם הקבצים של המשתמש בנתיבים המקוריים שלהם, שנרשמים ב-local_release_files, והשורות שלה לא מפנות לשום קובץ coven. העברת ההוצאה לענן מכינה כל קובץ ב-coven בכתיבה אחת ומפנה כל שורה לקובץ שלה; כשהאחרון נשמר, coven מעבירה את כולם לענן יחד, ומכשירים אחרים מושכים כל אחד מהם למטמון בקריאה הראשונה. עטיפות, תמונות אמנים ואווטארים שייכים ל-bae: bae מייצר את הבתים (עטיפות נוצרות מחדש כתמונות JPEG ממוזערות ברוחב עד 600px), ומכשיר מושך כל אחד מהם כשהוא מוצג לראשונה ושומר אותו עד שהתקציב של מרחב השמות שלו מפנה אותו.

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

זהות של ריפ

קישור למקטע הזה

כל ייבוא יוצר הוצאה עם מזהה אקראי חדש ושורות עצמאיות לרצועות ולקבצים. כל מכשיר רושם ב-local_release_origin ערך SHA-256 של הנתיבים היחסיים הממוינים, הגדלים וזמני השינוי של הקבצים שכל ייבוא שלו קרא; הרשומה הזו לעולם אינה מסונכרנת. תיקייה שהמכשיר הזה רשם את הגיבוב שלה נמצאת בלשונית הייבואים שהושלמו, לאן שלא הועברה, והשורה שלה מציינת את ההוצאה היחידה שיובאה ממנה. ייבוא חוזר של אותם קבצים במכשיר הזה נכשל, ולשונית הייבואים שהושלמו אינה מציעה ייבוא חוזר.