我有一个拥有数百亿记录的巨大表格,我的意思是在这张表中添加一个字段,其中相同的值将为数百万条记录重复。我不知道如何有效地在cassandra中建模。请允许我阐述:如何建模cassandra上多条记录的重复信息
我有一个通用的表:
CREATE TABLE readings (
key int,
key2 int,
time timestamp,
name text,
PRIMARY KEY ((key, key2) time)
)
此表有700.000.000+记录。 我想在此表中创建一个名为source
的字段。该字段指示记录的来源(因为该软件有许多方法可以接收reading
表中的信息)。这个字段的一个可能的值是"XML: path\to\file.xml"
或"Direct import from the X database"
或甚至"Manually added"
,我希望这是一个描述性字段,专门用于在数据库中进行后期维护,我们只想操作来自给定源的记录。
我想运行,我不能现在的疑问:
- 在
readings
表,记录是从给定源得到? - 给定记录的来源是什么?
一个解决方案是为我创建一个表,如:
CREATE TABLE readings_per_source(
source text,
key int,
key2 int,
time timestamp,
PRIMARY KEY (source, key, key2, time)
)
这将允许我执行第一查询,但也意味着我将创建700.000.000+新纪录在我的数据库中有很多信息,这会占用大量不必要的存储空间,因为数以百万计的这些记录具有相同的值source
。
如果这是一个关系型的环境,我会在readings
表和source
表id (PK)
和name
领域创造source_id
场,这将意味着存储有关readings
表的每一行和新表只是一个额外的整数有不同来源的记录数量很多。
我们如何在cassandra中对此进行建模?
是的,我知道这个查询可能会返回很多记录,而这也是一种目的。它可能是一个问题吗?我的意思是用单个查询返回数百万条记录。此外,我曾想过创建某种索引,但不知道如何去做,您的答案会有很大帮助。但有一个问题仍然存在:简单地添加列并以非标准化的方式重复该值,是否会导致过度使用存储? –
此外,我使用python驱动程序,并且我发现驱动程序已经对大量查询的结果进行了分页,是否需要配置与它已有的内容不同的内容? –
“一个问题仍然存在:只需添加列并以非标准化的方式重复该值,是否不会导致过度使用存储? - >理论上是的,在实践中,如果启用了磁盘压缩(默认情况下),它应该有助于节省空间。 – doanduyhai