Я изучаю базы данных NoSQL уже неделю.
Я действительно понимаю преимущества баз данных NoSQL и множество вариантов их использования.
Но часто люди пишут свои статьи, как будто NoSQL может заменить реляционные базы данных. И есть точка, которую я не могу понять:
Базы данных NoSQL (часто) являются хранилищами значений ключей.
Конечно, можно хранить все в хранилище значений ключей (путем кодирования данных в JSON, XML и т. Д.), Но проблема, которую я вижу, заключается в том, что вам нужно получить некоторый объем данных, который соответствует определенному критерию, во многих сценарии использования. В базе данных NoSQL у вас есть только один критерий, который вы можете эффективно искать - ключ. Реляционные базы данных оптимизированы для эффективного поиска любого значения в строке данных.
Таким образом, базы данных NoSQL на самом деле не являются выбором для сохранения данных, которые необходимо искать по их содержимому. Или я что-то не так понял?
Пример:
Вам нужно хранить пользовательские данные для интернет-магазина.
В реляционной базе данных каждый пользователь хранится в виде строки в users
таблице с идентификатором, именем, его страной и т. Д.
В базе данных NoSQL вы должны хранить каждого пользователя с его идентификатором в качестве ключа и всеми его данными (закодированными в JSON и т. Д.) В качестве значения.
Поэтому, если вам нужно получить всех пользователей из определенной страны (по какой-то причине маркетологам нужно что-то о них знать), это легко сделать в реляционной базе данных, но не очень эффективно в базе данных NoSQL, потому что вы должны получить каждого пользователя, проанализировать все данные и отфильтровать.
Я не говорю, что это невозможно , но это становится намного сложнее, и я думаю, что это не так эффективно, если вы хотите искать в данных записей NoSQL.
Вы можете создать ключ для каждой страны, в котором хранятся ключи каждого пользователя, который живет в этой стране, и получить пользователей определенной страны, получив все ключи, которые хранятся в ключе для этой страны. Но я думаю, что эта техника делает сложный набор данных еще более сложным - его сложнее реализовать и он не так эффективен, как запрос к базе данных SQL. Поэтому я думаю, что это не тот способ, который вы бы использовали в производстве. Либо это?
Я не совсем уверен, что я что-то неправильно понял или упустил из виду некоторые концепции или лучшие практики для обработки таких вариантов использования. Может быть, вы могли бы исправить мои заявления и ответить на мои вопросы.