database - 在 Cassandra 中获取分层数据
问题描述
我有一些结构为 Country/State/District/PostalCode 的数据存储为 Cassandra 中名为“LocationData”的表中的列,邮政编码作为分区键/主键。我有一个前端,我正在尝试获取这些详细信息并将它们显示在选择标签中。当用户选择一个国家(动态加载)时,该国家的状态将被动态加载到另一个选择标签中。当用户选择一个州时,该州的地区将被动态加载,并且与邮政编码相同。
问题是,当我尝试查询数据库中所有可用的不同国家/地区时"SELECT DISTINCT country FROM tableName"
,它会显示错误,因为 DISTINCT 关键字只能用于分区键。所以我必须使用"SELECT country FROM tableName"
它将给出数千行,因为许多邮政编码的国家列值是相同的。然后我从查询中获取结果集并以编程方式获取所有不同的国家。同样,当用户选择一个国家/地区时,我会使用该国家/地区的所有州来获取该国家/地区的所有州,SELECT state FROM tableName where country=" SomeCountry"
这还会提供需要过滤以获取所有不同州的重复条目,这是非常低效的,因为我每次都必须搜索数千行以获得不同的值用户选择不同的国家/州/地区等。
我应该如何更改表的结构,以便以这种分层方式查询数据库?
解决方案
我正要写评论,但它比它长。
我认为 Cassandra 对此太过分了。您的数据结构几乎与 RDBMS + 附加缓存层完美匹配。您有关系(外键),需要连接(有时是多级),您可以Common Table Expressions
用于分层数据。几乎每个现代 RDBM 都支持这一点。postgresql或mysql。对于国家、州、地区等,这些数字几乎是恒定的。
我认为您不需要“水平”扩展它,体积几乎是恒定的,如果需要,您可以通过额外的缓存副本来减少负载。lists
您可以使用或hashes
不定期访问数据库以获取恒定数据,将缓存数据保留在 Redis 中。
推荐阅读
- powershell - 列出组成员的简单脚本
- python - 基于用户输入的类创建自动化
- javascript - 如何创建自定义 npm react 组件并在另一个 react 应用程序中使用它,例如“react-dropdown-select”
- powerbi - 如何动态消除顶行?
- java - snapscraft snap.yaml 用于在 ubuntu 上使用 swing ui 的 Java 应用程序
- c++ - 枚举变量的值不正确
- javascript - Javascript 的“document.querySelector().style.backgroundColor”将 HEX 转换为 RGB 是否有原因?
- amazon-web-services - 保护 s3 对象不被公开
- javascript - 反应脚本未正确执行
- python - 定义函数后用python中的数字替换字母