Files
fotkyBuzalkovi/README.md
T
administrator b6aba06baa notebookVb
2026-05-21 07:11:54 +02:00

4.8 KiB

FotkyBuzalkovi

Systém pro zpracování, ukládání a vyhledávání rodinných fotografií s automatickou extrakcí EXIF metadat.

Architektura

Projekt používá kombinaci tří databází, kde každá řeší specifickou úlohu:

┌─────────────────────────────────────────────────────────┐
│                    Python aplikace                       │
│              (zpracování fotek, EXIF, hash)              │
└────────────┬──────────────┬──────────────┬───────────────┘
             │              │              │
             ▼              ▼              ▼
      ┌────────────┐  ┌────────────┐  ┌────────────┐
      │ PostgreSQL │  │  MongoDB   │  │   Redis    │
      │ (relační)  │  │ (EXIF/doc) │  │  (cache)   │
      └────────────┘  └────────────┘  └────────────┘
       192.168.1.76    192.168.1.76    localhost
         :5432           :27017          :6379

Proč tři databáze?

Databáze Role Co ukládá
PostgreSQL Strukturovaná data, relace photos, cameras, photo_tags - ID, cesty, hashe, FK
MongoDB Flexibilní dokumenty Plná EXIF metadata (různé fotoaparáty = různá pole)
Redis Cache + fronty Miniatury, výsledky vyhledávání, fronta zpracování

Datové úložiště

PostgreSQL - fotky_buzalkovi

  • cameras - seznam fotoaparátů (model, vyrobce)
  • photos - hlavní tabulka (file_name, file_path, file_hash, taken_at, rozměry, FK na camera)
  • photo_tags - tagy ke každé fotce (many-to-many)

MongoDB - fotky_buzalkovi

  • photos kolekce - kompletní EXIF data, GPS souřadnice, nastavení clony, ISO, atd.

Redis (plánováno)

  • cache:thumb:{photo_id} - cached miniatury (TTL 1h)
  • queue:process - fronta nezpracovaných fotek
  • session:{user_id} - session data

K čemu Redis

  1. Cache miniatur - generování miniatur je drahé, Redis je drží v RAM (rychlost ~0.1ms vs ~50ms z disku)
  2. Cache vyhledávání - "fotky z dovolené 2025" se může opakovat, výsledek se cachuje
  3. Fronta zpracování - když nahrajete 1000 fotek, Redis funguje jako worker queue
  4. Deduplikace - rychlá kontrola, zda hash fotky už existuje
  5. Rate limiting - omezení uploadů

Instalace

1. Python prostředí

python -m venv .venv
.venv\Scripts\Activate.ps1
pip install psycopg2-binary pymongo redis pillow exifread python-dotenv

2. PostgreSQL

Předpoklad: PostgreSQL běží na 192.168.1.76:5432.

python create_schema.py

3. MongoDB

Předpoklad: MongoDB běží na 192.168.1.76:27017.

python test_mongo.py

4. Redis (Windows)

Redis oficiálně Windows nepodporuje. Tři možnosti:

Možnost A - WSL2 (doporučeno):

wsl --install
# v WSL:
sudo apt update
sudo apt install redis-server
sudo service redis-server start

Možnost B - Docker:

docker run -d --name redis -p 6379:6379 redis:latest

Možnost C - Memurai (Windows-native Redis-kompatibilní):

Test:

python test_db_connection.py

Konfigurace

⚠️ Hesla v současných skriptech jsou v plain textu - před nasazením přesunout do .env:

PG_HOST=192.168.1.76
PG_PORT=5432
PG_USER=vladimir.buzalka
PG_PASSWORD=...
PG_DB=fotky_buzalkovi

MONGO_URI=mongodb://192.168.1.76:27017/
MONGO_DB=fotky_buzalkovi

REDIS_HOST=localhost
REDIS_PORT=6379

Struktura projektu

FotkyBuzalkovi/
├── demo_fotky/              # Testovací fotografie
├── create_schema.py         # Vytvoření PostgreSQL schématu
├── test_db_connection.py    # Test všech tří databází
├── test_mongo.py            # Test MongoDB + vytvoření kolekcí
├── .gitignore
└── README.md

Známé problémy

  • create_schema.py používá MySQL syntaxi INDEX idx_x uvnitř CREATE TABLE - v PostgreSQL je potřeba CREATE INDEX zvlášť po CREATE TABLE
  • Hesla jsou hardcodovaná v Python souborech - migrovat do .env + python-dotenv

Roadmap

  • Opravit PostgreSQL schéma (INDEX syntaxe)
  • Migrace hesel do .env
  • Instalace Redis
  • Skript pro hromadný import fotek z demo_fotky/
  • EXIF parser (pillow + exifread)
  • Generování miniatur s Redis cache
  • Web UI pro prohlížení galerie