Вы никогда не сможете поговорить о так называемой базе данных «NoSQL», не приведя теорему CAP (согласованность, доступность, раздел: выберите два). Если вам нужно выбрать, скажем, между MongoDB (Разделение, Согласованность) и CouchDB (Доступность, Разделение), первое, о чем вам нужно подумать: «Мне нужны правильные данные или мне нужен доступ все время?».
Эти новые базы данных были созданы для разделения. Но что если я этого не сделаю ? Что если я просто думаю, что это круто - иметь ключ / значение, столбец, документ, любую базу данных вместо реляционной, и просто создать один экземпляр сервера и никогда его не осколковать? В таком случае, разве у меня не было бы доступности и согласованности? MongoDB не нужно будет ничего копировать, поэтому он будет доступен. И у CouchDB будет только один источник данных, поэтому он будет довольно последовательным.
Так что это будет означать, что в этом случае MongoDB и CouchDB будут иметь небольшую разницу в терминах использования? Ну, кроме, конечно, производительности, API и т. Д., Но это больше похоже на выбор между PostgreSQL и MySQL, чем на наличие двух принципиально различных требований.
Я прямо здесь? Могу ли я изменить базу данных AP или CP на AC, не создавая более одного экземпляра? Или мне чего-то не хватает?
Давайте зададим вопрос в обратном порядке. Что делать, если я беру реляционную базу данных, скажем, MySQL, и помещаю ее в конфигурацию master / slave. Я не использую транзакции ACID. Если я требую, чтобы любая запись была немедленно синхронизирована с ведомым устройством, разве это не сделало бы это базой данных CP? А что, если я синхронизирую его через несколько предопределенных интервалов, и не имеет значения, читает ли клиент устаревшие данные из ведомого устройства. Не сделает ли это базу данных AP? Не значит ли это, что если я откажусь от соответствия ACID, я все равно смогу использовать реляционную модель для разделенной базы данных?
По сути: масштабируемость того, от чего вы готовы отказаться в теореме CAP, больше, чем базовая модель данных? Имеет ли столбец, документ, значение ключа, что-либо еще, повышает масштабируемость по сравнению с реляционной моделью? Можем ли мы спроектировать реляционную базу данных, разработанную с нуля для допусков на разделы? (Может быть, оно уже существует). Можем ли мы сделать базу данных NoSQL ACID-совместимой?
Извините, это много вопросов, но я недавно много читал о базах данных NoSQL, и мне кажется, что самое большое преимущество их использования заключается в том, что они лучше соответствуют «форме» ваших данных, а не только разделу, CAP и отказ от соответствия кислоте. В конце концов, не у всех есть так много данных, что им нужно разделить их. Есть ли преимущество в производительности / масштабируемости для того, чтобы не использовать реляционную модель, прежде чем я даже подумаю о разделении своих данных?