Spaces:
Running
Running
| # 🗄️ Альтернативи для зберігання векторної бази даних та індексів | |
| ## 📊 Поточна ситуація | |
| - **Розмір індексів:** ~530 MB | |
| - **Склад:** BM25 індекси, docstore, векторні представлення | |
| - **Поточне рішення:** AWS S3 | |
| --- | |
| ## 🔄 Альтернативні варіанти зберігання | |
| ### 1. 🤗 Hugging Face Datasets Hub | |
| **Переваги:** | |
| - ✅ Безкоштовно для публічних датасетів | |
| - ✅ Нативна інтеграція з HF Spaces | |
| - ✅ Git LFS для великих файлів | |
| - ✅ Версіонування | |
| - ✅ Швидке завантаження через CDN | |
| - ✅ API для програмного доступу | |
| **Недоліки:** | |
| - ❌ Публічний доступ (якщо не приватний репозиторій) | |
| - ❌ Обмеження на розмір файлів (5GB для LFS) | |
| **Як використати:** | |
| ```python | |
| from huggingface_hub import hf_hub_download, snapshot_download | |
| # Завантажити всю папку індексів | |
| snapshot_download( | |
| repo_id="DocSA/legal-position-indexes", | |
| repo_type="dataset", | |
| local_dir="Save_Index_Ivan" | |
| ) | |
| ``` | |
| **Налаштування:** | |
| 1. Створіть датасет: https://huggingface.co/new-dataset | |
| 2. Завантажте індекси: | |
| ```bash | |
| git lfs install | |
| git clone https://huggingface.co/datasets/DocSA/legal-position-indexes | |
| cd legal-position-indexes | |
| cp -r ../Save_Index_Ivan/* ./ | |
| git add . | |
| git commit -m "Add indexes" | |
| git push | |
| ``` | |
| --- | |
| ### 2. ☁️ Google Cloud Storage (GCS) | |
| **Переваги:** | |
| - ✅ $0.02 за GB/місяць (дешевше за S3) | |
| - ✅ Безкоштовні 5 GB (Always Free tier) | |
| - ✅ Швидкий доступ з будь-якої точки світу | |
| - ✅ Python SDK (google-cloud-storage) | |
| **Недоліки:** | |
| - ❌ Потрібна реєстрація GCP | |
| - ❌ Додаткові credentials | |
| **Як використати:** | |
| ```python | |
| from google.cloud import storage | |
| def download_from_gcs(bucket_name, prefix, local_dir): | |
| client = storage.Client() | |
| bucket = client.bucket(bucket_name) | |
| blobs = bucket.list_blobs(prefix=prefix) | |
| for blob in blobs: | |
| local_path = f"{local_dir}/{blob.name}" | |
| blob.download_to_filename(local_path) | |
| ``` | |
| **Вартість:** ~$0.01/місяць для 530MB | |
| --- | |
| ### 3. 📦 GitHub Releases | |
| **Переваги:** | |
| - ✅ Безкоштовно | |
| - ✅ Простий доступ через URL | |
| - ✅ Підтримка великих файлів (до 2GB) | |
| - ✅ Не потрібні credentials | |
| **Недоліки:** | |
| - ❌ Обмеження: 2GB на файл | |
| - ❌ Треба розбивати на частини | |
| - ❌ Ручне оновлення | |
| **Як використати:** | |
| ```python | |
| import requests | |
| import tarfile | |
| def download_from_github_release(): | |
| url = "https://github.com/DocSA/legal-position/releases/download/v1.0/save_index.tar.gz" | |
| response = requests.get(url, stream=True) | |
| with open("save_index.tar.gz", "wb") as f: | |
| for chunk in response.iter_content(chunk_size=8192): | |
| f.write(chunk) | |
| # Розпакувати | |
| with tarfile.open("save_index.tar.gz") as tar: | |
| tar.extractall(".") | |
| ``` | |
| --- | |
| ### 4. 🌐 Azure Blob Storage | |
| **Переваги:** | |
| - ✅ Дешевий ($0.018 за GB/місяць) | |
| - ✅ Безкоштовні 5 GB перших 12 місяців | |
| - ✅ Python SDK (azure-storage-blob) | |
| - ✅ Гарна інтеграція з Microsoft екосистемою | |
| **Недоліки:** | |
| - ❌ Потрібна реєстрація Azure | |
| - ❌ Додаткові credentials | |
| **Вартість:** ~$0.01/місяць для 530MB | |
| --- | |
| ### 5. 🗂️ Dropbox / Google Drive (через публічні посилання) | |
| **Переваги:** | |
| - ✅ Безкоштовно для невеликих обсягів | |
| - ✅ Просто налаштувати | |
| - ✅ Публічні посилання для завантаження | |
| **Недоліки:** | |
| - ❌ Не призначені для production | |
| - ❌ Rate limits | |
| - ❌ Можуть заблокувати посилання | |
| - ❌ Повільне завантаження | |
| **Не рекомендується для production!** | |
| --- | |
| ### 6. 📡 Cloudflare R2 | |
| **Переваги:** | |
| - ✅ Безкоштовний egress (трафік на вихід) | |
| - ✅ $0.015 за GB/місяць (дешевше за S3) | |
| - ✅ S3-compatible API | |
| - ✅ Безкоштовні 10 GB зберігання | |
| **Недоліки:** | |
| - ❌ Потрібна реєстрація Cloudflare | |
| - ❌ Менш зрілий сервіс | |
| **Вартість:** Безкоштовно (в межах 10GB) | |
| --- | |
| ### 7. 🏠 Вбудувати в Docker image (для HF Spaces) | |
| **Переваги:** | |
| - ✅ Все в одному місці | |
| - ✅ Швидкий старт (без завантаження) | |
| - ✅ Не потрібні додаткові сервіси | |
| **Недоліки:** | |
| - ❌ Великий розмір image (~1GB+) | |
| - ❌ Повільне deployment | |
| - ❌ Складніше оновлювати індекси | |
| **Підходить для:** Статичних індексів, які рідко змінюються | |
| --- | |
| ### 8. 🎯 HF Space Persistent Storage | |
| **Переваги:** | |
| - ✅ Вбудоване в HF Spaces | |
| - ✅ Не потрібні додаткові сервіси | |
| - ✅ Дані зберігаються між перезапусками | |
| **Недоліки:** | |
| - ❌ Доступно тільки для платних планів | |
| - ❌ Обмежений об'єм | |
| **Вартість:** Від $5/місяць (Supporter tier) | |
| --- | |
| ## 🏆 Рекомендовані рішення | |
| ### Для production (на вибір): | |
| #### 🥇 **Варіант 1: Hugging Face Datasets** (Найкращий для HF Spaces) | |
| ```yaml | |
| Вартість: Безкоштовно | |
| Складність: Низька | |
| Швидкість: Висока | |
| Надійність: Висока | |
| ``` | |
| #### 🥈 **Варіант 2: Cloudflare R2** (Найдешевший) | |
| ```yaml | |
| Вартість: Безкоштовно (до 10GB) | |
| Складність: Середня | |
| Швидкість: Висока | |
| Надійність: Висока | |
| ``` | |
| #### 🥉 **Варіант 3: Google Cloud Storage** (Перевірений) | |
| ```yaml | |
| Вартість: ~$0.01/місяць | |
| Складність: Середня | |
| Швидкість: Висока | |
| Надійність: Дуже висока | |
| ``` | |
| --- | |
| ## 📝 Порівняльна таблиця | |
| | Сервіс | Вартість/міс | Setup | Швидкість | Надійність | Рекомендація | | |
| |--------|--------------|-------|-----------|------------|--------------| | |
| | **HF Datasets** | $0 | ⭐⭐⭐ | ⚡⚡⚡ | ✅✅✅ | ⭐⭐⭐⭐⭐ | | |
| | **Cloudflare R2** | $0 | ⭐⭐ | ⚡⚡⚡ | ✅✅✅ | ⭐⭐⭐⭐ | | |
| | **GCS** | $0.01 | ⭐⭐ | ⚡⚡⚡ | ✅✅✅ | ⭐⭐⭐⭐ | | |
| | **AWS S3** | $0.02 | ⭐⭐ | ⚡⚡⚡ | ✅✅✅ | ⭐⭐⭐ | | |
| | **Azure Blob** | $0.01 | ⭐⭐ | ⚡⚡ | ✅✅✅ | ⭐⭐⭐ | | |
| | **GitHub Releases** | $0 | ⭐⭐⭐ | ⚡⚡ | ✅✅ | ⭐⭐ | | |
| | **Docker Image** | $0 | ⭐ | ⚡⚡⚡ | ✅✅ | ⭐⭐ | | |
| | **Dropbox/Drive** | $0 | ⭐⭐⭐ | ⚡ | ✅ | ⭐ | | |
| --- | |
| ## 🚀 План міграції на Hugging Face Datasets (Рекомендовано) | |
| ### Крок 1: Створення датасету | |
| ```bash | |
| # 1. Створіть новий датасет на HF | |
| # https://huggingface.co/new-dataset | |
| # Назва: DocSA/legal-position-indexes | |
| # 2. Клонуйте репозиторій | |
| git clone https://huggingface.co/datasets/DocSA/legal-position-indexes | |
| cd legal-position-indexes | |
| # 3. Налаштуйте Git LFS | |
| git lfs install | |
| git lfs track "*.json" | |
| git lfs track "*.jsonl" | |
| git lfs track "*.npy" | |
| git lfs track "*.index.*" | |
| ``` | |
| ### Крок 2: Завантаження індексів | |
| ```bash | |
| # Скопіюйте індекси | |
| cp -r ../Save_Index_Ivan/* ./ | |
| # Додайте README | |
| cat > README.md << 'EOF' | |
| --- | |
| license: mit | |
| --- | |
| # Legal Position Indexes | |
| Індекси для Legal Position AI Analyzer. | |
| ## Вміст | |
| - BM25 retriever | |
| - Document store | |
| - Vector embeddings | |
| ## Використання | |
| ```python | |
| from huggingface_hub import snapshot_download | |
| snapshot_download( | |
| repo_id="DocSA/legal-position-indexes", | |
| repo_type="dataset", | |
| local_dir="Save_Index_Ivan" | |
| ) | |
| ``` | |
| EOF | |
| # Закомітьте | |
| git add . | |
| git commit -m "Add legal position indexes" | |
| git push | |
| ``` | |
| ### Крок 3: Оновлення коду | |
| ```python | |
| # Додайте в main.py або components.py | |
| from huggingface_hub import snapshot_download | |
| from pathlib import Path | |
| def download_indexes_from_hf(): | |
| """Download indexes from Hugging Face Datasets.""" | |
| local_dir = Path("Save_Index_Ivan") | |
| if not local_dir.exists() or not list(local_dir.iterdir()): | |
| print("📥 Downloading indexes from Hugging Face...") | |
| snapshot_download( | |
| repo_id="DocSA/legal-position-indexes", | |
| repo_type="dataset", | |
| local_dir=str(local_dir), | |
| allow_patterns=["*"] | |
| ) | |
| print("✅ Indexes downloaded successfully!") | |
| else: | |
| print("✅ Indexes already exist locally") | |
| # Викликайте при ініціалізації | |
| download_indexes_from_hf() | |
| ``` | |
| --- | |
| ## 💡 Мій рекомендований підхід | |
| **Використайте Hugging Face Datasets** з fallback на AWS S3: | |
| ```python | |
| def load_indexes(): | |
| """Load indexes with fallback strategy.""" | |
| try: | |
| # Спробувати завантажити з HF Datasets | |
| download_indexes_from_hf() | |
| except Exception as e: | |
| print(f"⚠️ HF download failed: {e}") | |
| try: | |
| # Fallback на AWS S3 | |
| download_from_s3() | |
| except Exception as e2: | |
| print(f"⚠️ S3 download failed: {e2}") | |
| print("❌ No indexes available") | |
| ``` | |
| **Переваги цього підходу:** | |
| - ✅ Безкоштовно | |
| - ✅ Швидко | |
| - ✅ Надійно (fallback) | |
| - ✅ Нативна інтеграція з HF Spaces | |
| --- | |
| **Дата:** 10 лютого 2026 р. | |