我希望得到一些关于如何最好地将典型的关系模式转换为Cassandra的建议。关系模式是:
CREATE TABLE IF NOT EXISTS sales (
sale_id bigint(20) UNSIGNED NOT NULL
AUTO_INCREMENT,
create_time timestamp NOT NULL
DEFAULT ‘0000-00-00 00:00:00’,
account bigint(20) UNSIGNED NOT NULL DEFAULT ‘0’,
store char(25) NOT NULL DEFAULT ‘’,
product char(25) NOT NULL DEFAULT ‘’,
coupon char(18) NOT NULL DEFAULT ‘’,
amount decimal(8,2) NOT NULL,
PRIMARY KEY (sale_id),
KEY create_time (create_time) )
我提出的Cassandra架构是:
CREATE TABLE sales (
sale_id uuid,
create_time timestamp,
account text,
store int,
coupon text,
product text,
amount int,
PRIMARY KEY ((create_time, store), coupon))
(在我需要查询的非键列上创建索引)
典型的查询是按产品/优惠券/帐户/商店在一段时间内按产品销售。
这有意义吗?
有关如何改善合理读/写性能的任何建议?
提前感谢任何建议。
答案 0 :(得分:0)
不,您希望对Cassandra架构进行建模,以回答每个问题以获得良好的性能。假设您希望按产品查找所有(最近)销售额,并希望创建主键
(productID, created_time
)
如果您的应用程序通常想要搜索最近销售的产品,那么您希望按照说明订购群集因子(在您的示例中为created_time
)。
同样,您可能会在多个列系列中复制销售数据。在分布式环境中进行建模时,不要害怕复制数据。您希望de-normalize
并期待从分区本身获得结果。
希望这有帮助。