【发布时间】:2020-12-05 01:31:07
【问题描述】:
我正在开发一个应用程序,它可以过滤您搜索的用户(性别、年龄、位置……)。我想让这个速度更快,并且尽可能便宜,所以我决定将我的数据存储为 n 叉树,就像这样:
----- Users -----
Root Node: Gender (male or female)
-male
--country (nodes: USA, UK, Spain, Germany, France, Italy, ...)
---age (nodes: 18, 19, 20, 21, 22, ..., 60)
->user (leaf nodes)
-female
--country (nodes: USA, UK, Spain, Germany, France, Italy, ...)
---age (nodes: 18, 19, 20, 21, 22, ..., 60)
->user (leaf nodes)
我认为像这样构建数据库会减少数据量,因为我不必将性别、国家和年龄作为字段存储在最后的文档中......但我不知道这是否在 NoSql 世界中是一种不好的做法,或者这会对性能(速度)产生负面影响。
关于这是否是一个好的结构有什么想法吗?还是应该将所有这些属性存储在每个用户文档中并使用“where”查询子句?谢谢。
【问题讨论】:
-
n-art 树是什么意思?节点集合、文档、集合……直到叶子是文档吗?也许您正在寻找数据非规范化。 stackoverflow.com/questions/62993392/…查看@AlexMamo 答案
-
有了这个,你可以创建一个名为“country”的集合,例如,其中包含许多包含用户 ID 的文档。只需按照树的路径,从根到您的解决方案所在的叶,并对这些集合执行不同的查询。
-
是的,我知道你的意思,但我说的是有多个子集合。我不知道继续进行数据非规范化是否更好,因为我将不得不进行更多查询。
标签: javascript database firebase google-cloud-firestore nosql