Database 在Cassandra中获取分层数据

Database 在Cassandra中获取分层数据,database,data-modeling,cassandra-3.0,Database,Data Modeling,Cassandra 3.0,我有一些数据结构为Country/State/District/PostalCode,作为列存储在Cassandra中名为“LocationData”的表中,邮政编码作为分区键/主键。我有一个前端,在那里我试图获取这些细节,并在一个select标记中显示它们。当用户选择一个国家(动态加载)时,该国家的状态将动态加载到另一个select标记中。当用户选择一个州时,该州的地区将动态加载,并且与邮政编码相同 问题是,当我试图查询数据库中可用的所有不同国家时,比如“从tableName中选择不同的国家”

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

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


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

我正要写一篇评论,但比它长

我认为卡桑德拉做这件事太过分了。您的数据结构几乎与RDBMS+附加缓存层完美匹配。您有关系(外键),需要连接(有时是多级的),并且可以使用
公共表表达式来表示层次数据。几乎所有现代RDBMs都支持这一点。或这些数字对于国家、州、地区等几乎是不变的


我认为您不需要“水平”扩展它,卷几乎是恒定的,如果需要,您可以使用额外的缓存副本来减少负载。您可以使用
列表
散列
将缓存的数据保存在Redis中,以避免定期访问数据库以获取恒定数据。

我正要作为注释编写,但它比它长

我认为卡桑德拉做这件事太过分了。您的数据结构几乎与RDBMS+附加缓存层完美匹配。您有关系(外键),需要连接(有时是多级的),并且可以使用
公共表表达式来表示层次数据。几乎所有现代RDBMs都支持这一点。或这些数字对于国家、州、地区等几乎是不变的


我认为您不需要“水平”扩展它,卷几乎是恒定的,如果需要,您可以使用额外的缓存副本来减少负载。您可以使用
列表
散列
将缓存的数据保存在Redis中,以避免定期访问数据库获取常量数据。

您是对的。但我有另一个表,其中有PostalCode/TimeStamp/Value/ValueType列。Postalcode是分区键,Timestamp是集群键。我获取实时数据并将其插入到这个表中。因为是时间序列,我用的是卡桑德拉。尽管另一个表是RDBMS的最佳候选表,但我不确定将数据保存在两个不同的数据库中是否是一个好主意。因此,我想知道如何更改“LocationData”表的结构,以便以分层方式查询数据库将数据保留在“最佳匹配数据库”中是很有用的,但需要权衡(在我的公司中,我们有9个用于不同目的的不同数据库)。维护多个数据库、成本、开发等@yashYou是对的。但我有另一个表,其中有PostalCode/TimeStamp/Value/ValueType列。Postalcode是分区键,Timestamp是集群键。我获取实时数据并将其插入到这个表中。因为是时间序列,我用的是卡桑德拉。尽管另一个表是RDBMS的最佳候选表,但我不确定将数据保存在两个不同的数据库中是否是一个好主意。因此,我想知道如何更改“LocationData”表的结构,以便以分层方式查询数据库将数据保留在“最佳匹配数据库”中是很有用的,但需要权衡(在我的公司中,我们有9个用于不同目的的不同数据库)。维护多个数据库、成本、开发等@yash