ڈیٹا نمونہ
bae کا فہرست نامہ سادہ SQLite ہے، coven کو جدول بہ جدول بتایا گیا: ہم آہنگ جدولیں ہر اس آلے تک جاتی ہیں جو انہیں پڑھ سکے؛ نہ بتائی گئی جدولیں آلہ نہیں چھوڑتیں۔ یہ تقسیم ڈیٹا ماڈل کا سب سے اہم فیصلہ ہے، اس لیے یہ صفحہ اسی کے گرد ترتیب دیا گیا ہے۔
فہرست نامے کا نقشہ
اس حصے کا ربطخاکہ کا ہم آہنگ مرکز:
artists,albums,works: گروہ بندی کی پرت۔ البم اپنے اجرا اکٹھا کرتا ہے اور بنیادی اجرا کی طرف اشارہ کرتا ہے؛ کام کلاسیکی ساخت کے لیے والد/بچہ نقشہ بناتے ہیں۔releases: مرکزی ادارہ، ہر درآمد شدہ نقل کے لیے ایک قطار۔ دبانے کے حقیقتوں کو اٹھاتا ہے (لیبل، کتلا گ نمبر، بارکوڈ، ملک، فارمیٹ، سال)، اختیاری میٹا ڈیٹا کی اصل، وارد شدہ فولڈر کے مواد کی ہش، اور پیمائش شدہ البم کی بلندی۔ کوئی اصل کا مطلب ہے کہ میٹا ڈیٹا براہ راست داخل کیا گیا تھا۔ باہری اصل کا مطلب ہے کہ صحیح ذریعہ کے نام، جبکہ فائل ٹیگز ایک مقامی سناپ شاٹ ذریعہ ریکارڈ کرتا ہے۔release_identities: ایک ریلیز کے لئے صحیح بیرونی شناخت ہے. کوئی قطار نہیں اس کا مطلب ہے کوئی بیرونی شناخت نہیں. ہر قطار کا نام ایک MusicBrainz یا Discogs ریلیز اور ریلیز گروپ ہے، اور ایک ریلیز دونوں ذرائع میں ایک وقت میں شناخت رکھ سکتا ہے. یہ اصل سے الگ ہے: شناخت بدل سکتی ہے بغیر اس کے کہ اس ذریعے سے حال میں تحریر شدہ میٹا ڈیٹا ری سیٹ کیا گیا تھا.tracks،track_artists،release_artist_roles، اورtrack_artist_roles: ٹریک فہرستیں اور credits، ہر credit اپنے ماخذ کے ساتھ نشان زد۔track_works,work_parts,work_artists: recordings ان کاموں سے جڑی ہیں جنہیں وہ ادا کرتی ہیں۔audio_formatsاورaudio_format_segments: پلے بیک اوصاف۔ ہر ٹریک کے لیے: codec، نمونہ شرح، bit depth، channels، ناپی گئی آواز کی بلندی اور چوٹی، اور pregap لمبائیاں۔ Segments ٹریک کو اس کی ماخذ فائلوں کے مرتب بائٹ اور نمونہ کھڑکیوں پر نقش کرتے ہیں، اسی سے CUE نقل کا ٹریک، pregap سمیت، ایک بڑی فائل یا کئی فائلوں کے حصوں پر پھیل سکتا ہے۔release_files,covers,artist_images: blob رکھنے والی جدولیں۔ قطاریں فہرست نامے کے اندراج ہیں؛ بائٹس coven کی blob layer میں رہتے ہیں (نیچے دیکھیں)۔people،ratings،history،playlists،playlist_entries: ہر شخص کی profile اور جو وہ اپنے لیے درج کرتا ہے۔ یہ owner جدولیں ہیں: صرف ان کے لکھنے والے کے آلات انہیں بدل سکتے ہیں۔historyاورplaylistsکی ہر قطار یا تو گھر کے مشترکہ store میں یا شخص کے نجی circle میں رہتی ہے۔
ہم آہنگ اور مقامی
اس حصے کا ربطاوپر کی ہر جدول بلا شرط ہم آہنگ ہوتی ہے: مقامی اجرا کی قطاریں کسی بھی دوسرے اجرا کی طرح ہر آلے تک پہنچتی ہیں، اس لیے ہر آلہ جانتا ہے کہ گھر کے پاس کیا ہے، اور مقامی اجرا کے ٹریک کی طرف اشارہ کرنے والی rating یا playlist entry ایسی قطار کی طرف اشارہ کرتی ہے جو ہر آلہ پڑھ سکتا ہے۔ صرف اجرا کی آواز، اور وہ راستے جہاں وہ ہے، درآمد کرنے والے آلے پر رہتے ہیں۔ ہر جدول اپنی قطار کی شناخت، قارئین، owner جدول ہے یا نہیں، اور اپنی رکھی فائلوں کے ساتھ بتائی جاتی ہے؛ ایک test اعلانات کو بالکل اسی فہرست پر رکھتا ہے۔
مکمل مقامی جدولیں، جو coven کو کبھی نہیں بتائی جاتیں:
playback_state: موجودہ ٹریک، مقام، قطار، volume، shuffle اور repeat۔ پلے بیک آلے کی حقیقت ہے۔- اسکین اور درآمد کی جدولیں: زیر نگرانی پوشے، اسکین، درآمد کے امیدوار اور ان کے مسودے۔
source_releaseاور اس کے نیچے کی ٹیبلز: bae نے لائی گئی ہر MusicBrainz اور Discogs ریلیز سے جو نکالا — البم اور پریسنگ کی معلومات، کریڈٹس اور تخلیقات سمیت پوری ٹریک لسٹ، کور کے اختیارات، اور دوسرے کیٹلاگ اسے کیا کہتے ہیں — ایک مقامی ریلیز کی بجائے فراہم کنندہ کی ریلیز سے کلید شدہ۔ خام JSON نہیں رکھا جاتا؛ کوئی بھی آلہ ریلیز دوبارہ لا سکتا ہے۔local_release_files: اس آلے پر مقامی اجرا کے فائل راستے اور تبدیلی کے اوقات۔local_history: اس آلے کے شخص کی profile بننے سے پہلے کی سماعتیں، جو profile بننے پر اس کے نجی circle میں منتقل ہوتی ہیں۔
دو آلات کی ترمیمات خانہ بہ خانہ ملتی ہیں، دونوں کے بدلے خانے میں بعد والی ترمیم جیتتی ہے۔ coven ملانے کا حساب اپنی جدولوں میں رکھتا ہے، اس لیے bae کی جدولوں میں clock ستون نہیں ہیں۔
Blobs
اس حصے کا ربطآواز اور تصاویر coven فائلیں ہیں، ہر قسم ایک namespace ہے جس کی اپنی آلہ کیش حد ہے: release_files (20 GiB)، covers (512 MiB)، artist_images (256 MiB)، اور avatars (64 MiB)۔ قطار اپنی فائل کا حوالہ coven فائل کی id سے دیتی ہے: release_files، covers اور artist_images پر file، اور people پر avatar_id۔ فائل کا سائز، مواد کا hash اور مقام coven کے ہیں، جو coven_files کے ساتھ join کر کے پڑھے جاتے ہیں۔
اجرا کی فائلیں صارف کی ہیں: مقامی اجرا کی فائلیں صارف کی اپنی فائلیں ہیں اپنے اصل راستوں پر، local_release_files میں درج، اور اس کی قطاریں کسی coven فائل کا حوالہ نہیں دیتیں۔ اجرا کو کلاؤڈ میں منتقل کرنا ایک ہی تحریر میں ہر فائل کو coven میں تیار کرتا ہے اور ہر قطار کو اس کی فائل کی طرف موڑتا ہے؛ آخری فائل محفوظ ہوتے ہی coven سب کو ایک ساتھ کلاؤڈ پر منتقل کر دیتا ہے، اور دوسرے آلات پہلی پڑھائی پر ہر ایک کو کیش میں لاتے ہیں۔ غلاف، فنکار کی تصاویر اور avatars bae کے ہیں: bae bytes بناتا ہے (غلاف زیادہ سے زیادہ 600px چوڑے JPEG thumbnails کے طور پر دوبارہ بنتے ہیں)، اور آلہ ہر ایک کو پہلی بار دکھائے جانے پر لاتا ہے اور تب تک رکھتا ہے جب تک اس کے namespace کی حد اسے نکال نہ دے۔
ہر فائل بے ترتیب نام کے تحت رمز بند ہو کر اپ لوڈ ہوتی ہے، اس راستے پر جو اس کے تیار ہوتے وقت طے ہوتا ہے، اس لیے بعد میں نام بدلنے سے شے نہیں ہلتی۔ فائل کے bytes کبھی نہیں بدلتے: نئی تصویر نئی فائل ہے۔
Rip کی شناخت
اس حصے کا ربطہر درآمد ایک نئی بے ترتیب شناخت اور اپنے ٹریک اور فائل کی قطاروں والا اجرا بناتی ہے۔ ہر آلہ local_release_origin میں اپنی ہر درآمد کی پڑھی ہوئی فائلوں کے ترتیب شدہ نسبتی راستوں، سائز اور ترمیم کے اوقات کا SHA-256 درج کرتا ہے؛ یہ اندراج کبھی ہم آہنگ نہیں ہوتا۔ جس فولڈر کا ہیش اس آلے نے درج کیا ہو وہ جہاں بھی منتقل ہو، مکمل درآمدات والے ٹیب میں رہتا ہے، اور اس کی قطار اس سے درآمد کیے گئے واحد اجرا کا نام بتاتی ہے۔ اسی آلے پر انہی فائلوں کو دوبارہ درآمد کرنا ناکام ہوتا ہے، اور مکمل درآمدات والے ٹیب میں دوبارہ درآمد کی کارروائی موجود نہیں ہوتی۔