Warum ich bei Bean Remote PostGIS statt eines ORM gewählt habe
In Bean Remote musste ich ein Kernproblem lösen: Cafés auf der Karte schnell nach Radius und sichtbarem Kartenausschnitt filtern.
Für diesen Use Case war ein klassischer ORM-Layer weniger effektiv als die nativen Geofunktionen von PostgreSQL.
Stack
- React Native + Expo
- Node.js + Express
- PostgreSQL + PostGIS
Warum PostGIS besser passte
1) Native räumliche Indizierung
location GEOGRAPHY(Point, 4326)
CREATE INDEX idx_cafes_location ON cafes USING GIST (location);
Dann:
SELECT * FROM cafes
WHERE ST_DWithin(
location,
ST_SetSRID(ST_MakePoint(:lng, :lat), 4326),
:radius
);
Das liefert saubere Performance und hohe Genauigkeit ohne zusätzliche App-Filterung.
2) Komplexe Geo-Operationen sind in ORMs oft umständlich
Bei ST_DWithin, ST_Intersects oder ST_MakeEnvelope landet man ohnehin häufig bei raw SQL.
Der zusätzliche Abstraktionslayer hilft dann in den kritischen Pfaden kaum.
3) Business-Regeln und Geometrie in einem Query
SELECT * FROM cafes
WHERE is_verified = true
AND ST_Within(
location,
ST_MakeEnvelope(:west, :south, :east, :north, 4326)
);
Vergleich
| Kriterium | ORM | PostGIS |
|---|---|---|
| CRUD | Gut | Gut |
| Räumliche Funktionen | Begrenzt | Vollständig |
| Indexoptimierung | Oft manuell | Nativ |
| Echtzeit-Karten | Mittel | Sehr gut |
Fazit
Für viele Anwendungen sind ORMs sinnvoll. Bei Karten, Geodaten und vielen Spatial-Queries bietet PostGIS deutlich mehr Kontrolle und Geschwindigkeit.
In Bean Remote hat das sowohl die Performance verbessert als auch die Backend-Logik vereinfacht.