TGViewer
C# Short Posts 🔞 C# Short Posts 🔞 @dimasshortposts · 306 subscribers
Post #266 549
⚔️ Импакт от Геншина: Часть 3

Еще одна вещица, про которую хочу рассказать. Это про то что я наконец пощупал на этом проекте монгу.

Надеюсь получится донести эту мысль, но мне она кажется крутой в плане того, как это можно встроить в свой вижен по архитектуре систем.

Представьте себе такой домен, в котором:

1️⃣ Логика и хранимые данные часто меняются – добавляются новые таблицы, в самих структурах могут добавляться новые поля.

2️⃣ К примеру это какие-то временные акции, конкурсы итп.

3️⃣ Хранить такие данные нужно ограниченное время (год-два максимум, но может и больше).

А еще данные по каждому пользователю слабосвязанные и вам не нужны селекты через несколько таблиц

В общем, если это делать на реляционных базах данных то это будет чуть неудобно (ну может даже пиздец как неудобно), ибо миграции, и вот это все. А вот на монге это оказывается можно довольно удобно замутить!

У нас это реализовано вот как:

🏓 Есть огромная таблица OperationalData. Она хранит в себе вот такой дженериковый тип данных:


public class OperationalData<T>
{
string ShardKey {get; set;}
T Payload {get; set;}
int LifeTime {get; set;}
}

public class PromotionStatus
{
string UserName {get; set;}
Promotion CurrentPromotionType {get; set;}
DateTime NextPromotion {get; set;}
}

public class Discount
{
Guid Id {get; set;}
DateTime AvailableFrom {get; set;}
DateTime AvailableTo {get; set;}
}


И вот в такой приятной хранилке ты можешь делать вот такие штуки:


var userPromotionStatus = db.Collection.Find(x => x.ShardKey == $"PromotionStatus_{UserId}").ToPromotionStatus();

var userDiscount = db.Collection.Find(x => x.ShardKey == $"Discount_{UserId}").ToDiscount();


➕ Если вам нужно добавить новые данные, то никаких проблем, просто добавляете и пишете новые данные! Находтся такой объект супер-быстро. По одному шард-кею вы можете хранить и не только одну запись.

➕ Если нужно добавить новое поле, то просто добавляете его в модель и маппинг. На этом все. Никаких тебе миграций и болей с переписыванием запросов.

➖ Но есть минус, что делать селекты таких данных между пользователями вот так невозможно.

Я это очень удобно заюзал. Правда мне вот это как раз стрельнуло в ногу чутка. 🍌
  • 🔥 3
  • ❤‍🔥 2
  • 👍 1
More from @dimasshortposts
  1. Sep 30, 2026🛤 Путь до Tier1: от чего он зависит В прошлый раз мы гоняли hello world в цикле и увидели…
  2. Sep 26, 2026🧵 Тредик для вопросов по докладу про MAF на дотнексте В докладе многие подробности опусти…
  3. Sep 23, 2026Даже самым хардкорным ребятам надо отдыхать, так что отдыхаем, мои чюваки 🕺 🧑‍💻dp🥁 #he…
  4. Sep 16, 2026🎯 Instrumented Tier0: профилирование кода В прошлый раз мы разобрали два уровня компиляци…
  5. Sep 15, 2026🔜 Готовлюсь к DOTNEXT 2026 В прошлом году за две недели до выступления я зачитывал свой д…
  6. Sep 9, 2026C# Short Posts 🔞 pinned «🐸 О чём этот канал? Кажется, я уже достаточно давно веду этот к…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →