Firestore NoSql 数据库结构(作为 n 叉树)
Posted
技术标签:
【中文标题】Firestore NoSql 数据库结构(作为 n 叉树)【英文标题】:Firestore NoSql Database Structure (as a n-ary tree) 【发布时间】: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 树是什么意思?节点集合、文档、集合……直到叶子是文档吗?也许您正在寻找数据非规范化。 ***.com/questions/62993392/…查看@AlexMamo 答案 有了这个,你可以创建一个名为“country”的集合,例如,其中包含许多包含用户 ID 的文档。只需按照树的路径,从根到您的解决方案所在的叶,并对这些集合执行不同的查询。 是的,我知道你的意思,但我说的是有多个子集合。我不知道继续进行数据非规范化是否更好,因为我将不得不进行更多查询。 【参考方案1】:在您的场景中,您希望过滤 3 个属性(性别、国家和年龄),我认为如果提供所有三个属性,它可能会起作用。
如果缺少三者之一,您可以使用 denormalization 在多个集合上复制数据,但由于您希望它便宜,我认为您不想增加存储使用量。
另一种选择是将它们全部存储在单个user
集合中,并使用where
条件查询indexing。索引是代表您创建的,这也是 Firestore 如此快速的原因。
【讨论】:
以上是关于Firestore NoSql 数据库结构(作为 n 叉树)的主要内容,如果未能解决你的问题,请参考以下文章
谷歌Cloud Firestore NoSQL数据库正式迎来通用版本