建议在多个地方根据我们要对它们执行的查询来设计Cassandra表。他们在this article by DataScale中声明:
事实是,在Cassandra中拥有很多具有相似数据的相似表是一件好事。将主键限制在您要搜索的确切位置。如果计划使用类似但不同的条件搜索数据,则将其作为单独的表。相同的数据以不同的方式存储没有缺点。重复数据是您在Cassandra中的朋友。
[...]
如果需要将相同的数据存储在14个不同的表中,则将其写出14次。没有多重写入的障碍。
我已经理解了,现在我的问题是:只要我有一个现有的表,说
CREATE TABLE invoices (
id_invoice int PRIMARY KEY,
year int,
id_client int,
type_invoice text
)
但是我想按年份查询并键入,所以我想要类似
CREATE TABLE invoices_yr (
id_invoice int,
year int,
id_client int,
type_invoice text,
PRIMARY KEY (type_invoice, year)
)
将
id_invoice
作为分区键,并将year
作为群集键,将数据从一个表复制到另一个表以在以后执行优化查询的首选方法是什么?我的Cassandra版本:
user@cqlsh> show version;
[cqlsh 5.0.1 | Cassandra 3.5.0 | CQL spec 3.4.0 | Native protocol v4]
最佳答案
回应关于COPY命令的说法,这是解决此类问题的好方法。
但是,我将不同意关于批量加载程序的说法,因为它很难使用。具体来说,因为您需要在每个节点上运行它(而COPY只需要在单个节点上运行)。
为了帮助COPY缩放更大的数据集,可以使用PAGETIMEOUT
和PAGESIZE
参数。
COPY invoices(id_invoice, year, id_client, type_invoice)
TO 'invoices.csv' WITH PAGETIMEOUT=40 AND PAGESIZE=20;
适当地使用这些参数,之前我已使用COPY成功导出/导入3.7亿行。
有关更多信息,请查看标题为New options and better performance in cqlsh copy的文章。
关于cassandra - 如何将数据从Cassandra表复制到另一个结构以获得更好的性能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41448374/