Следуя совету DataStax «использовать примерно одну таблицу на шаблон запроса» , как упоминалось здесь , я настроил одну и ту же таблицу дважды, но по-разному набрал ключи для оптимизации времени чтения.
-- This table supports queries that filter on specific first_ids and a gt/lt filter on time
CREATE TABLE IF NOT EXISTS table_by_first_Id
(
first_id INT,
time TIMESTAMP,
second_id INT,
value FLOAT,
PRIMARY KEY (first_id, time, second_id)
);
-- Same table, but rearranged to filter on specific second_ids and the same gt/lt time filter
CREATE TABLE IF NOT EXISTS table_by_second_Id
(
second_id INT,
time TIMESTAMP,
first_id INT,
value FLOAT,
PRIMARY KEY (second_id, time, first_id)
);
Затем я создал 2 модели, используя драйвер Python DataStax, по одной для каждой таблицы.
class ModelByFirstId (...)
class ModelBySecondId (...)
Проблема
Кажется, я не могу понять, как чтобы чисто обеспечить атомарность при вставке в одну из таблиц, чтобы также вставить в другую таблицу. Единственное, о чем я могу думать, это
def insert_some_data(...):
ModelByFirstId.create(...)
ModelBySecondId.create(...)
Я смотрю, есть ли альтернативный способ обеспечить, чтобы вставка в одну таблицу отражалась в другой - возможно, в определении модели или таблицы, в чтобы надежно защитить себя от ошибочных вставок только в одну из моделей.
Я также открыт для реструктуризации или переделки моих таблиц, чтобы приспособиться к этому при необходимости.