Relační databáze řeší 90 % našich potřeb. Ale co těch zbylých 10 %? Logy, události, flexibilní formuláře, data bez fixního schématu. Pro tyto případy jsme zkusili MongoDB — a zjistili, že NoSQL není žádná magie ani hrozba.
Use case: IoT senzorová data¶
Každý typ senzoru posílal jiná data v jiném formátu. V relační databázi bychom potřebovali EAV model nebo desítky tabulek. MongoDB umožňuje uložit dokument tak, jak přijde.
Schema-less neznamená schema-free¶
Největší mýtus. I v MongoDB potřebujete konvence. Bez nich skončíte s nekonzistentními daty — někde „createdDate”, jinde „created_date”. Zavedli jsme Mongoose pro schéma na aplikační vrstvě.
Indexy a aggregation pipeline¶
db.readings.createIndex({ sensorId: 1, timestamp: -1 });
db.sensors.createIndex({ location: "2dsphere" });
db.logs.createIndex({ createdAt: 1 }, { expireAfterSeconds: 2592000 });
Aggregation pipeline v MongoDB 2.6 je překvapivě mocný. GROUP BY, JOIN (lookup), transformace — vše v jednom pipeline.
Kdy ANO, kdy NE¶
ANO: Proměnlivé schéma, hierarchická data, prototypování, geo dotazy. NE: Transakční systémy (bez multi-document ACID), komplexní reporting, malé projekty.
Správný nástroj pro správný problém¶
MongoDB není náhrada relační databáze, je to doplněk. PostgreSQL pro transakční data, MongoDB pro senzory a logy. Klíčové je nepodlehnout hype.