Data Lake
تخزن بحيرة البيانات بيانات خامًا بأي تنسيق في مخازن كائنات منخفضة التكلفة، وتطبق مخططًا عند قراءتها. تعرّف على اختلافها عن مستودعات البيانات ومستودعات البحيرات.
بحيرة البيانات مستودع مركزي يخزّن البيانات بتنسيقها الأصلي الخام، بدءًا من صادرات قواعد البيانات وسجلات JSON وصولًا إلى الصور والفيديو والصوت والمستندات، عادةً في تخزين كائنات سحابي منخفض التكلفة، ولا يطبّق البنية إلا عند قراءة البيانات. صاغ جيمس ديكسون، الذي كان حينها كبير مسؤولي التكنولوجيا في Pentaho، المصطلح عام 2010 للمقارنة بين مستودع البيانات الجزئي، الذي شبّهه بمياه معبأة ومنقّاة، وبين كتلة كبيرة من البيانات في حالتها الطبيعية يمكن لكثير من المستخدمين الاستفادة منها. ولأن النمذجة المسبقة ليست ضرورية، يمكن للبحيرة الاحتفاظ بكل ما تجمعه المؤسسة، وهو ما يلائم التعلم الآلي: فغالبًا ما تكون بيانات التدريب لنموذج الغد بيانات خامًا لم يكن أحد يعرف كيف سيستخدمها عند تخزينها.
آلية عمل بحيرة البيانات#
تفصل البحيرة بين التخزين والحوسبة. تُحفظ الملفات في تخزين الكائنات، مثل Amazon S3 أو Google Cloud Storage أو Azure Data Lake Storage، وتقرأها المحركات مثل Spark أو Trino أو عملية Python مباشرةً، وبذلك يوسّع كل فريق موارده الحاسوبية دون نسخ البيانات. تُحفظ البيانات الجدولية عادةً بتنسيقات عمودية مفتوحة مثل Apache Parquet، بينما تبقى الصور والفيديو ملفات عادية، وغالبًا ما تكون بجوار ملفات بيان JSON أو Parquet التي تتضمن البيانات الوصفية والتسميات.
تُنظّم معظم البحيرات في مناطق وفقًا لمستوى التنقيح، وهو ما تسميه Databricks بنية الميدالية: تحتفظ المنطقة الخام (البرونزية) بالبيانات كما وردت تمامًا، وتضم المنطقة المنقّحة (الفضية) بيانات خضعت للتحقق وإزالة التكرار، وتحتوي المنطقة المنسّقة (الذهبية) على جداول ومجموعات بيانات جاهزة لإعداد التقارير أو التدريب. ويسجّل كتالوج البيانات الوصفية، مثل AWS Glue Data Catalog أو Hive Metastore أو Unity Catalog، محتويات كل مجموعة بيانات والجهة المالكة لها ومن يحق له قراءتها. ومن دون هذا الكتالوج وتنظيف البيانات، تتحول البحيرة إلى «مستنقع بيانات»: ملفات لا يستطيع أحد العثور عليها أو الوثوق بها أو حذفها بأمان.
المخطط عند القراءة#
تطبّق البحيرة مخططًا عند قراءة البيانات، ويُسمى ذلك «المخطط عند القراءة». يستطيع الكتّاب إدخال البيانات فور توافرها، حتى عندما يختلف مصدران حول الحقول، ويحدد كل قارئ الأعمدة والأنواع التي يحتاج إليها. يكتب هذا المثال ملفي JSON خامين بحقول مختلفة، ثم يقرأهما باستخدام مخطط واحد عبر Polars:
import json
from pathlib import Path
import polars as pl
# المنطقة الخام: تكتب كاميرتان أحداث الكشف بصيغة أسطر JSON، ولكل منهما حقولها الخاصة
Path("lake/raw").mkdir(parents=True, exist_ok=True)
Path("lake/raw/dock-1.jsonl").write_text(json.dumps({"label": "forklift", "conf": 0.91}))
Path("lake/raw/dock-2.jsonl").write_text(json.dumps({"label": "person", "conf": 0.62, "lux": 120}))
# المخطط عند القراءة: يختار هذا القارئ الأعمدة والأنواع عند الاستعلام عن الملفات
schema = {"label": pl.String, "conf": pl.Float32, "lux": pl.Int32}
events = pl.scan_ndjson("lake/raw/*.jsonl", schema=schema, include_file_paths="source")
print(events.collect())تتضمن النتيجة صفين بأعمدة label وconf وlux وsource. لم تسجّل الكاميرا الأولى مطلقًا lux، لذا تظهر قيمته على هيئة null، ويسجل source الملف الخام الذي أتى منه كل صف. ويمكن لمهمة ثانية قراءة الملفات نفسها بمخطط مختلف دون إعادة كتابتها.
بحيرة البيانات مقابل مستودع البيانات مقابل مستودع البحيرة#
- مستودع البيانات: يخزّن جداول منظّمة ومنقّحة وفق مخطط ثابت يجب أن تطابقه البيانات عند تحميلها (المخطط عند الكتابة)، وعادةً ما يأتي ذلك بعد خطوة الاستخراج والتحويل والتحميل (ETL). تجيب مستودعات مثل Snowflake وBigQuery وRedshift بسرعة عن استعلامات SQL وذكاء الأعمال، لكنها أقل مرونة مع الصور والنصوص وغيرها من البيانات غير المهيكلة.
- بحيرة البيانات: تخزّن أي تنسيق بتكلفة منخفضة، وتحول البيانات بعد تحميلها (ELT)، مما يلائم الاستكشاف وتنقيب البيانات والتعلم الآلي. تفتقر ملفات البحيرة العادية إلى المعاملات، لذا قد يترك الكتّاب المتزامنون القراء أمام نتائج لم تكتمل كتابتها.
- مستودع البحيرة: يضيف ميزات المستودعات إلى تخزين البحيرة باستخدام تنسيقات الجداول المفتوحة، مثل Apache Iceberg وDelta Lake وApache Hudi، التي توفر معاملات ACID وفرض المخطط والعودة عبر الزمن إلى إصدارات سابقة من الجدول. وصف باحثو Databricks هذه البنية في ورقة بحثية عام 2021.
بحيرات البيانات في التعلم الآلي#
بالنسبة إلى فرق الرؤية الحاسوبية، تضمّ بحيرة البيانات كل إطار تلتقطه الكاميرا، وبياناته الوصفية الخاصة بالالتقاط، والتعليقات التوضيحية، والتنبؤات التي تصدرها النماذج المنشورة عليه. ترفع برامج المركبات ذاتية القيادة سجلات القيادة من أساطيلها، ثم تنقّب في هذه السجلات بحثًا عن مشاهد نادرة، مثل ظهور أحد المشاة ليلًا تحت المطر، بهدف وسم تلك المشاهد وإضافتها إلى مجموعات التدريب. وفي الرعاية الصحية، توفّر صور الفحوصات الطبية والتقارير، بعد نزع الهوية عنها وجمعها في بحيرة بيانات واحدة، البيانات اللازمة لنماذج تحليل الصور الطبية. وتُكمل تنبؤات بيئة الإنتاج التي تعود إلى بحيرة البيانات للمراجعة وإعادة الوسم حلقة التغذية الراجعة للبيانات، كما تثبّت لقطات الجداول أو أدوات مثل DVC إصدار البيانات الدقيق الذي دُرّب عليه كل نموذج. وغالبًا ما تُبنى مخازن الميزات وقواعد البيانات المتجهية فوق بحيرة البيانات، لتقديم الميزات أو التضمينات المستمدة من ملفاتها الخام.
يمكن لـمنصة Ultralytics تحويل مجلد في Amazon S3 أو Google Cloud Storage أو Azure Blob Storage إلى مجموعة بيانات تدريب دون رفع نسخة منها: فهي تفهرس في مكانها ما يصل إلى 500,000 كائن في كل عملية استيراد باستخدام بيانات اعتماد للقراءة فقط، وتحلّل ملفات تسميات YOLO .txt الموجودة بجوار الصور، وتعيّن مجموعات التدريب والتحقق والاختبار استنادًا إلى أسماء المجلدات. ويُثبّت كل ملف صورة مفهرس على إصدار الكائن الخاص به، لذا ترفض المنصة معالجة أي صورة يُستبدل ملفها في البحيرة.










