在Cassandra中,创建一个包含多列的表是否比创建多个表占用更多的空间?

vfhzx4xs  于 2022-11-05  发布在  Cassandra
关注(0)|答案(1)|浏览(132)

我有6个表在我的数据库中,每个由大约12-15列,他们与其ID到main_table的关系。我必须将我的数据库迁移到cassandra,所以我有一个问题,我应该创建一个main_table与组成多列或不同的表,如在我的mysql数据库。
创建多个列将占用更多空间,或者创建多个表将占用更多空间

ilmyapht

ilmyapht1#

你的提问方式是有缺陷的。对于那些只有传统关系数据库背景的DBA来说,将数据视为规范化的表是一个常见的错误。
当您切换到NoSQL时,您正在尝试解决传统RDBMS无法解决的问题。需要进行范式转换,因为您不能仅按原样迁移关系表,否则您将回到起点。
Cassandra中数据建模的主要理念是,您需要为每个应用程序查询设计一个CQL表。这是应用程序查询和CQL表之间的一对一Map。关键点是,您需要从应用程序查询开始,而不是从表开始。
假设您有一个存储用户信息的应用程序,其中包括用户名、电子邮件地址、名字/姓氏、电话号码等。如果您有一个类似“get the email address for username X”的应用程序查询,则意味着您需要一个电子邮件地址表,其模式如下所示:

CREATE TABLE emails_by_username (
    username text,
    email text,
    firstname text,
    lastname text,
    ...
    PRIMARY KEY(username)
)

然后,您可以使用以下语句查询此表:

SELECT email FROM emails_by_username WHERE username = ?

另一个例子是,您有一个应用程序查询,如“获取电子邮件地址为Y的用户的名字和姓氏”。您需要一个按电子邮件分区的用户表:

CREATE TABLE users_by_email (
    email text,
    firstname text,
    lastname text,
    ...
    PRIMARY KEY(email)
)

您可以使用以下语句查询表:

SELECT firstname, lastname FROM users_by_email WHERE email = ?

希望通过这些示例,您可以看到磁盘空间的消耗完全无关紧要。重要的是您设计的表能够针对应用程序查询进行优化。干杯!

相关问题