gpt4 book ai didi

c# - 如何以最快的方式处理 400K 数据的 foreach/group by?

转载 作者:行者123 更新时间:2023-11-30 21:56:07 25 4
gpt4 key购买 nike

我有一个日志表,其中记录了每个用户登录。目前我们这里有将近 50 万行。

现在我要对这个数据做一个统计,我们保存的是浏览器字符串:
“Mozilla/5.0(Windows NT 6.1;WOW64;rv:39.0)Gecko/20100101 Firefox/39.0”

我想得到的是2个信息:
1) 浏览器和该浏览器的计数
2) 操作系统及该操作系统的计数

据我所知,我在这里有太多选择:
1) 制作一个SQL语句来通过like组获取这些数据
像这样的东西:

SELECT CASE
WHEN [F_BROWSER] like '%Linux%' then 'Linux'
WHEN [F_BROWSER] like '%WINDOWS NT 4.0%' then 'WINDOWS NT 4.0'
WHEN [F_BROWSER] like '%WINDOWS NT 5.0%' then 'WINDOWS NT 5.0'
WHEN [F_BROWSER] like '%WINDOWS NT 5.1%' then 'WINDOWS NT 5.1'
WHEN [F_BROWSER] like '%WINDOWS NT 6.0%' then 'WINDOWS NT 6.0'
WHEN [F_BROWSER] like '%WINDOWS NT 6.1%' then 'WINDOWS NT 6.1'
End as OS
FROM [D_USER].[dbo].[T_LOGIN]

问题:即使只有这 6 个测试值,查询也需要大约 20 秒。我最终每天都会有更多的数据,而且比这里的 6 个案例要多得多……

2) 加载所有浏览器数据并在 C# 中对它们进行 foreach。

我还没有测试过。

知道最快的解决方案是什么吗?
也许比我这里的两个选择更好?

最佳答案

看起来您将来会继续使用此统计信息。你不能一次吞下一大块。我会编写一个后台作业(控制台应用程序、sql 作业等等),然后遍历整个表并从您的表中解析所需的信息并将其放入索引良好的列中。

  1. 在您的表格中再添加 2 个额外的列并将它们编入索引:浏览器、操作系统
  2. 最好您的列应具有整数值,并为不同的浏览器类型和操作系统创建单独的表格。所以不同的浏览器会表示不同的int值。
  3. 在首次运行计划任务时,按批处理项目(每个循环 1K)并将值解析到新添加的列中。
  4. 下次您的预定作业运行时,仅解析这两列中具有空值的行。所以你会保持更新。
  5. 您可以更快地运行聚合函数,因为您的列已编入索引并且分离良好。

关于c# - 如何以最快的方式处理 400K 数据的 foreach/group by?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31705147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com