在Cassandra中获取分层数据

问题描述 投票:0回答:1

我有一些结构化为Country / State / District / PostalCode的数据,它们存储为Cassandra中名为“ LocationData”的表中的列,并以邮政编码作为分区键/主键。我有一个前端,尝试在其中获取这些详细信息并在选择标记中显示它们。当用户选择一个国家(动态加载)时,该国家的州将动态加载到另一个选择标签中。当用户选择一个州时,该州的地区将被动态加载,并且与邮政编码相同。

问题是,当我尝试查询数据库中所有可用的不同国家(例如"SELECT DISTINCT country FROM tableName")时,由于DISTINCT关键字只能在分区键上使用,因此会显示错误。因此,我必须使用"SELECT country FROM tableName",因为很多邮政编码的国家/地区列值都相同,所以它将提供数千行。然后,我从查询中获取结果集,并以编程方式获取所有不同的国家/地区。同样,当用户选择一个国家/地区时,我会使用SELECT state FROM tableName where country=" SomeCountry"提取该国家/地区的所有州,这还会提供重复的条目,需要对其进行过滤以获取所有不同的州,这效率非常低下,因为我必须搜索数千行以获取不同的州用户每次选择其他国家/地区/地区等时的值。

我应该如何更改表的结构,以便可以这种分层方式查询数据库?

database data-modeling cassandra-3.0
1个回答
0
投票

我本来打算写评论,但比它更长。

我认为卡桑德拉对此过于矫kill过正。您的数据结构几乎适合RDBMS +附加的缓存层。您有关系(外键),需要连接(有时是多层),并且可以使用Common Table Expressions表示层次结构数据。几乎所有现代RDBM都支持这一点。 postgresqlmysql。这些数字对于国家,州,地区等几乎是恒定的。

我认为您不需要“水平”缩放它,该数量几乎是恒定的,如果需要,您可以使用其他缓存副本来减少负载。您可以使用listshashes将缓存的数据保留在Redis中,以便不定期访问数据库以获取恒定数据。

© www.soinside.com 2019 - 2024. All rights reserved.