Я дивлюся на перезапис VB на основі додаткового (локально встановленого) додатку (виставлення рахунків + інвентар) як веб-додаток Clojure для клієнтів малих підприємств. Я маю намір запропонувати це як додаток SaaS для клієнтів у подібній торгівлі.
Я розглядав варіанти баз даних: Мій вибір був RDBMS: Postgresql / MySQL. Я міг би масштабувати до 400 користувачів протягом першого року, як правило, 20-40 переглядів сторінок / на день на користувача - переважно для транзакцій, а не статичних переглядів. Кожен огляд буде включати дані щодо отримання та оновлення даних. Відповідність кислотної кислоти необхідна (або я так вважаю). Тож обсяг угод не величезний.
Вибирати будь-яке з них було б не на основі моїх переваг, але для цієї однієї вимоги, яка, на мою думку, є типовою для програми SaaS: Схема буде змінюватися, оскільки я додаю більше клієнтів / користувачів і для кожного клієнта зміна вимог до бізнесу (я пропоную лише обмежену гнучкість лише для початку). Оскільки я не є експертом з питань БД, виходячи з того, що я можу думати і прочитав, я можу це впоратися різними способами:
- Майте традиційний дизайн схеми RDBMS в MySQl / Postgresql з єдиною БД, що розміщує декілька орендарів. І додайте в кожну таблицю достатньо стовпчиків, що постійно плавають, щоб забезпечити подальші зміни, оскільки я додаю більше клієнтів або змін для існуючого клієнта. Це може мати слабкий бік поширення змін до БД кожного разу, коли в схему вносяться невеликі зміни. Я пам'ятаю, як читав, що в Postgresql оновлення схеми можна робити в режимі реального часу без блокування. Але не впевнений, наскільки болісно чи наскільки це практично в цьому випадку використання. А також, оскільки зміни схеми можуть також вводити нові / незначні зміни SQL.
- Мати RDBMS, але розробити схему бази даних гнучко: із близьким до сутності-атрибутом-значенням або просто як сховище ключа-значення. (Наприклад, робочий день, FriendFeed)
- Майте всю пам'ять в якості об'єктів і періодично зберігайте їх у файлах журналу (наприклад, edval, lmax)
- Перейдіть до такої БД NoSQL, як MongoDB або Redis. Але виходячи з того, що я можу зібрати, вони не підходять для цього випадку використання та не повністю сумісні з кислотами.
- Зайдіть за деякими NewSQL Dbs, такими як VoltDb або JustoneDb (на основі хмари), які зберігають поведінку, сумісну з SQL та ACID та є RDBMS "нового покоління".
- Я подивився на neo4j (graphdb), але не впевнений, чи підійде це для цього випадку використання
У моєму випадку використання, більш ніж масштабованість чи розподілені обчислення, я шукаю кращий спосіб досягти "Гнучкості в схемі + кислотна кислота + деякі розумні показники". Більшість статей, які я міг знайти в мережі, говорять про гнучкість у схемі, як про причину, що призводить до продуктивності (у випадку БД NoSQL) та масштабованості, не залишаючи сторону ACID / транзакції.
Це "або" випадок транзакцій "Гнучкість схеми проти ACID" чи є кращий вихід?