对于我的申请,我有一个表如下:
create table companies(id uuid, name text, ...., primary key((id)));
现在,对于我的管理面板和后台作业,我需要能够检索所有的公司,并循环通过我的代码中的所有行。
我知道我可以在没有分区(主)键的情况下执行选择查询,但这很糟糕,因为它将接触所有节点,因为每一行都存储在数据中心的随机节点上。
select * from companies;
现在,我可以做的一件事是创建一个伪键,它对于每一行都是相同的,所有行都将存储在同一个分区中,但这也是非常糟糕的,因为表将增长,并可能达到超过1k行。
create table companies(fake_key text, id uuid, name text, ... primary key((fake_key), id));
insert into companies(fake_key, id, name) values ('app', uuid(), 'company_a');
insert into companies(fake_key, id, name) values ('app', uuid(), 'company_b');
我是否应该在MySQL数据库中创建一个表,并在MySQL数据库中创建一个新行,每次我在Cassandra中创建一个新的companies行?
1条答案
按热度按时间lyr7nygr1#
不幸的是,由于您有一个特殊的用例,因此不会有一个通用的解决方案。
如果性能很重要,那么将其存储在一个具有聚集行的分区中。正如您已经指出的,这可能会有问题,因为如果分区无限增长,此解决方案将无法扩展。但是,1-2K行不会太糟糕,因为您实际上只是存储公司名称。
将数据存储在另一个关系数据库中不会有太大好处,因为它只会增加应用程序的复杂性,而且您还需要应对管理另一个基础架构的挑战。干杯!