sql >> Databasteknik >  >> RDS >> Mysql

MySQL binär lagring med BLOB VS OS filsystem:stora filer, stora kvantiteter, stora problem

Jag arbetar på ett stort mjukvarusystem som har gjort både mekanismer för att lagra bilagor och annat innehåll. Den första iterationen av systemet lagrade all data i BLOBs i DB. Jag förbannade det på den tiden. Som programmerare kunde jag skriva sidoskript för att omedelbart använda data och ändra den när jag ville.

Avancera cirka 10 år och jag hanterar fortfarande samma mjukvara men arkitekturen har förändrats och den skrevs med filsystempekare. Jag förbannar det nu och önskar att det var tillbaka i DB. Jag har den extra fördelen av flera år och efter att ha arbetat med denna applikation i mycket större kapacitet i många fler och många större situationer, känner jag att min åsikt nu är bättre utbildad. Marknadsföring eller systemmigrering av applikationen kräver omfattande skriptning och kopiering av miljontals filer. Vid ett tillfälle ändrade vi OS och alla filpekare hade fel katalogavgränsare, eller så ändrades servernamnet där filen låg och vi var tvungna att skriva och schemalägga enkla SQL-uppdateringssatser med DBA på helgen för att fixa. En annan är att filsystemet och DB-posterna blir osynkroniserade, varför är osäkert, men efter tusentals dagars drift blir ibland icke-transaktionella system (filsystem och DB delar inte transaktionssammanhang) helt enkelt osynkroniserade. Ibland försvinner filer på ett mystiskt sätt.

När allt detta fanns i DB var migration eller miljöfrämjande en fråga om att dumpa och importera DB. Radändringar kan granskas ordentligt, allt synkroniserat och loggar kan spelas upp till tidpunkten vid behov. Visst blir DB stor, men det är 2011 och det här är helt enkelt inte en utmaning för databaser.

För vad det är värt hade vi några liknande problem med stora databuffertar när vi streamade vissa data, men A) vi kunde pumpa data i bytebuffertar med Input|OutputStreams i JDBC och B) när vi använde andra verktyg, vi skrev en lagrad procedur som skulle sätta BLOBEN i ett tempbord och iterativt servera bitarna från tempbordet. Fungerar utmärkt.

Jag bryr mig inte om vad den tekniska orsaken till inte är lägga in det här i DB, men det är så mycket enklare för att hantera på en konsoliderad plats skulle jag kunna fördubbla och tredubbla hårdvaran eller lägga till DB för den tid som slösas bort av konsulter och kunder bara på kort tid och hantera de olika filerna.

Uppdatering:ta det lugnt med kommentatorerna, de ger bara sin åsikt om saken.




  1. Icke försumbar skillnad i exekveringsplan med Oracle vid användning av jdbc Timestamp eller Date

  2. Ladda upp bilder i CKEditor utan att använda ett plugin

  3. spara python objekt i postgres bord med pickle

  4. Skillnaden mellan lokala och globala tillfälliga tabeller i SQL Server