Cassandra:加载 table 列性能的一部分
Cassandra: Loading part of table's columns performance
让我们考虑这两个表...
CREATE TABLE IF NOT EXISTS lp_operations.campaign_changed (
oe text, // owner email
ud timestamp, // updated
PRIMARY KEY((oe))
);
CREATE TABLE IF NOT EXISTS lp_operations.campaign_data (
oe text, // owner email
kp set<text>, // each text in set is serialized object in JSON
ud timestamp, // updated
PRIMARY KEY((oe))
);
如果我们假设行数和包含的 "oe"、"ud" 值相同。是否在 Cassandra 的相同性能水平下跟踪两个 select?
Select select1 = select().all().from("lp_operations", "campaign_changed").where(eq("oe", email)).limit(1);
CampaignChanged obj1 = cas.selectOne(select1, CampaignChanged.class);
Select select2 = select().column("oe").column("ud").from("lp_operations", "campaign_data").where(eq("oe", email)).limit(1);
CampaignData obj2 = cas.selectOne(select2, CampaignData.class);
我想知道第二个 select 是否比第一个复杂。如果没有额外的开销。例如,如果整行(所有列)在 cassandra 内部加载,因此选择了所需的列。
第二个查询的性能可能比第一个慢,但这实际上取决于几个因素:
set
中的条目数 - 不建议在集合类型中存储超过数百个元素;
- 文本条目的大小;
- 您是一次性存储数据,还是定期更新集合中的条目 - 在这种情况下,同一分区的数据可能驻留在需要读取的多个 SSTable 中。
如果你从来不做数据的部分更新,那么你可以使用frozen<set<text>>
- 在这种情况下,set的所有数据将存储在一起并立即读取,避免在多个SSTables中搜索(虽然它可能会在所有 SSTable 中搜索其他字段)。
此外,请注意,如果您连续执行该查询,那么最好不要使用 SchemaBuilder, like you shown, but better to prepare query once and then bind variables into it for execution - 在这种情况下,服务器不会 re-parse CQL 查询每个请求.
让我们考虑这两个表...
CREATE TABLE IF NOT EXISTS lp_operations.campaign_changed (
oe text, // owner email
ud timestamp, // updated
PRIMARY KEY((oe))
);
CREATE TABLE IF NOT EXISTS lp_operations.campaign_data (
oe text, // owner email
kp set<text>, // each text in set is serialized object in JSON
ud timestamp, // updated
PRIMARY KEY((oe))
);
如果我们假设行数和包含的 "oe"、"ud" 值相同。是否在 Cassandra 的相同性能水平下跟踪两个 select?
Select select1 = select().all().from("lp_operations", "campaign_changed").where(eq("oe", email)).limit(1);
CampaignChanged obj1 = cas.selectOne(select1, CampaignChanged.class);
Select select2 = select().column("oe").column("ud").from("lp_operations", "campaign_data").where(eq("oe", email)).limit(1);
CampaignData obj2 = cas.selectOne(select2, CampaignData.class);
我想知道第二个 select 是否比第一个复杂。如果没有额外的开销。例如,如果整行(所有列)在 cassandra 内部加载,因此选择了所需的列。
第二个查询的性能可能比第一个慢,但这实际上取决于几个因素:
set
中的条目数 - 不建议在集合类型中存储超过数百个元素;- 文本条目的大小;
- 您是一次性存储数据,还是定期更新集合中的条目 - 在这种情况下,同一分区的数据可能驻留在需要读取的多个 SSTable 中。
如果你从来不做数据的部分更新,那么你可以使用frozen<set<text>>
- 在这种情况下,set的所有数据将存储在一起并立即读取,避免在多个SSTables中搜索(虽然它可能会在所有 SSTable 中搜索其他字段)。
此外,请注意,如果您连续执行该查询,那么最好不要使用 SchemaBuilder, like you shown, but better to prepare query once and then bind variables into it for execution - 在这种情况下,服务器不会 re-parse CQL 查询每个请求.