File size: 4,290 Bytes
1dab660 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
"""
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
# Konfiguracja
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...")
# Krok 1: Sprawdź czy baza istnieje
db_path = Path(LANCEDB_PATH)
if not db_path.exists():
print(f"❌ Baza danych nie istnieje: {LANCEDB_PATH}")
sys.exit(1)
# Krok 2: Utwórz backup (opcjonalnie)
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}")
# Krok 3: Otwórz bazę i eksportuj dane
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}'")
# Krok 4: Eksportuj do Arrow
print("🔄 Eksportuję dane do formatu Arrow...")
arrow_table = table.to_arrow()
print(f"✅ Wyeksportowano {len(arrow_table)} rekordów")
# Wyświetl informacje o schemacie
print(f"📋 Schema tabeli:\n{arrow_table.schema}")
# Krok 5: Sprawdź rozmiar przed kompakcją
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)")
# Krok 6: Usuń starą bazę
print(f"🗑️ Usuwam starą bazę: {LANCEDB_PATH}")
shutil.rmtree(LANCEDB_PATH)
print(f"✅ Usunięto starą bazę")
# Krok 7: Utwórz nową bazę ze świeżymi danymi
print(f"🆕 Tworzę nową bazę: {LANCEDB_PATH}")
new_db = lancedb.connect(LANCEDB_PATH)
# Konwertuj Arrow Table na listę słowników
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")
# Krok 8: Sprawdź rozmiar po kompakcji
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)")
# Podsumowanie
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()
|