mongodb AggregateAsync最適化の考え方

2454 ワード

mongodb取得データはAggregateAsyncでBsonDocumentでしか取得できませんがデータが多いとresult.ToList()ここでは特に遅いですが、最適化の方法を考えてクエリーの結果をredisに記録します.クエリー時間が保存時間より大きい場合は、この時間差の内容を再綴り込みます.保存時間より小さい場合は、直接結果を取り出して変換する速度がずっと速いです.
var stages = new List(); stages.Add(new JsonPipelineStageDefinition("{KaTeX parse error: Can't use function '\"' in math mode at position 8: unwind:\̲"̲Logs"}")); stages.Add(new JsonPipelineStageDefinition("{KaTeX parse error: Can't use function '\"' in math mode at position 8: match:{\̲"̲Logs.time\":{gte:’"+ stime.ToString(“yyyy-MM-dd HH:mm:ss”) + "’,KaTeX parse error: Expected 'EOF', got '}' at position 52: …HH:mm:ss") + "'}̲}}")); …replaceRoot:{newRoot: “KaTeX parse error: Can't use function '\"' in math mode at position 5: Logs\̲"̲}}")); …project:{ “host”:1,“request_uri”:1,“body_bytes_sent”:1,“client_ip”:1,“http_referer”:1,“request_time”:1,“time”:1,“vip_addr”:1,“request_method”:1,“request_length”:1,“upstream_status”:1}}”)); var pipeline = new PipelineStagePipelineDefinition(stages); var result = await Collection1.AggregateAsync(pipeline);
        var loglist = new List();

        foreach (var item in result.ToList())
        {
            loglist.Add(new LogListInfo()
            {
                Body_bytes_sent = long.Parse(item.Values.ToArray()[0].ToString()),
                Client_ip = item.Values.ToArray()[1].ToString(),
                Host = item.Values.ToArray()[2].ToString(),
                Http_referer = item.Values.ToArray()[3].ToString(),
                Request_length = item.Values.ToArray()[4].ToString().Contains("|") ? 0 : long.Parse(item.Values.ToArray()[4].ToString()),
                Request_method = item.Values.ToArray()[5].ToString(),
                Request_time = float.Parse(item.Values.ToArray()[6].ToString()),
                Request_uri = item.Values.ToArray()[7].ToString(),
                Status = item.Values.ToArray()[9].ToString() == "-" ? 0 : int.Parse(item.Values.ToArray()[9].ToString()),
                Time = DateTimeToUnixTimestamp(Convert.ToDateTime(item.Values.ToArray()[8].ToString())),
                CountTime = Convert.ToDateTime(item.Values.ToArray()[8].ToString()).ToString("MM-dd HH:mm"),
                Vip_addr = item.Values.ToArray()[10].ToString()
            });
        }