Всем привет, я понимаю, что вопрос с моделью данных довольно специфичен и чтобы правильно ответить на него, нужно глубоко погрузится в задачу, но я все же постараюсь описать нашу задачу.
Сейчас мы работаем в MongoDB, поэтому возможны какие то отсылки.
У нас структуре проекта есть тенанты - это изолированная единица агрегации. В ней есть большое кол-во пользователей (до 2 миллионов). Каждый пользователь может взаимодействовать внутри тенанта с каким то количеством "ботов" по сути это набор скриптов в виде шагов бота. Каждый шаг это по сути переменная, мы фиксируем когда он пройдет, кроме времени в переменную могут быть записаны любые другие данные. Все усложняется тем, что каждый бот это непредсказуемое сочетание шагов и переменных. То есть боты могут быть абсолютно разными в рамках тенанта. И нам надо делать выборки по статусам и состояниям. На пользовательском уровне это что то на подобии фильтров. Чтобы например отсортировать всех клиентов прошедших бота 1 и бота два и остановившихся на боте 3 на шаге 5 со значением перемененной Возраст => 35. В случае с SQL придется растаскивать сущности по таблицам и потом при запросах их джойнить, что неприемлемо медленно. В случае с Монгой все решается индексами, но в структуре Json клиента появляется огромная портянка истории, котрорую надо как то обслуживать.
В случае с касссандрой (я с ней почти незнаком) мы должны иметь одну таблицу на тенант для фиксации вышеуказанных статусов и значений. Скажем в строках будут пользователи, а столбцы будут представлять из себя структуру "бота". Если в боте 100 шагов и 50 переменных, а в другом боте 200 шагов и 500 ременных то на одного и того же пользователя мы получим 2 строки в одной будет 150 столбцов а в другой 700, при этом ключ будет состоять из ID пользователя и ID бота? и в такой таблице всегда можно отсортировать строки по любому из столбцов, примерно так как это делается в фильтрах задач в Jira. https://www.awesomescreenshot.com/video/3490931?key=1c0eb6611d1e98baeab7e419f5eb627d
Или же если ключ это просто ИД пользователя, то в строку к боту добавлять супер столбцы, структура каждого представляла бы структуру шагов и сущностей бота?
Поругайте? возможно я вообще неправильно понял концепцию кассандры.