Я работаю над базой данных, в которой будут храниться продукты из нескольких учетных записей.Количество продуктов для данной учетной записи может значительно различаться, и я хочу иметь возможность легко запрашивать продукты для конкретной учетной записи.
На данный момент у меня есть таблица, похожая на эту.
CREATE TABLE key.products (
product_id UUID,
account_id UUID,
sku TEXT,
other_details....,
PRIMARY KEY (account_id, product_id, sku)
);
Эта таблица позволит мне использовать такие запросы довольно легко.
SELECT product_id,sku,other_details FROM key.products WHERE account_id=@@@@;
Но если яполучить несколько учетных записей, которые имеют значительно больше продуктов, чем другие учетные записи, что компенсирует разделы в Cassandra;и у меня больше не будет хорошего и равномерного распределения данных между моими узлами.Данные по-прежнему будет относительно легко запрашивать по account_id, но это нормально?В какой момент я буду стрелять себе в ногу, чтобы не разделять что-то еще?И как я могу изменить свой подход, чтобы по-прежнему эффективно запрашивать продукты в учетной записи и минимизировать перекос данных?
Будет ли более эффективным разделение по product_id и наличие альтернативной таблицы для запроса по учетной записи?Что-то вроде.
CREATE TABLE key.products (
product_id UUID,
sku TEXT,
other_details....,
PRIMARY KEY (product_id, sku)
);
CREATE TABLE key.products_by_account (
account_id UUID,
product_id UUID,
PRIMARY KEY (account_id, product_id)
);
Данные будут по-прежнему искажены в таблице products_by_account, но размер данных будет намного меньше, поскольку он не содержит все данные в основной таблице продуктов.Это лучше?