首页 > 解决方案 > 在 Cassandra 中获取分层数据

问题描述

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

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

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

标签: databasedata-modelingcassandra-3.0

解决方案


我正要写评论,但它比它长。

我认为 Cassandra 对此太过分了。您的数据结构几乎与 RDBMS + 附加缓存层完美匹配。您有关系(外键),需要连接(有时是多级),您可以Common Table Expressions用于分层数据。几乎每个现代 RDBM 都支持这一点。postgresqlmysql。对于国家、州、地区等,这些数字几乎是恒定的。

我认为您不需要“水平”扩展它,体积几乎是恒定的,如果需要,您可以通过额外的缓存副本来减少负载。lists您可以使用或hashes不定期访问数据库以获取恒定数据,将缓存数据保留在 Redis 中。


推荐阅读