Я новичок в Cassandra, и я хочу провести мозговой штурм с сохранением временных рядов взвешенных графиков в Cassandra, где вес ребер увеличивается каждый раз, но также обновляется как функция времени. Например,
w_ij(t+1) = w_ij(t)*exp(-dt/tau) + 1
Мой первый снимок включает две таблицы CQL v3:
Сначала я создаю ключ раздела, объединяя идентификатор графа и два узла, инцидентных на конкретном ребре, например Г-В1-В2. Я делаю это для того, чтобы иметь возможность использовать директиву «ORDER BY» для второго компонента составных ключей, описанного ниже, который является временной меткой типа. Назовите эту строку EID для "edge id".
TABLE 1 - a time series of edge updates - PRIMARY KEY: EID, time, weight TABLE 2 - values of "last update time" and "last weight" - PRIMARY KEY: EID - COLUMNS: time, weight
После каждого тика я извлекаю и обновляю значения времени и веса, хранящиеся в ТАБЛИЦЕ 2. Я использую эти значения для вычисления дельты времени и нового веса. Затем я вставляю эти значения в ТАБЛИЦУ 1.
Есть ли в этой стратегии ужасные недостатки? Как следует это сделать? Я уже знаю, что процедура обновления ТАБЛИЦЫ 2 не идемпотентна и может привести к несогласованности, но пока я могу с этим согласиться.
ИЗМЕНИТЬ. Я мог бы объединить две таблицы в одну таблицу временных рядов.