У мене є додаток, який породив досить бурхливу дискусію між парою розробників.
В основному, він розділений на веб-шар і резервний шар. Веб-шар збирає інформацію за допомогою простої веб-форми, зберігає ці дані у вигляді документа JSON (буквально .json-файл) у папку годинника, використовувану заднім кінцем. Задній кінець оглядає цю папку кожні кілька секунд, підбирає файл і виконує його функції.
Самі файли дуже прості (тобто всі рядкові дані, не вкладаються) і мають приблизно 1-2 тис. Найвищих розмірів, система витрачає більшу частину часу в режимі очікування (але в будь-який момент часу запирає до 100 повідомлень). Етап обробки резервного інтервалу займає приблизно 10 хвилин на повідомлення.
Аргумент наводиться тоді, коли один розробник припускає, що використовувати файлову систему як шар обміну повідомленнями - це погане рішення, коли натомість слід використовувати щось таке, як реляційна база даних (MySQL), база даних noSQL (Redis) або навіть звичайний виклик API REST.
Слід зазначити, що Redis використовується в інших місцях організації для обробки повідомлень у черзі.
Аргументи, які я чув, розбиваються наступним чином
На користь плоских файлів:
Плоскі файли надійніші, ніж будь-яке інше рішення, оскільки файл переміщується лише з папки "спостерігати", до папки "обробка" після її завантаження, і, нарешті, у папку "зроблено" після її закінчення. Існує нульовий ризик зникнення повідомлень, забороняючи помилки дуже низького рівня, які в будь-якому разі можуть порушити інші речі.
Плоскі файли потребують меншої технічної складності, щоб зрозуміти - тільки
cat
це. Жодних запитів для запису, жодного ризику випадкового вискакування повідомлення з черги та відсутності його назавжди.Код управління файлами простіший, ніж API бази даних з точки зору програмування, оскільки він є частиною стандартної бібліотеки кожної мови. Це зменшує загальну складність бази коду та кількість коду третьої сторони, який необхідно ввести.
Принцип YAGNI зазначає, що плоскі файли працюють зараз добре, немає необхідності переходити на більш складне рішення, тому залиште це.
На користь бази даних:
Масштабування бази даних простіше, ніж каталог, наповнений файлами
Плоскі файли мають ризик того, що хтось скопіює файл "готовий" назад у каталог "watch". Через характер цієї програми (управління віртуальною машиною) це може призвести до катастрофічних втрат даних.
Вимагаючи додаткової технічної вдосконалення для T / S, додаток означає, що неосвічений персонал має меншу ймовірність щось викрутити, просто поцупивши речі.
Код підключення до БД, особливо для чогось типу Redis, принаймні такий же надійний, як і стандартні функції управління файлами бібліотеки.
Код підключення до БД помітно (якщо не функціонально) простіший з точки зору розробника, оскільки його рівень вищий, ніж обробка файлами.
Як я бачу, обидва розробники мають чимало дійсних балів.
Отже, про цих двох людей, про-файли розробника або розробники баз даних, який більше відповідає найкращій практиці інженерії програмного забезпечення, і чому?