Mongo - наиболее эффективный способ получения значений $ inc в этой схеме - PullRequest
1 голос
/ 25 сентября 2011

Я новичок в Монго и пытаюсь заставить эту схему работать.

Он предназначен для регистрации событий, происходящих на веб-сайте с высоким трафиком - просто увеличивает число раз, когда происходит определенное действие.

  {
     _id: "20110924", 
    Vals:[
      { Key: "SomeStat1": Value: 1},
      { Key: "SomeStat2": Value: 2},
      { Key: "SomeStat3": Value: 3}
    ]
  }
  ,
  {
     _id: "20110925", 
    Vals:[
      { Key: "SomeStat1": Value: 3},
      { Key: "SomeStat8": Value: 13},
      { Key: "SomeStat134": Value: 63}
    ]
  }, etc.

Итак, _id здесь дата, затем массив различных характеристик и количество раз, когда они произошли. Статистика за этот день может отсутствовать, а ключи статистики могут быть динамическими.

Я ищу наиболее эффективный способ достижения этих обновлений, избегая условий гонки ... так что в идеале все атомарно.

Я застрял при попытке сделать $ inc. Когда я указываю, что он должен быть защищен, он пытается сопоставить весь документ как условный, и он не работает на дубликатах ключей. Аналогично для $ addToSet - если я добавлю addToSet с {Key: "SomeStat1"}, он не будет считать его дубликатом, поскольку он сопоставляется со всем документом, и, следовательно, вставить его вместе с существующим значением SomeStat1.

Какой здесь лучший подход? Есть ли способ контролировать соответствие $ addToSet? Или мне нужна другая схема?

Спасибо заранее.

Ответы [ 2 ]

0 голосов
/ 28 сентября 2011

Взгляните на эту статью , в которой объясняются проблемы, связанные с сериализацией словаря с использованием драйвера MongoDB C #.См. Также этот рабочий элемент в драйвере C #.

0 голосов
/ 25 сентября 2011

Вы используете плохую схему, на ней невозможно сделать атомарные обновления.Сделайте это так:

{
   _id: "20110924", 
  Vals: {
    SomeStat1: 1,
    SomeStat2: 2,
    SomeStat3: 3,
  }
}

или вы можете пропустить вложенный документ Vals и вставить статистику в основной документ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...