| """ |
| Skrypt do kompakcji bazy danych LanceDB. |
| |
| Usuwa historię wersjonowania (985+ manifests w _versions/) i tworzy |
| świeżą bazę tylko z aktualnymi danymi, drastycznie zmniejszając liczbę |
| plików do przesłania przez Git LFS. |
| """ |
|
|
| import lancedb |
| import shutil |
| from pathlib import Path |
| import sys |
|
|
| |
| LANCEDB_PATH = "./lancedb" |
| TABLE_NAME = "a11y_expert" |
| BACKUP_PATH = "./lancedb_backup" |
| TEMP_EXPORT_PATH = "./lancedb_temp" |
|
|
|
|
| def main(): |
| """Główna funkcja kompakcji bazy danych.""" |
| |
| print("🔄 Rozpoczynam kompakcję bazy danych LanceDB...") |
| |
| |
| db_path = Path(LANCEDB_PATH) |
| if not db_path.exists(): |
| print(f"❌ Baza danych nie istnieje: {LANCEDB_PATH}") |
| sys.exit(1) |
| |
| |
| backup_path = Path(BACKUP_PATH) |
| if backup_path.exists(): |
| print(f"⚠️ Backup już istnieje: {BACKUP_PATH}") |
| print("Pomijam tworzenie nowego backupu (istniejący backup pozostaje niezmieniony)") |
| else: |
| print(f"📦 Tworzę backup: {LANCEDB_PATH} -> {BACKUP_PATH}") |
| shutil.copytree(LANCEDB_PATH, BACKUP_PATH) |
| print(f"✅ Backup utworzony: {BACKUP_PATH}") |
| |
| |
| print(f"📖 Otwieram bazę: {LANCEDB_PATH}") |
| db = lancedb.connect(LANCEDB_PATH) |
| |
| if TABLE_NAME not in db.table_names(): |
| print(f"❌ Tabela '{TABLE_NAME}' nie istnieje w bazie") |
| sys.exit(1) |
| |
| table = db.open_table(TABLE_NAME) |
| total_docs = len(table) |
| print(f"📊 Znaleziono {total_docs} dokumentów w tabeli '{TABLE_NAME}'") |
| |
| |
| print("🔄 Eksportuję dane do formatu Arrow...") |
| arrow_table = table.to_arrow() |
| print(f"✅ Wyeksportowano {len(arrow_table)} rekordów") |
| |
| |
| print(f"📋 Schema tabeli:\n{arrow_table.schema}") |
| |
| |
| def get_dir_size(path): |
| """Oblicz rozmiar katalogu w MB.""" |
| total = sum(f.stat().st_size for f in Path(path).rglob('*') if f.is_file()) |
| return total / (1024 * 1024) |
| |
| def count_files(path): |
| """Policz wszystkie pliki w katalogu.""" |
| return sum(1 for _ in Path(path).rglob('*') if _.is_file()) |
| |
| old_size_mb = get_dir_size(LANCEDB_PATH) |
| old_files = count_files(LANCEDB_PATH) |
| print(f"📏 Rozmiar przed kompakcją: {old_size_mb:.2f} MB ({old_files} plików)") |
| |
| |
| print(f"🗑️ Usuwam starą bazę: {LANCEDB_PATH}") |
| shutil.rmtree(LANCEDB_PATH) |
| print(f"✅ Usunięto starą bazę") |
| |
| |
| print(f"🆕 Tworzę nową bazę: {LANCEDB_PATH}") |
| new_db = lancedb.connect(LANCEDB_PATH) |
| |
| |
| data_dicts = arrow_table.to_pylist() |
| |
| print(f"💾 Zapisuję {len(data_dicts)} dokumentów do nowej bazy...") |
| new_table = new_db.create_table(TABLE_NAME, data=data_dicts, mode="create") |
| print(f"✅ Utworzono nową tabelę '{TABLE_NAME}' z {len(new_table)} dokumentami") |
| |
| |
| new_size_mb = get_dir_size(LANCEDB_PATH) |
| new_files = count_files(LANCEDB_PATH) |
| print(f"📏 Rozmiar po kompakcji: {new_size_mb:.2f} MB ({new_files} plików)") |
| |
| |
| saved_mb = old_size_mb - new_size_mb |
| saved_files = old_files - new_files |
| print(f""" |
| ✅ Kompakcja zakończona! |
| |
| 📊 Statystyki: |
| - Dokumenty: {total_docs} |
| - Rozmiar przed: {old_size_mb:.2f} MB ({old_files} plików) |
| - Rozmiar po: {new_size_mb:.2f} MB ({new_files} plików) |
| - Zaoszczędzono: {saved_mb:.2f} MB ({saved_files} plików) |
| - Redukcja: {(saved_mb/old_size_mb*100):.1f}% rozmiaru, {(saved_files/old_files*100):.1f}% plików |
| |
| 📦 Backup dostępny w: {BACKUP_PATH} |
| |
| ⚠️ Następne kroki: |
| 1. Sprawdź czy baza działa: python -c "import lancedb; db = lancedb.connect('./lancedb'); print(len(db.open_table('a11y_expert')))" |
| 2. Usuń stare pliki z Git: git rm -r --cached lancedb/ |
| 3. Dodaj nową bazę: git add lancedb/ |
| 4. Commit: git commit -m "Compact LanceDB - remove version history" |
| 5. Push: git push |
| """) |
|
|
|
|
| if __name__ == "__main__": |
| main() |
|
|