|
|
""" |
|
|
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() |
|
|
|