【问题标题】:What is meaning of first byte of the hash modulo four哈希模四的第一个字节是什么意思
【发布时间】:2015-10-12 19:07:40
【问题描述】:

我正在查看THIS 并且有一个例子

CREATE TABLE groups (
    groupname text,
    username text,
    email text,
    age int,
    hash_prefix int,
    PRIMARY KEY ((groupname, hash_prefix), username)
)

新列 hash_prefix 包含用户名哈希的前缀。 例如,它可能是哈希模四的第一个字节。 这两列与 groupname 一起构成复合分区 钥匙。它现在分散在一个分区上,而不是一组驻留在一个分区上 跨越四个分区。

first byte of the hash modulo four 是什么意思。考虑到给定的表,你能举一个例子说明排序和分页的查询是什么?

【问题讨论】:

  • 我也在关注同一篇文章,迷失在表创建中。我可以知道我们在哪里定义“hash_prefix”值,以便我可以更改模值。

标签: cassandra-2.0 datastax cql3


【解决方案1】:

表示第一个字节除以4的余数。Modulo operation定义为:

在计算中,模运算求一个数除以另一个数后的余数(有时称为模数)。

因此,例如,如果第一个字节的值为 0xF7,则模四为 3。您可能已经将其视为 java、python 和其他语言中的 '%' 运算符。您可以在 python 解释器中验证这一点,即:

>>> 0xF7 % 4

产量 3.

【讨论】:

  • 那么这将如何帮助给定表格进行排序和分页。你能显示相同的查询吗?我的意思是我想select latest 100 user who joined group with pagination size 10
  • 不会的。通过将 hash_prefix 添加到分区键,数据现在可以存储在 4 个不同的分区中,因此可以在集群之间更均匀地分布数据(而不是可能在一个分区上很热)。不幸的是,您现在需要分别对每个 hash_prefix 进行查询,因为它是分区键的一部分。
  • 除非您使用不推荐的 ALLOW FILTERING,否则不要使用单个查询。您必须进行 4 个单独的查询,然后加入您的结果以找到 10 个最新的。
  • 或者您可以按照示例中“group_join_dates”使用的策略将加入日期包含在分区中,并按日期降序查询,直到找到 10 条记录。如果您的行足够宽以进行分区,那么您一天内可能会有超过 10 个注册。
  • 这听起来很合理。
猜你喜欢
  • 1970-01-01
  • 2014-02-24
  • 1970-01-01
  • 2020-03-26
  • 2020-11-16
  • 2016-11-07
  • 2013-04-08
  • 2018-06-27
  • 2012-05-12
相关资源
最近更新 更多