Ніколи не можна говорити про так звану базу даних "NoSQL", не принісши теорему CAP (узгодженість, доступність, розділ: виберіть дві). Якщо вам потрібно вибрати, скажімо, між MongoDB (розділ, послідовність) та CouchDB (доступність, розділ), перше, що вам потрібно подумати, - це "чи потрібні мені правильні дані чи мені весь час потрібен доступ?".
Ці нові бази даних були зроблені для секціонування. Але що робити, якщо я цього не роблю ? Що робити, якщо я просто думаю, що це досить круто, щоб мати ключ / значення, стовпець, документ, будь-яку базу даних замість реляційної, і просто створити один екземпляр сервера і ніколи не розбивати його? У такому випадку не було б у мене і доступності, і послідовності? MongoDB не потрібно було б нічого тиражувати, тому воно буде доступне. А CouchDB мав би лише одне джерело даних, тому це було б досить послідовно.
Отже, це означатиме, що в такому випадку MongoDB та CouchDB мали б невелику різницю у випадку використання терміна? Ну, за винятком продуктивності, звичайно, API та інших, але це більше схоже на вибір між PostgreSQL та MySQL, ніж на два принципово різних набори вимог.
Я прав тут? Чи можу я змінити базу даних AP або CP на мережу змінного струму, не створивши більше одного екземпляра? Або є щось, чого мені не вистачає?
Давайте поставимо питання зворотньо. Що робити, якщо я візьму реляційну базу даних, скажімо MySQL, і поставлю її в конфігурацію master / slaves. Я не використовую транзакції ACID Якщо мені потрібно негайно синхронізувати будь-яке записування до підлеглого, чи не це зробить це базою даних CP? А що робити, якщо я синхронізую її з деякими заздалегідь заданими інтервалами, і не має значення, чи читає клієнт застарілі дані з підлеглого. Хіба це не зробить це базою даних AP? Чи не означає це, що якщо я відмовлюся від відповідності ACID, я все-таки можу використовувати модель relanal для розділеної бази даних?
По суті: чи масштабність щодо того, що ви готові відмовитись у теоремі CAP, більше, ніж основна модель даних? Чи має колона, документ, ключове значення, що б не сприяло збільшенню масштабності за реляційною моделлю? Чи можемо ми створити реляційну базу даних, розроблену з нуля для толерантності до розділів? (Можливо, воно вже існує). Чи можемо ми зробити базу даних NoSQL ACID сумісною?
Вибачте, це багато питань, але останнім часом я багато читав про базу даних NoSQL, і мені здається, що найбільша перевага їх використання полягає в тому, що вони краще підходять до "форми" ваших даних, а не просто до розділу, CAP і відмова від відповідності ACID. Зрештою, не всі мають стільки даних, що їм потрібно їх розділити. Чи є користь від продуктивності / масштабування від того, щоб не використовувати реляційну модель, перш ніж я навіть подумати про розподіл своїх даних?