بعد از scrape، همان داده را می‌توانید CSV بدهید، JSON در object storage نگه دارید، یا مستقیم در PostgreSQL upsert کنید. انتخاب اشتباه بعداً migration گران می‌شود. این مقاله راهنمای تصمیم است — نه «همیشه DB». pillar: وب‌اسکرپینگ؛ کیفیت رکورد: نرمال‌سازی.

خلاصه
  • مصرف‌کننده بعدی (analyst، API محصول، warehouse) تعیین‌کننده است.
  • CSV برای تحویل یک‌باره؛ JSON/JSONL برای pipeline؛ DB برای به‌روزرسانی مداوم.
  • ۱M رکورد/روز در یک CSV واحد قرار ندهید.

CSV

مناسب: تحویل به مشتری، باز کردن در Excel، snapshot یک‌باره ۵٬۰۰۰ محصول، گزارش ad-hoc.
محدودیت: داده nested (مثلاً چند variant) سخت می‌شود؛ نوع ستون ضمنی است؛ ویرایش جزئی سخت؛ concurrency ضعیف. برای فارسی حتماً UTF-8 با BOM اگر مخاطب Excel ویندوز است.

JSON و JSONL

JSON فایل تکی برای export کوچک یا API response. JSONL (یک JSON per line) برای stream میلیونی: append آسان، partition روزانه روی S3/MinIO. برای developer workflow و nested field عالی است.

پایگاه داده (PostgreSQL و مشابه)

مناسب: محصول زنده، query فیلتر، relation (محصول–دسته)، upsert شبانه، dedupe با unique index. هزینه: backup، migration schema، connection pool برای API خواندن.

مقایسه بر اساس نیاز پروژه
معیارCSVJSON/JSONLDB
حجم یک‌بار ~۵kعالیخوبخوب
~۱M رکورد/روزنامناسبخوب با partitionقوی با index
ساختار nestedضعیفعالیJSONB یا جداول
به‌روزرسانی مداومبازنویسی فایلappend/partitionupsert
اشتراک با تیم تحلیلسادهمتوسطSQL/BI
پشت API محصولضعیفمتوسطعالی
مقیاس و queryپایینبا warehouseبالا

سناریو ۱: ۵٬۰۰۰ محصول یک‌بار

تحلیل داخلی یا تحویل به مشتری — CSV یا JSON روی object storage کافی است. نیازی به نگه‌داری DB دائمی نیست مگر بعداً محصول شود.

سناریو ۲: روزانه ۱M رکورد

JSONL partition شده (مثلاً year=2026/month=03/day=19/) + بارگذاری به warehouse (BigQuery، ClickHouse) یا DB با batch insert. CSV تک‌فایل غیرعملی است.

سناریو ۳: API integration

اپ شما باید «آخرین قیمت» را با latency کم بدهد → PostgreSQL (یا مشابه) single source of truth، scrape شبانه upsert، API read-only. فایل CSV وسط راه فقط برای backup.

نکته

حتی اگر امروز CSV می‌دهید، schema JSON (فیلدهای نهایی بعد از normalize) را مستند کنید تا فردا migration به DB سریع باشد.

زمان‌بندی نوشتن فایل یا upsert با job زمان‌بندی‌شده هماهنگ است. خطای ذخیره را جدا از خطای fetch مدیریت کنید — resilience.

در عمل چه انتخابی کنیم؟

فقط analyst یک‌بار → CSV UTF-8. pipeline تیم dev + nested → JSONL. داشبورد/محصول/API → DB. اگر مطمئن نیستید، با JSONL partition شروع کنید و DB را وقتی query زنده لازم شد اضافه کنید.