0

我正在设计我们的 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 个节点说一堆表,我会使用这样的 ID,cluster1这样当我查询 id 时,我只会 id=cluster1 吗?但它失去了唯一性特征

Allow filtering在这里作为一个选项。但我一直读到这是一种不好的做法,尤其是在处理数百万个查询时。

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

4

1 回答 1

1

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

希望有帮助。

-吉姆

于 2019-07-24T14:21:37.557 回答