在Cassandra中提取分层数据

vdzxcuhz  于 2022-11-05  发布在  Cassandra
关注(0)|答案(1)|浏览(198)

我有一些数据结构为国家/州/地区/邮政编码存储在Cassandra中名为“LocationData”的表中的列中,邮政编码作为分区键/主键。我有一个前端,我试图在其中获取这些详细信息,并在选择标记中显示它们。当用户选择一个国家时(动态加载),则该国家/地区的州将被动态加载到另一个选择标签中。当用户选择一个州时,则将动态加载该州的行政区,邮政编码也是如此。
问题是当我试图查询数据库中所有不同的国家(如"SELECT DISTINCT country FROM tableName")时,它显示了一个错误,因为DISTINCT关键字只能在分区键上使用。因此,我必须使用"SELECT country FROM tableName",它将给予数千行,因为国家列值对于许多邮政编码都是相同的。然后,我从查询中获取结果集,并通过编程获得所有不同的国家。类似地,当用户选择一个国家时,我使用SELECT state FROM tableName where country=" SomeCountry"来获取该国家的所有州,这也给出了需要被过滤以获得所有不同州的重复条目,这是非常低效的,因为每当用户选择不同的国家/州/地区等时,我必须搜索数千行以获得不同的值。
我应该如何更改表的结构,以便能够以这种分层方式查询数据库?

dl5txlt9

dl5txlt91#

我正准备写评论,但它比它长。
我认为Cassandra在这方面做得有点过头了。你的数据结构几乎完全匹配RDBMS +额外的缓存层。你有关系(外键),需要连接(有时是多级的),你可以使用Common Table Expressions来表示层次数据。几乎所有现代的RDBMS都支持postgresqlmysql。这些数字对于国家、州、地区等几乎是恒定的。
我不认为你需要“水平”扩展它,它的容量几乎是恒定的,如果需要的话,你可以通过额外的缓存副本来减少负载。你可以使用listshashes在Redis中保存缓存数据,这样就不会因为恒定的数据而定期访问数据库。

相关问题