不提供主键的查询表的最佳方法

时间:2019-07-23 23:22:52

标签: cassandra-3.0 scylla

我正在设计Scylla数据库的数据模型。例如,我创建了一个表intraday_history,其中包含以下字段:

CREATE TABLE intraday_history (id bigint,timestamp_seconds bigint,timestamp timestamp,sec_code text,open float,high float,low float,close float,volume float,trade int, PRIMARY KEY ((id,sec_code),timestamp_seconds,timestamp));

我的id是一个twitter_snowflake生成的64位整数。.我的问题是,如何在不始终提供id的情况下使用WHERE(大多数情况下,我将使用bigint的时间戳)。我在其他表中也遇到了这个问题。因为ID是唯一的,所以我无法查询一批时间戳。

如果让我说出1个节点的一堆表,可以使用cluster1之类的ID,这样当我查询ID时,我只会得到id = cluster1吗?但是它失去了唯一性功能

Allow filtering是这里的一个选项。但是我一直在阅读这是一个坏习惯,尤其是在处理数百万个查询时。

我正在使用ScyllaDB,它是Apache Cassandra的兼容c ++版本。

1 个答案:

答案 0 :(得分:0)

在Cassandra中,您可能已经读过,查询派生表,而不是相反。因此,您希望通过其他过滤器查询的情况将理想地要求您创建另一个Cassandra表。那是最佳方法。过滤器中需要分区键,除非您提供“允许过滤”“开关”,但是不建议使用分区键,因为它会执行DC(可能是群集)范围的搜索,并且您仍然会超时。您可以考虑使用索引或实例化视图,它们基本上是由基表更改填充的cassandra维护表。这样可以省去让应用程序填充多个表的麻烦(Cassandra会为您完成)。我们对物化视图感到很幸运,但是使用这些组件中的任何一个,都可能会产生副作用,就像其他任何Cassandra表一样(不一致,延迟,其他规则等)。我会说需要做一些研究以确定最佳方法,但是提供“允许过滤”可能不是最佳选择(特别是对于大量查询和频繁查询或包含大量数据的表)。如果可以的话,您还可以调查SOLR,具体取决于您要过滤的内容。

希望有帮助。

-吉姆

相关问题