Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Filter 过滤器和范围查询的Cassandra建模_Filter_Cassandra_Modeling - Fatal编程技术网

Filter 过滤器和范围查询的Cassandra建模

Filter 过滤器和范围查询的Cassandra建模,filter,cassandra,modeling,Filter,Cassandra,Modeling,我正在尝试建立一个用户数据库模型。这些用户有各种重要统计数据:年龄、性别、身高、体重、头发颜色等 我希望能够编写如下查询: 让所有身高5英尺1英寸至6英尺0英寸、红头发、体重超过100磅的用户 或 获取所有年龄在31-37岁、头发乌黑、身高6英尺0英寸的男性用户 为了进行这些查询,我如何对数据进行建模?假设这个数据库将容纳数十亿用户。我想不出一种方法不需要我发出许多请求或将数据聚集在很少的节点上 编辑: 再多了解一点背景,我们假设这个想法的问题是建立一个约会网站。该网站应该允许用户根据上述标准(

我正在尝试建立一个用户数据库模型。这些用户有各种重要统计数据:年龄、性别、身高、体重、头发颜色等

我希望能够编写如下查询:

让所有身高5英尺1英寸至6英尺0英寸、红头发、体重超过100磅的用户

获取所有年龄在31-37岁、头发乌黑、身高6英尺0英寸的男性用户

为了进行这些查询,我如何对数据进行建模?假设这个数据库将容纳数十亿用户。我想不出一种方法不需要我发出许多请求或将数据聚集在很少的节点上

编辑:


再多了解一点背景,我们假设这个想法的问题是建立一个约会网站。该网站应该允许用户根据上述标准(年龄、性别、身高、体重、头发等)筛选人。这些筛选器是可选的,您可以拥有任意数量的筛选器。此网站有20亿用户。仅通过数据建模就可以实现这一点吗

如果我理解正确的话
如果我有20亿用户,并且我创建了第一个答案中提到的两个表(假设性选择为男性和女性,头发颜色为金色、棕色和红色),对于第一个表,如果每个人都有金发,我将在一个节点上放置最多20亿条记录。最佳情况下,在三个节点上放置2/3亿条记录。在第二种情况下,我将在每个节点上放置20/5亿条记录,在最佳情况下,在相同的最坏情况下。我错了吗?分区键不应该比这更独特吗?

因此,如果您试图在Cassandra内部对数据进行建模,那么一般规则是,您需要为每个查询创建一个表。对于您可以根据哪些内容筛选查询,也存在很大的限制。如果您想了解其中的一些限制,我建议您看看这篇文章:

或者我在这里的长篇回答:

以上所有内容仅适用于运行事先已知的固定查询的情况。相反,如果您希望对数据执行某种分析分析(听起来可能是这样的)相比之下,我会将Spark与Cassandra结合使用。这将为您提供一个对数据进行内存处理的快速工具。如果您考虑使用Datastax(社区或企业),则Spark还具有一个连接器,可以方便地从Cassandra读取和写入数据

用附加信息编辑 根据“让所有身高5英尺1英寸到6英尺0英寸、红头发、体重超过100磅的用户”的查询,您需要构建一个包含以下内容的表格:

按发型、颜色、重量、高度创建表格用户(
彩色文本,
重量浮动,
高度单位为int,
用户varchar,
主键((头发颜色)、体重、身高(英寸)
);

然后,您可以通过以下方式进行查询:
SELECT*from user\u by\u hairolor\u weight\u height,其中hairolor='red'和weight>100,height\u in>61,height\u in,因此,如果您试图在Cassandra中对数据建模,那么一般规则是,您需要为每个查询创建一个表。对于您可以根据哪些内容筛选查询,也有很大的限制。如果您想了解我建议你看看这篇文章的一些限制:

或者我在这里的长篇回答:

以上所有内容仅适用于运行事先已知的固定查询的情况。相反,如果您希望对数据执行某种分析分析(听起来可能是这样的)相比之下,我会将Spark与Cassandra结合使用。这将为您提供一个对数据进行内存处理的快速工具。如果您考虑使用Datastax(社区或企业),则Spark还具有一个连接器,可以方便地从Cassandra读取和写入数据

用附加信息编辑 根据“让所有身高5英尺1英寸到6英尺0英寸、红头发、体重超过100磅的用户”的查询,您需要构建一个包含以下内容的表格:

按发型、颜色、重量、高度创建表格用户(
彩色文本,
重量浮动,
高度单位为int,
用户varchar,
主键((头发颜色)、体重、身高(英寸)
);

然后,您可以通过以下方式进行查询:
从用户中选择*按发型、体重、身高,其中发型为红色,体重>100,身高>61,身高我的建议是:

1) 使用适当的分区键保留主表,以便百万条记录分布在集群中,这里不要使用任何会跨越2gb等行键限制的集群列

2) 根据查询模式的不同,您最好尽可能多地创建其他表(如索引),以便在其中保存反向索引数据。因为写是便宜的

3) 使用多个查询获取所需内容

4) 最后一个选项是,使用DSE solr搜索功能。

我的建议是:

1) 使用适当的分区键保留主表,以便百万条记录分布在集群中,这里不要使用任何会跨越2gb等行键限制的集群列

2) 根据查询模式的不同,您最好尽可能多地创建其他表(如索引),以便在其中保存反向索引数据。因为写是便宜的

3) 使用多个查询获取所需内容


4) 最后一个选项是,使用DSE solr搜索功能。

只是重申对话的结束:

“您的理解是正确的,您正确地指出分区键应该更独特。每个分区的最大大小为2GB,但实际限制较低。实际上,您可能希望将数据划分为比上表更小的块。考虑到示例中查询的特殊性质,我认为单靠数据建模是无法做到这一点的。我建议在表上使用Solr索引。这将使您拥有强大的搜索功能。如果你使用Datastax,你甚至