Нет такой вещи как NoSQL!
NoSQL - модное слово.
В течение десятилетий, когда люди говорили о базах данных, они имели в виду реляционные базы данных. И когда люди говорили о реляционных базах данных, они имели в виду те, которые вы контролируете с помощью языка структурированных запросов Эдгара Ф. Кодда. Хранить данные другим способом? Безумие! Все остальное - просто файлы.
Но в последние несколько лет люди начали подвергать сомнению эту догму. Люди задавались вопросом, действительно ли таблицы со строками и столбцами являются единственным способом представления данных. Люди начали думать и кодировать и придумывали много новых концепций организации данных. И они начали создавать новые системы баз данных, предназначенные для этих новых способов работы с данными.
Философии всех этих баз данных были разными. Но у всех этих баз данных было общее то, что язык структурированных запросов больше не подходит для их использования. Таким образом, каждая база данных заменила SQL своими собственными языками запросов. Так появился термин NoSQL, как ярлык для всех технологий баз данных, которые бросают вызов классической модели реляционных баз данных.
Так что же общего у баз данных NoSQL?
На самом деле, не так много.
Вы часто слышите такие фразы, как:
- NoSQL масштабируется!
- NoSQL для BigData!
- NoSQL нарушает ACID!
- NoSQL - это прославленное хранилище ключей / значений!
Это правда? Ну, некоторые из этих утверждений могут быть верными для некоторых баз данных, обычно называемых NoSQL, но каждая из них также ложна по крайней мере для одной другой. На самом деле, единственное, что объединяет базы данных NoSQL, это то, что они являются базами данных, которые не используют SQL. Вот и все. Единственное, что их определяет, это то, что отличает их друг от друга.
Так что же отличает базы данных NoSQL?
Итак, мы ясно дали понять, что все эти базы данных, обычно называемые NoSQL, слишком разные, чтобы оценивать их вместе. Каждый из них должен оцениваться отдельно, чтобы решить, подходят ли они для решения конкретной проблемы. Но с чего начать? К счастью, базы данных NoSQL можно сгруппировать в определенные категории, которые подходят для разных вариантов использования:
Документ-ориентированный
Примеры: MongoDB, CouchDB
Сильные стороны: гетерогенные данные, работа объектно-ориентированная, гибкая разработка
Их преимущество в том, что они не требуют согласованной структуры данных. Они полезны, когда ваши требования и, следовательно, структура вашей базы данных постоянно меняются, или когда вы имеете дело с наборами данных, которые принадлежат друг другу, но при этом выглядят совсем по-другому. Если у вас есть много таблиц с двумя столбцами, называемыми «ключ» и «значение», то, возможно, стоит изучить их.
Граф базы данных
Примеры: Neo4j, GiraffeDB.
Сильные стороны: Data Mining
Хотя большинство баз данных NoSQL отказываются от концепции управления отношениями с данными, эти базы охватывают ее даже больше, чем так называемые реляционные базы данных.
Их цель заключается в определении данных по их связи с другими данными. Если у вас есть много таблиц с первичными ключами, которые являются первичными ключами двух других таблиц (и, возможно, некоторые данные, описывающие отношения между ними), то это может быть что-то для вас.
Основные магазины
Примеры: Redis, Cassandra, MemcacheDB
Сильные стороны: быстрый поиск значений по известным ключам
Они очень просты, но это делает их быстрыми и простыми в использовании. Если вам не нужны хранимые процедуры, ограничения, триггеры и все эти расширенные функции базы данных, и вы просто хотите быстрое хранение и извлечение ваших данных, тогда это для вас.
К сожалению, они предполагают, что вы точно знаете, что ищете. Вам нужен профиль пользователя 157641? Нет проблем, займет всего лишь микросекунды. Но что, если вы хотите, чтобы имена всех пользователей в возрасте от 16 до 24 лет имели «вафли» в качестве любимой еды и входили в систему в течение последних 24 часов? Вот незадача. Если у вас нет определенного и уникального ключа для конкретного результата, вы не сможете легко достать его из своего магазина KV.
Является ли SQL устаревшим?
Некоторые сторонники NoSQL утверждают, что их любимая база данных NoSQL - это новый способ работы, а SQL ушел в прошлое.
Они правы?
Нет, конечно, нет. Хотя есть проблемы, для которых SQL не подходит, он все же имеет свои сильные стороны. Многие модели данных просто лучше всего представить в виде набора таблиц, которые ссылаются друг на друга. Тем более, что большинство программистов баз данных десятилетиями обучались думать о данных в реляционной форме, и попытка внедрить это мышление в новую технологию, которая не была создана для этого, редко заканчивается хорошо.
Базы данных NoSQL не являются заменой SQL - они являются альтернативой.
Большинство программных экосистем вокруг различных баз данных NoSQL еще не настолько развиты. Несмотря на достигнутые успехи, у вас еще нет дополнительных инструментов, которые были бы такими же зрелыми и мощными, как доступные для популярных баз данных SQL.
Кроме того, существует гораздо больше ноу-хау для SQL. Поколения ученых-компьютерщиков потратили десятилетия своей карьеры на исследования, посвященные реляционным базам данных, и это показывает: литература, написанная о базах данных SQL и моделировании реляционных данных, как практических, так и теоретических, может заполнить множество библиотек, заполненных книгами. Как создать реляционную базу данных для ваших данных - тема настолько хорошо изученная, что трудно найти угловой случай, когда не существует общепринятых практических рекомендаций.
С другой стороны, большинство баз данных NoSQL все еще находятся в зачаточном состоянии. Мы все еще придумываем лучший способ их использования.