guardar - Diseño de base de datos NoSQL para consultas con restricciones múltiples(Firebase)
firebase update document (1)
Dado que Firebase solo puede filtrar en una propiedad, deberá combinar los valores que desea filtrar en una sola propiedad. Dado que tiene múltiples necesidades de filtrado, es posible que necesite dicha propiedad para cada caso de uso de filtrado.
Parece que esto será posible si combina <category>_<date>
en una sola propiedad, que llamaremos multi-prop
. También combinaremos <category>_<subcategory>_<date>
en una propiedad llamada megaprop
:
$productId
/date
/category
/subcategory
/multiprop
/megaprop
Algunos datos de muestra:
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
Ahora sus consultas se convierten en:
recuperar los últimos 4 productos
ref.orderByChild(''date'').limitToLast(4);
recuperar los últimos 4 productos de la categoría X
ref.orderByChild(''multiprop'').startAt(''candy'').endAt(''candy_~'').limitToLast(4);
recuperar los últimos 4 productos de la categoría X y la subcategoría Y.
ref.orderByChild(''megaprop'').startAt(''candy_christmas'').endAt(''candy_christmas_~'').limitToLast(4);
También vea: http://jsbin.com/piluzo/edit?js,console para una versión de trabajo.
Necesito mejores consejos prácticos para mejorar el rendimiento de mi base de datos noSQL (alojada en Firebase). Además, necesito consejos sobre cómo estructurar los nodos.
La base de datos almacena información del producto, con tres propiedades principales:
$productId
/date
/category
/subcategory
En mi sitio web, tengo tres puntos de vista:
- recuperar los últimos 4 productos (fecha de pedido)
- recuperar los últimos 4 productos (por fecha) de la categoría X
- recuperar los últimos 4 productos (por fecha) de la categoría X y la subcategoría Y.
Tenga en cuenta que también tengo un nodo product_images, que tiene subnodos que coinciden con los productIDs. Entonces, construyendo los databas de la siguiente manera:
$categoryId
$subCategoryId
$productId
no funcionará, ya que necesito saber de antemano el $ categoryId y $ subCatrgoryId antes de poder compararlo con $ productId. También dificultaría la recuperación de los últimos 4 productos.
¿Cómo construiría mi base de datos noSQL de manera eficiente y cómo recuperaría los productos con Firebase filtrándolo con múltiples restricciones?
Sé que en Firebase puedes usar orderByChild e equalTo, pero esto solo funciona en una restricción, mientras que tengo que lidiar con uno a tres.