Pregunta

Esta pregunta no es necesariamente que Couchbase 2.0 desarrolle una vista previa específica, sin embargo, creo que puede ayudar a las personas con investigación sobre el nuevo producto CouchBase.

Estoy buscando consejos sobre modelado de datos. Estamos investigando CouchBase con el fin de usarla para el análisis en tiempo real.

Sin embargo, no puedo encontrar ninguna documentación sobre la mejor manera de modelar datos del mundo real.

Propondré un escenario y si la comunidad podría ayudarme o discutir algunas ideas sobre cómo esto podría modelarse, sería muy útil.

Tenga en cuenta que esto no es representativo de nuestro producto y no le pido a la gente que resuelva nuestro modelado para nosotros, la pregunta está más destinada a la discusión

Supongamos que los clientes realizan compras de productos en una fecha/hora particular, los productos tienen información con ellos, como ID, nombre, descripción y precio, se realiza una compra en una fecha.

El requisito inicial es poder contar todas las compras entre dos fechas. Para cualquier día de 1 día, puede haber más de 100,000 compras, este es un negocio bastante grande;)

Si alguna de la sintaxis es incorrecta, hágamelo saber, todos los consejos/ayuda son bienvenidos.

Si modelamos los datos algo así (que tal vez completamente incorrecto):

Compras con productos

{
    "_id" : "purchase_1",
    "_rev" : "1-1212afdd126126128ae",
    "products" :  [
        "prod_1" : {
            "name" : "Milk",
            "desc" : "Semi-skimmed 1ltr",
            "price" : "0.89"
        },
        "prod_7568" : {
            "name" : "Crisps", 
            "desc" : "Salt and Vinegar",
            "price: "0.85"
        }
    ]
    "date" : "2012-01-14 14:24:33"
}

{
    "_id" : "purchase_2",
    "_rev" : "1-1212afdd126126128ae",
    "products" :  [
        "prod_89001" : {
            "name" : "Bread", 
            "desc" : "White thick sliced",
            "price: "1.20"
        }
    ]
    "date" : "2012-01-14 15:35:59"
}

Entonces, dado el diseño del documento, podemos ver cada compra y podemos ver los productos que estaban en esa compra, sin embargo, ¿cómo podríamos contar todas las compras entre dos fechas? Además, ¿cómo podría ver un registro de todas las compras entre dos fechas en el pedido descendente de la fecha?

¿Es algo para lo que Couchbase es adecuado?

Puede haber cientos de miles de compras entre dos fechas y al cliente no le gusta esperar informes ... como estoy seguro de que todos han experimentado;)

¿Sería mejor usar las funciones crecientes y, de ser así, cómo haría para modelar los datos?

Muchas gracias a cualquiera que lea esto, espero Explaterra sobre esto, dando más ejemplos de problemas de modelado del mundo real si es posible.

Jaime

¿Fue útil?

Solución

En el caso más simple, podría escribir una función de mapa que cree una vista utilizando el campo Fechas como clave.

Entonces, con un diseño de documento ligeramente modificado:

{
   "_id": "purchase_1",
   "_rev": "2-c09e24efaffd446c6ee8ed6a6e2b4a22",
   "products": [
       {
           "id": "prod_3",
           "name": "Bread",
           "desc": "Whole wheat high fiber",
           "price": 2.99
       }
   ],
   "date": "2012-01-15 12:34:56"
}

{
   "_id": "purchase_2",
   "_rev": "2-3a7f4e4e5907d2163d6684f97c45a715",
   "products": [
       {
           "id": "prod_1",
           "name": "Milk",
           "desc": "Semi-skimmed 1ltr",
           "price": 0.89
       },
       {
           "id": "prod_7568",
           "name": "Crisps",
           "desc": "Salt and Vinegar",
           "price": 0.85
       }
   ],
   "date": "2012-01-14 14:24:33"
}

Su función de mapa se vería como:

function(doc) {
  for (var product in doc.products) {
    emit(doc.date, doc.products[product].price);
  }  
}

Opcionalmente, puede agregar una función de reducir que resumiría las compras por fecha.

function(keys, values) {
    return sum(values);
}

Luego puede consultar la vista usando los parámetros StartKey y EndKey.

http://localhost:5984/couchbase/_design/Products/_view/total_price_by_date?startkey="2012-01-01"&endkey="2012-01-31"&group=true

La salida de la consulta de la vista sería:

{"rows":[
{"key":"2012-01-14 14:24:33","value":4.94},
{"key":"2012-01-15 12:34:56","value":2.99}
]}

O elimine el parámetro de grupo para obtener la suma para todo el rango de fechas:

{"rows":[
{"key":null,"value":7.930000000000001}
]}

Espero que ayude.

-- John

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top