У меня есть таблица, в которой хранятся системные действия.Модель данных имеет следующую структуру
CREATE TABLE activities {
id UUID,
json text,
activity_date Date,
activity_time Timestamp,
activity_type Text,
Primary Key(activity_date, activity_type, activity_time)
}
Потенциальные варианты использования, которые будет обслуживать приведенная выше таблица:
- Найти события, которые были сгенерированы для данной даты
- Найти события, которые были сгенерированы для данной даты и тип_операции
- Найти события, которые были сгенерированы для данной даты и типа_действие в течение заданного периода времени.
ВышеМодель данных уязвима для ошибки, когда если в одну и ту же миллисекунду вставляются 2 действия с одинаковым типом активности, одно из них может переопределить другое.Это потому, что casssandra гарантирует уникальность метки времени с точностью до миллисекунды.
Другая таблица в базе данных имела похожую структуру, и мы видели записи, перекрывающие друг друга дважды.Это происходило 2 раза за 2 года.Хотя вероятность мала, но все же возможно испортить целостность данных.
Чтобы обойти эту проблему, мы могли бы потенциально добавить предложение IF NOT EXISTS
в запрос на вставку, что приведет к сбою 1 вставки, в то время как другой будет успешным, если такой случай когда-либо возникнет.
Однако я хотел бы понять, что еще здесь можно сделать?
Что еще может предложить Кассандра, чего нам не хватает?
Это случай плохо спроектированной модели данных?Но, учитывая запросы, у нас больше не было столбцов для добавления к ключам.