Joh*_*ews 0 database database-design nosql firebase
我需要最佳实践技巧,以增强我的noSQL数据库(在Firebase上托管)的性能。此外,我需要有关如何构造节点的技巧。
该数据库存储产品信息,具有三个主要属性:
$productId
/date
/category
/subcategory
Run Code Online (Sandbox Code Playgroud)
在我的网站上,我有三种看法:
请注意,我还有一个节点product_images,其子节点与productID匹配。因此,按以下方式构造数据库:
$categoryId
$subCategoryId
$productId
Run Code Online (Sandbox Code Playgroud)
无法使用,因为我需要事先知道$ categoryId和$ subCatrgoryId,然后才能将其与$ productId匹配。这也将使检索最后4个产品变得困难。
我将如何高效地构建noSQL数据库,以及如何使用Firebase筛选出具有多个限制的产品来检索产品?
我知道在Firebase中可以使用orderByChild和equalTo,但这仅适用于一个限制,而我必须处理一到三个。
由于Firebase只能过滤一个属性,因此您必须将要过滤的值组合到一个属性中。由于您有多种过滤需求,因此每个过滤用例可能都需要一个这样的属性。
如果您将其合并<category>_<date>为一个属性(我们称为),那么看来这对您来说是可能的multi-prop。我们还将合并<category>_<subcategory>_<date>为一个名为megaprop:
$productId
/date
/category
/subcategory
/multiprop
/megaprop
Run Code Online (Sandbox Code Playgroud)
一些样本数据:
id_cc_1234
date: 20151031
category: candy
subcategory: halloween
multiprop: candy_20151031
megaprop: candy_halloween_20151031
id_tg_2345
date: 20151125
category: candy
subcategory: thanksgiving
multiprop: candy_20151125
megaprop: candy_thanksgiving_20151125
id_tg_3456
date: 20151125
category: food
subcategory: thanksgiving
multiprop: food_20151125
megaprop: food_thanksgiving_20151125
id_sk_4567
date: 20151205
category: candy
subcategory: sinterklaas
multiprop: candy_20151205
megaprop: candy_sinterklaas_20151205
id_sc_5678
date: 20151225
category: candy
subcategory: christmas
multiprop: candy_20151225
megaprop: candy_christmas_20151225
Run Code Online (Sandbox Code Playgroud)
现在,您的查询变成:
检索最后4个产品
ref.orderByChild('date').limitToLast(4);
Run Code Online (Sandbox Code Playgroud)检索类别X的最后4个产品
ref.orderByChild('multiprop').startAt('candy').endAt('candy_~').limitToLast(4);
Run Code Online (Sandbox Code Playgroud)检索类别X和类别Y的最后4个产品。
ref.orderByChild('megaprop').startAt('candy_christmas').endAt('candy_christmas_~').limitToLast(4);
Run Code Online (Sandbox Code Playgroud)另请参见:http : //jsbin.com/piluzo/edit?js,可运行的控制台。
| 归档时间: |
|
| 查看次数: |
730 次 |
| 最近记录: |