NoSQL (Не только SQL)

NoSQL, meaning 'Not Only SQL,' refers to a broad class of database management systems that differ from traditional relational databases by not primarily using t...

NoSQL ('Not Only SQL') базы данных представляют собой разнообразную категорию систем управления базами данных, которые отличаются от традиционных реляционных (SQL) баз данных своими моделями данных и механизмами запросов. Они были разработаны для решения проблем реляционных баз данных при работе с большими объемами быстро меняющихся, неструктурированных или полуструктурированных данных, а также для обеспечения большей масштабируемости и гибкости. Распространенные NoSQL модели данных включают key-value stores (например, Redis, DynamoDB), document databases (например, MongoDB, Couchbase), column-family stores (например, Cassandra, HBase) и graph databases (например, Neo4j, Amazon Neptune). Key-value stores предлагают простое, высокопроизводительное извлечение данных на основе уникального ключа. Document databases хранят данные в гибких, похожих на JSON документах, что позволяет изменять схему. Column-family stores оптимизированы для чтения и записи больших наборов данных, организуя данные по столбцам, а не по строкам. Graph databases отлично подходят для представления и запроса сложных взаимосвязей между сущностями. NoSQL базы данных часто отдают приоритет доступности и устойчивости к разделению (partition tolerance) над строгой согласованностью (согласно CAP theorem), предлагая настраиваемые уровни согласованности. Они обычно масштабируются горизонтально путем добавления большего количества стандартных серверов, в отличие от вертикального масштабирования, часто требуемого для реляционных баз данных. Компромиссы включают отсутствие стандартизированных языков запросов для всех типов, потенциальную избыточность данных и трудности при выполнении сложных соединений (joins) или транзакций, которые являются стандартными в SQL.

        graph LR
  Center["NoSQL (Не только SQL)"]:::main
  Pre_data_structures["data-structures"]:::pre --> Center
  click Pre_data_structures "/terms/data-structures"
  Pre_distributed_systems["distributed-systems"]:::pre --> Center
  click Pre_distributed_systems "/terms/distributed-systems"
  Rel_relational_databases["relational-databases"]:::related -.-> Center
  click Rel_relational_databases "/terms/relational-databases"
  Rel_big_data["big-data"]:::related -.-> Center
  click Rel_big_data "/terms/big-data"
  Rel_vector_database["vector-database"]:::related -.-> Center
  click Rel_vector_database "/terms/vector-database"
  classDef main fill:#7c3aed,stroke:#8b5cf6,stroke-width:2px,color:white,font-weight:bold,rx:5,ry:5;
  classDef pre fill:#0f172a,stroke:#3b82f6,color:#94a3b8,rx:5,ry:5;
  classDef child fill:#0f172a,stroke:#10b981,color:#94a3b8,rx:5,ry:5;
  classDef related fill:#0f172a,stroke:#8b5cf6,stroke-dasharray: 5 5,color:#94a3b8,rx:5,ry:5;
  linkStyle default stroke:#4b5563,stroke-width:2px;

      

🧒 Простыми словами

NoSQL базы данных похожи на разные виды ящиков для хранения компьютерной информации. Вместо одного способа организации всего, как в картотеке ([SQL](/ru/terms/sql)), вы можете использовать специальные ящики для разных нужд, например, большой контейнер для множества похожих предметов или специальную папку для связанных заметок.

🤓 Expert Deep Dive

Ключевым для NoSQL является теорема CAP, которая утверждает, что в распределенной системе можно обеспечить только две из трех характеристик: согласованность, доступность или устойчивость к разделению. Большинство NoSQL систем выбирают доступность (Availability), что делает их идеальными для систем, которые никогда не должны 'падать'.

🔗 Связанные термины

Предварительные знания:

📚 Источники