Это зависит от того, хорошо ли определены наборы индикаторов и измерений запроса (т. Е. Вам нужно только среднее значение, медиана для каждого «ua», «состояние». Оба набора могут быть довольно длинными, но конечными)
Аддитивные индикаторы могут храниться в столбцах счетчиков (если у вас есть счет и сумма, вы всегда можете рассчитать среднее):
CF[event.ua].metric1_sum += event.metric1;
CF[event.ua].metric1_count++;
CF[event.state].metric1_sum += event.metric1;
CF[event.state].metric1_count++;
....
Чтобы рассчитать медиану и процентили, я бы предложил создать суперколонку с контрколонками. Значения метрики - это имена вложенных столбцов, а число событий - это значения вложенных столбцов:
CF[event.ua].metric1_values[event.metric1]++;
CF[event.state].metric1_values[event.metric1]++;
...
В случае, если количество различных значений метрик будет слишком велико, возможно, было бы возможно округлить значения метрик без серьезной ошибки.
Для других типов индикаторов могут потребоваться другие оптимизации.
И все же, я бы предложил хранить отдельные события в денормализованной форме, аналогично упомянутому JSON. Кассандра очень быстро записывает данные. А наличие необработанных данных позволит вам рассчитать значения истории дополнительных индикаторов, запустив Map / Reduce для полного набора данных.