我需要最佳实践提示来增强noSQL数据库(托管在Firebase上)的性能。此外,我需要有关如何构建节点的提示。
数据库存储产品信息,包含三个主要属性:
$categoryId
$subCategoryId
$productId
在我的网站上,我有三种观点:
请注意,我还有一个节点product_images,其子节点与productID匹配。所以构建数据库如下:
{{1}}
无法正常工作,因为我需要先知道$ categoryId和$ subCatrgoryId,然后才能将它与$ productId匹配。这也很难找回最后4种产品。
我如何以有效的方式构建我的noSQL数据库?如何使用Firebase检索产品,并将其过滤出来并有多种限制?
我知道在Firebase中你可以使用orderByChild和equalTo,但这只适用于一个限制,而我必须处理一到三个。
答案 0 :(得分:5)
由于Firebase只能过滤一个属性,因此您必须将要过滤的值组合到一个属性中。由于您有多个过滤需求,因此每个过滤用例可能需要这样的属性。
如果您将<category>_<date>
合并到一个属性中,我们就可以将其称为multi-prop
。我们还会将<category>_<subcategory>_<date>
合并到名为megaprop
的属性中:
$productId
/date
/category
/subcategory
/multiprop
/megaprop
一些示例数据:
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
现在您的查询变为:
检索最后4个产品
ref.orderByChild('date').limitToLast(4);
检索X类别的最后4个产品
ref.orderByChild('multiprop').startAt('candy').endAt('candy_~').limitToLast(4);
检索类别X和子类别Y的最后4个产品。
ref.orderByChild('megaprop').startAt('candy_christmas').endAt('candy_christmas_~').limitToLast(4);
另请参阅:http://jsbin.com/piluzo/edit?js,console了解工作版本。