← Назад к вопросам

На что подразделяются нереляционные БД?

1.2 Junior🔥 201 комментариев
#Базы данных (NoSQL)

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

# На что подразделяются нереляционные БД?

Нереляционные (NoSQL) базы данных подразделяются на несколько основных категорий в зависимости от способа хранения и организации данных.

1. Документные БД (Document Stores)

Хранят данные в виде полуструктурированных документов (обычно JSON или BSON). Каждый документ может иметь разную структуру.

Примеры: MongoDB, CouchDB, Firebase

import pymongo

client = pymongo.MongoClient()
db = client["shop"]
users = db["users"]

user = {
    "name": "Alice",
    "email": "alice@example.com",
    "orders": [
        {"id": 1, "product": "Laptop"},
        {"id": 2, "product": "Mouse"}
    ]
}
result = users.insert_one(user)
user = users.find_one({"email": "alice@example.com"})

Преимущества: гибкая схема, близость к объектам, вложенные данные без JOIN'ов.

2. Хранилища ключ-значение (Key-Value Stores)

Самая простая модель: каждому ключу соответствует значение. Работают в памяти.

Примеры: Redis, Memcached, DynamoDB

import redis

r = redis.Redis(host="localhost", port=6379, decode_responses=True)

r.set("user:1:name", "Bob")
name = r.get("user:1:name")

r.setex("session:abc", 3600, '{"user_id": 1}')
r.incr("page_views")
r.rpush("queue:tasks", "task1", "task2")
task = r.lpop("queue:tasks")

Преимущества: экстремальная скорость, простота, встроенные структуры данных (list, set, hash).

3. Поисковые системы (Search Engines)

Оптимизированы для полнотекстового поиска. Инвертированный индекс позволяет быстро искать по содержимому.

Примеры: Elasticsearch, Solr, Meilisearch

from elasticsearch import Elasticsearch

es = Elasticsearch(["http://localhost:9200"])

doc = {
    "title": "Python для начинающих",
    "content": "Подробное руководство",
    "author": "John Doe"
}
es.index(index="articles", id=1, document=doc)

results = es.search(index="articles", query={
    "multi_match": {
        "query": "Python руководство",
        "fields": ["title^2", "content"]
    }
})

for hit in results["hits"]["hits"]:
    print(f"{hit['_source']['title']}")

Преимущества: полнотекстовый поиск, фасетная навигация, ранжирование по релевантности.

4. Граф-ориентированные БД (Graph Databases)

Хранят данные в виде узлов и рёбер. Оптимальны для данных с множественными связями.

Примеры: Neo4j, Amazon Neptune

from neo4j import GraphDatabase

driver = GraphDatabase.driver("bolt://localhost:7687", auth=("neo4j", "password"))

def create_relationships(session):
    session.run("""
        CREATE (alice:Person {name: "Alice", age: 30})
        CREATE (bob:Person {name: "Bob", age: 28})
        CREATE (alice)-[:KNOWS]->(bob)
    """)

def find_friends(session, person_name):
    result = session.run("""
        MATCH (p:Person {name: $name})-[:KNOWS]->()-[:KNOWS]->(fof:Person)
        RETURN DISTINCT fof.name as friend
    """, name=person_name)
    return [record["friend"] for record in result]

with driver.session() as session:
    create_relationships(session)
    friends = find_friends(session, "Alice")

Преимущества: быстрые запросы по связям, рекомендации, анализ социальных сетей.

5. Колонные хранилища (Column-Family Stores)

Данные хранятся по столбцам, оптимизированы для аналитики больших наборов данных.

Примеры: HBase, Cassandra, ClickHouse

from cassandra.cluster import Cluster

cluster = Cluster(["127.0.0.1"])
session = cluster.connect()

session.execute("""
    CREATE TABLE IF NOT EXISTS metrics.server_metrics (
        server_id TEXT,
        timestamp BIGINT,
        cpu_usage FLOAT,
        PRIMARY KEY (server_id, timestamp)
    )
""")

session.execute("""
    INSERT INTO metrics.server_metrics (server_id, timestamp, cpu_usage)
    VALUES (%s, %s, %s)
""", ("server-1", 1699564800, 45.2))

Преимущества: отличная сжимаемость, быстрые аналитические запросы, временные ряды.

Сравнение

ТипИспользованиеПримеры
ДокументныеВеб-приложенияMongoDB, CouchDB
Ключ-значениеКэширование, сессииRedis, Memcached
ПоисковыеПолнотекстовый поискElasticsearch
ГрафСоциальные сетиNeo4j
КолонныеАналитика, временные рядыCassandra

Выбор NoSQL БД зависит от структуры данных и типа запросов.

На что подразделяются нереляционные БД? | PrepBro