2013-08-28 2 views
4

У меня есть журналы доступа, как показано ниже, которые хранятся в экземпляре MongoDB:MongoDB - как рассчитать процентиль

Time       Service     Latency 
[27/08/2013:11:19:22 +0000] "POST Service A HTTP/1.1" 403 
[27/08/2013:11:19:24 +0000] "POST Service B HTTP/1.1" 1022 
[27/08/2013:11:22:10 +0000] "POST Service A HTTP/1.1" 455 

Есть функция аналитика как PERCENTILE_DISC в Oracle вычислить процентиль? Я бы хотел, чтобы процентиль latencyte latency в течение определенного периода времени.

ответ

5

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

db.items.aggregate([ 
     {'$group': { 
      '_id': { 
       'league': '$league', 
       'base': '$base', 
       'type': '$type' 
      }, 
      'value': {'$push': '$chaosequiv'} 
     }}, 
     {'$unwind': '$value'}, 
     {'$sort': {'value': 1}}, 
     {'$group': {'_id': '$_id', 'value': {'$push': '$value'}}}, 
     {'$project': { 
      '_id': 1, 
      'value': {'$arrayElemAt': ['$value', {'$floor': {'$multiply': [0.25, {'$size': '$value'}]}}]} 
     }} 
    ], allowDiskUse=True) 

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

Смежные вопросы