gpt4 book ai didi

cassandra - 如何有效地相交 2 个或更多 cassandra 切片?

转载 作者:行者123 更新时间:2023-12-03 08:07:06 24 4
gpt4 key购买 nike

我正在使用 Posts 和 TaggedPosts 列族,如 this example 中所示。

我希望能够找到标签为“A”、“B”和“C”的帖子(例如)

问题是我必须使用键 A 完整读取 TaggedPosts,而不是像示例中所示那样只获取前 10 个结果,然后与所有具有键 B 的 TaggedPosts 相交,以免错过任何一个,依此类推

效率极低,您建议这样做的顺序是什么?

我正在考虑更改 TaggedPosts 结构:并将 Posts id 作为 Rows 键和

create colmun familty TaggedPosts with ... and column_metadata=[
{column_name: tag1, ..., index_type: KEYS},
{column_name: tag2, ..., index_type: KEYS},
{column_name: tag3, ..., index_type: KEYS},

并做:

get TaggedPosts where tag1=A and tag2=B and tag3=C;

但不确定它会比交叉/过滤客户端更有效

最佳答案

我认为您的案例的理想模式取决于您需要多久执行一次交叉查询,以及您是否需要能够为任意一对标签或任意一组 N 个标签,或者您是否只需要对某些有限的标签执行此操作。

如果像我怀疑的那样,您希望能够查询与任意一组标签匹配的帖子,那么可能没有比拥有这样的模式 (cql3) 更好的解决方案了:

CREATE COLUMNFAMILY TaggedPosts (
tag text,
post uuid,
blog_rowentries_rowkey text,
PRIMARY KEY (tag, post)
) WITH COMPACT STORAGE;

-- (note that this is the same actual data layout used in the "wtf is a supercolumn" article)

然后像这样查询“posts with A”、“posts with B”等:

SELECT * FROM TaggedPosts WHERE tag = 'A' LIMIT 100;
SELECT * FROM TaggedPosts WHERE tag = 'B' LIMIT 100;

..所以他们被单独查询,然后你在客户端合并结果。 100 的限制可能不适合您的数据;理想值取决于您的标签重叠的可能性。它并不能保证你得到你想要的所有结果,显然,它只是一个批量大小。如果您没有找到足够的帖子匹配所有标签,您可以从具有最低 uuid 时间的标签中查询更多批处理,直到找到为止。

在使用 Solr 索引的效率和易于编码方面,您可以做得比这更好,因为这更像是一个全文搜索类型的问题,但您需要 Datastax Enterprise 或其他一些自己集成 Solr 的方法。 (免责声明:我为 Datastax 工作。)

不过,关于这个主题,我能给出的最佳建议是不要使用超列。

关于cassandra - 如何有效地相交 2 个或更多 cassandra 切片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10512484/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com