Я настраиваю новую услугу , которая управляет некоторыми платежными транзакциями .
У меня четыре варианта использования :
- Чтение последних 10 транзакций.
- Прочитать последнюю транзакцию дня.
- Считать последние 10 транзакций по номеру карты
- Чтение последних 10 транзакций, выполненных с определенным устройством (например, идентификатор устройства «device01»).
Для достижения этой цели я создал три таблицы:
CREATE TABLE test.transaction_by_device (
uid uuid ,
device text,
time timestamp,
amount double,
currency text,
cardNumber text,
PRIMARY KEY ((device),time)
) WITH CLUSTERING ORDER BY (time DESC);
CREATE TABLE test.transaction_by_cardNumber (
uid uuid ,
device text,
time timestamp,
amount double,
currency text,
cardNumber text,
PRIMARY KEY ((cardNumber),time)
) WITH CLUSTERING ORDER BY (time DESC);
CREATE TABLE test.transaction_by_time (
uid uuid ,
device text,
year text,
month text,
day text,
time timestamp,
amount double,
currency text,
cardNumber text,
PRIMARY KEY ((year,month,day),time)
) WITH CLUSTERING ORDER BY (time DESC);
Я использовал следующие запросы:
const select_last_10_transactions_by_time =
'SELECT * FROM test.transaction_by_time LIMIT 10';
const select_last_10_transactions_of_the_day_by_time =
"SELECT * FROM test.transaction_by_time WHERE YEAR='2019' AND MONTH='2' AND DAY='22'";
const select_last_10_transactions_by_cardNumber =
"SELECT * FROM test.transaction_by_cardNumber where cardNumber='4242800217402773' LIMIT 10";
const select_last_10_transactions_by_device =
"SELECT * FROM test.transaction_by_device where device='device01' ";
Все работает очень хорошо, и время выбора для 1 миллиона строк составляет около 0,5 с
Проблема заключается в том, что каждые данные дублируются в каждой таблице. Что я делаю не так с моделированием данных в этих случаях использования?
Есть ли лучший способ оптимизировать эти запросы / таблицы?
Я читал кое-что о материализованном представлении , но я также читал, что он не готов к производству.
Источник ссылки
Спасибо.