نموذج البيانات
فهرس bae هو SQLite عادي، يعلنه إلى coven جدولًا بجدول: تنتقل الجداول المتزامنة إلى كل جهاز يستطيع قراءتها؛ والجداول غير المعلنة لا تغادر الجهاز أبدًا. هذا الفصل هو القرار الأثقل في نموذج البيانات، لذلك تُنظم هذه الصفحة حوله.
رسم الفهرس
رابط إلى هذا القسمقلب المخطط المتزامن:
artists،albums،works: طبقة التجميع. يجمع الألبوم إصداراته ويشير إلى إصدار primary؛ وتشكل الأعمال رسمًا أبويًا/فرعيًا للبنية الكلاسيكية.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**: مواصفات التشغيل. لكل مسار: codec، ومعدل العينة، وعمق البت، والقنوات، والجهارة والذروة المقاسان، وأطوال pregap. تربط المقاطع المسار بنوافذ بايت وعينات مرتبة من ملفاته المصدرية، وهذا ما يسمح لمسار نسخة CUE، بما في ذلك pregap، أن يمتد عبر مناطق من ملف كبير واحد أو عدة ملفات.release_files،covers،artist_images: جداول تحمل blobs. الصفوف مدخلات فهرس؛ والبايتات تعيش في طبقة blob الخاصة بـ 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 أعمدة ساعة.
Blobs
رابط إلى هذا القسمالصوت والصور ملفات 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 للمسارات النسبية المرتبة والأحجام وأوقات التعديل للملفات التي قرأها كل استيراد عليه؛ ولا يُزامَن هذا السجل أبدًا. يظهر المجلد الذي سجّل هذا الجهاز قيمته في علامة التبويب المكتملة أينما نُقل، ويسمّي صفه الإصدار الوحيد المستورد منه. يفشل استيراد الملفات نفسها مرة أخرى على ذلك الجهاز، ولا توفر علامة التبويب المكتملة إجراء لإعادة الاستيراد.