Question

Cette question n'est pas nécessairement spécifique à Couchbase 2.0 pour le développement de l'aperçu, mais je pense que cela peut aider les gens à enquêter sur le nouveau produit Couchbase.

Je recherche des conseils sur la modélisation des données. Nous étudions Couchbase en vue de l'utiliser éventuellement pour l'analyse en temps réel.

Cependant, je ne trouve aucune documentation sur la meilleure façon de modéliser les données du monde réel.

Je proposerai un scénario et si la communauté pouvait m'aider ou discuter de quelques idées sur la façon dont cela pourrait être modélisé, ce serait très utile?

Notez que ce n'est pas représentatif de notre produit et je ne demande pas aux gens de résoudre notre modélisation pour nous, la question est plus destinée à la discussion

Supposons que les clients achètent des produits à une date / heure particulière, que les produits disposent d'informations telles que l'identifiant, le nom, la description et le prix, un achat est effectué à une date.

La condition initiale est de pouvoir compter tous les achats entre deux dates. Pour chaque jour, il peut y avoir plus de 100 000 achats - c'est une très grosse affaire;)

Si l'une des syntaxes est incorrecte, merci de me le faire savoir - tous les conseils / aide sont les bienvenus.

Si nous modélisons les données quelque chose comme ça (ce qui peut être complètement incorrect):

Achats avec des produits

{
    "_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"
}

Donc, étant donné la mise en page du document, nous pouvons voir chaque achat et nous pouvons voir les produits qui faisaient partie de cet achat - mais comment pourrions-nous compter tous les achats entre deux dates? Comment pouvez-vous également consulter un journal de tous les achats entre deux dates par ordre décroissant de date?

Est-ce que Couchbase est adapté à quelque chose?

Il peut y avoir des centaines de milliers d'achats entre deux dates et le client n'aime pas attendre les rapports… comme je suis sûr que tout le monde l'a fait;)

Serait-il préférable d'utiliser les fonctions incr et si oui, comment feriez-vous pour modéliser les données?

Un grand merci à tous ceux qui liront ceci - j'espère donner plus d'explications à ce sujet en donnant plus d'exemples de problèmes de modélisation dans le monde réel si possible.

James

Était-ce utile?

La solution

Dans le cas le plus simple, vous pourriez écrire une fonction de carte qui créerait une vue en utilisant le champ de date comme clé.

Donc avec une conception de document légèrement modifiée:

{
   "_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"
}

Votre fonction de carte ressemblerait à ceci:

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

Vous pouvez éventuellement ajouter une fonction de réduction qui résumerait les achats par date.

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

Vous pouvez ensuite interroger la vue à l'aide des paramètres startkey et endkey.

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

Le résultat de l'interrogation de la vue serait:

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

Ou supprimez le paramètre de groupe pour obtenir la somme pour toute la plage de dates:

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

J'espère que cela aide.

- Jean

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top