Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL Binary Storage, използвайки BLOB VS OS файлова система:големи файлове, големи количества, големи проблеми

Работя върху голяма софтуерна система, която е направила и двата механизма за съхранение на прикачени файлове и друго съдържание. Първата итерация на системата съхранява всички данни в BLOB в DB. Проклинах го навремето. Като програмист можех да пиша странични скриптове, за да оперирам незабавно с данните и да ги променям, когато пожелая.

Напред около 10 години и все още управлявам същия софтуер, но архитектурата се промени и беше написана с указатели на файловата система. Проклинам го сега и ми се иска да се върне в БД. Имам допълнителна полза от няколко години и след като работих с това приложение с много по-голям капацитет в много повече и много по-големи ситуации, смятам, че сега мнението ми е по-добре образовано. Промоцията или системната миграция на приложението изисква обширни скриптове и копиране на милиони файлове. Веднъж сменихме операционната система и всички указатели на файлове имаха грешен разделител на директория или името на сървъра се променя къде се намира файлът и трябваше да напишем и планираме прости инструкции за актуализиране на SQL с DBA през уикенда, за да го коригираме. Друго е, че файловата система и DB записите излизат от синхрон, защо е несигурно, но след хиляди дни работа, понякога не-транзакционните системи (файловата система и DB не споделят транзакционен контекст) просто стават несинхронизирани. Понякога файлове мистериозно изчезват.

Когато всичко това беше в БД, миграцията или насърчаването на средата беше въпрос на изхвърляне и импортиране на БД. Промените в редовете могат да бъдат правилно одитирани, всичко в синхрон и регистрационните файлове могат да бъдат възпроизведени до момента, ако е необходимо. Разбира се, DB става голяма, но това е 2011 г. и тези неща просто не са предизвикателство за базите данни.

За какво си струва, имахме някои подобни проблеми с големи буфери за данни при поточно предаване на някои данни, но A) можехме да изпомпваме данните в байтови буфери с Input|OutputStream в JDBC и B) когато използвахме други инструменти, написахме съхранена процедура което ще раздели BLOB във временна таблица и итеративно ще обслужва парчетата от временната таблица. Работи чудесно.

Не ме интересува каква е техническата причина за не поставям тези неща в DB, ​​но е много по-лесно за да управлявам на консолидирано място, бих могъл да удвоя и утроя хардуера или да разпределя базата данни за времето, загубено от консултанти и клиенти само за кратък период от време, управлявайки различни файлове.

Актуализация:по-спокойно с коментиращите, те просто дават мнението си по въпроса.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. списък резултати в mysql от същата таблица

  2. Възможно ли е да има параметър по подразбиране за съхранена процедура на mysql?

  3. Как да създам две колони с автоматично увеличение в MySQL?

  4. Какви са ползите от създаването на Съхранени процедури в SQL и MySQL?

  5. Как да конвертирам excel файл в mysql база данни?