Ответ
Да, я активно работал с несколькими типами NoSQL баз данных, выбирая подходящий инструмент в зависимости от задачи.
-
MongoDB (документо-ориентированная БД):
- Задачи: Хранение данных с гибкой схемой, таких как профили пользователей, каталоги товаров, логи. Отлично подходит, когда структура данных может меняться.
- Go-драйверы: Работал с официальным
mongo-go-driver
. Также знаком с его предшественникомmgo
, который сейчас считается устаревшим. -
Пример (с
mongo-go-driver
):// Установка соединения client, err := mongo.Connect(ctx, options.Client().ApplyURI("mongodb://localhost:27017")) if err != nil { log.Fatal(err) } collection := client.Database("webapp").Collection("users") // Вставка документа user := bson.D{{Key:"name", Value:"Alice"}, {Key:"email", Value:"alice@example.com"}} _, err = collection.InsertOne(ctx, user) // Поиск документа var result bson.M err = collection.FindOne(ctx, bson.M{"name": "Alice"}).Decode(&result)
-
Redis (in-memory key-value хранилище):
- Задачи: Высокопроизводительное кэширование данных (например, сессий, результатов тяжелых запросов к основной БД), реализация Pub/Sub для обмена сообщениями между сервисами, rate limiting.
- Go-драйверы: Использовал
go-redis
. -
Пример:
// Создание клиента rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", }) // Установка значения с временем жизни 1 час err := rdb.Set(ctx, "user:1:session", "session_token_string", time.Hour).Err() // Получение значения session, err := rdb.Get(ctx, "user:1:session").Result()
-
Cassandra (колоночная БД):
- Задачи: Использовал в проектах, где требовалась высокая доступность и масштабируемость на запись, например, для хранения временных рядов (time-series data) или аналитических событий.
- Go-драйверы: Работал с
gocql
.