针对多限制查询的NoSQL数据库设计(Firebase)
我需要最佳实践技巧来提高我的noSQL数据库(托管在Firebase上)的性能。此外,我需要关于如何构造节点的技巧 数据库存储产品信息,具有三个主要属性:针对多限制查询的NoSQL数据库设计(Firebase),firebase,database-design,database,nosql,Firebase,Database Design,Database,Nosql,我需要最佳实践技巧来提高我的noSQL数据库(托管在Firebase上)的性能。此外,我需要关于如何构造节点的技巧 数据库存储产品信息,具有三个主要属性: $productId /date /category /subcategory 在我的网站上,我有三种观点: 检索最后4种产品(按订单日期) 检索X类的最后4个产品(按日期) 检索类别X和子类别Y的最后4个产品(按日期) 注意,我还有一个节点p
$productId
/date
/category
/subcategory
在我的网站上,我有三种观点:
- 检索最后4种产品(按订单日期)
- 检索X类的最后4个产品(按日期)
- 检索类别X和子类别Y的最后4个产品(按日期)
$categoryId
$subCategoryId
$productId
不会工作,因为我需要事先知道$categoryId和$subCatrgoryId,然后才能将其与$productId匹配。这也会使检索最后4种产品变得困难
我将如何高效地构建noSQL数据库,以及如何使用Firebase检索产品,并使用多种限制将其过滤掉
我知道在Firebase中,您可以使用orderByChild和equalTo,但这只适用于一个限制,而我必须处理一到三个限制。由于Firebase只能对一个属性进行筛选,因此您必须将要筛选的值合并到单个属性中。因为您有多个过滤需求,所以对于每个过滤用例,您可能需要这样一个属性 如果您将
\uuu
合并到一个属性中,这似乎对您是可能的,我们将其称为多属性
。我们还将把\uuu
合并到一个名为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
现在您的查询变成:
ref.orderByChild('date').limitToLast(4);
ref.orderByChild('multiprop').startAt('candy').endAt('candy_~').limitToLast(4);
ref.orderByChild('megaprop').startAt('candy_christmas').endAt('candy_christmas_~').limitToLast(4);
另请参见:获取工作版本。由于Firebase只能对一个属性进行筛选,因此必须将要筛选的值合并到单个属性中。因为您有多个过滤需求,所以对于每个过滤用例,您可能需要这样一个属性 如果您将
\uuu
合并到一个属性中,这似乎对您是可能的,我们将其称为多属性
。我们还将把\uuu
合并到一个名为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
现在您的查询变成:
ref.orderByChild('date').limitToLast(4);
ref.orderByChild('multiprop').startAt('candy').endAt('candy_~').limitToLast(4);
ref.orderByChild('megaprop').startAt('candy_christmas').endAt('candy_christmas_~').limitToLast(4);
另请参见:获取工作版本。绝对有意义!再加上,假设我有10000个产品和20个分类。我正在1视图上查询类别。如果我在节点产品上查询20次,而不是在每个类别上查询一次,那么速度会慢些吗?因此在产品/$categoryId上查询?刚刚尝试过,不幸的是,这不起作用。它剔除了所有以candy开始的产品,而不是仅candy_Christmast。这个答案是正确的,根据您的平台,还有其他几种选择。我们发现,查询所有糖果并将结果放入一个数组,然后(ObjC)NSPredicate从该数组中“过滤”我们想要的数据(圣诞节),效果很好(取决于数据集大小)。此外,以不同的方式构建数据;具有圣诞糖果节点和感恩节糖果节点,其中其子节点包含对主糖果节点中相应子节点的引用。这使您可以访问一个“数组”,该数组可以通过迭代从主candy节点检索所需的数据。这绝对有意义!再加上,假设我有10000个产品和20个分类。我正在1视图上查询类别。如果我在节点产品上查询20次,而不是在每个类别上查询一次,那么速度会慢些吗?因此在产品/$categoryId上查询?刚刚尝试过,不幸的是,这不起作用。它剔除了所有以candy开始的产品,而不是仅candy_Christmast。这个答案是正确的,根据您的平台,还有其他几种选择。我们发现,查询所有糖果并将结果放入一个数组,然后(ObjC)NSPredicate从该数组中“过滤”我们想要的数据(圣诞节),效果很好(取决于数据集大小)。此外,以不同的方式构建数据;具有圣诞糖果节点和感恩节糖果节点,其中其子节点包含对主糖果节点中相应子节点的引用。这使您可以访问一个“数组”,该数组可以被迭代以从主节点检索所需的数据。